Laravel Homestead

導覽

Laravel 致力於讓 PHP 開發體驗更愉快,也包含你的本地開發環境。Vagrant 提供了一個簡單、優雅的方式來管理與供應虛擬機器。

Laravel Homestead 是一個官方預載的 Vagrant「封裝包」,提供你一個美好的開發環境,你不需要在你的本機端安裝 PHP、HHVM、網頁伺服器或任何伺服器軟體。不用擔心搞亂你的系統!Vagrant 封裝包可以搞定一切。如果有什麼地方爛掉了,你可以在幾分鐘內快速的砍掉並重建虛擬機器。

Homestead 可以在任何 Windows、Mac 或 Linux 上面運行,裏面包含了 Nginx 網頁伺服器、PHP 5.6、MySQL、Postgres、Redis、Memcached 還有所有你要開發精彩的 Laravel 應用程式所需的軟體。

附註: 如果您是 Windows 的使用者,您可能需要啟用硬體虛擬化(VT-x)。通常需要透過 BIOS 來啟用它。

Homestead 目前是建置且測試於 Vagrant 1.7。

內建軟體

安裝與設定

安裝 VirtualBox / VMware 與 Vagrant

在啟動你的 Homestead 環境之前,你必須先安裝 VirtualBoxVagrant. 兩套軟體在各平台都有提供易用的視覺化安裝程式。

VMware

除了 VirtualBox 外, Homestead 也支援 VMware。如果要在 Homestead 使用 VMwate,你必須購買 VMware Fusion / Desktop 及 VMware Vagrant 外掛。VMware 在虛擬機器中的共享資料夾提供更快的效能。

增加 Vagrant 封裝包

當 VirtualBox / VMware 和 Vagrant 安裝完成後,你可以在終端機以下列命令將 laravel/homestead 封裝包安裝進你的 Vagrant 安裝程式中。下載封裝包會花你一點時間,時間長短將依據你的網路速度決定:

vagrant box add laravel/homestead

如果上述指令失敗,你的 Vagrant 是舊版需要完整的鏈結:

vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

安裝 Homestead

你可以透過手動複製資源庫的方式來安裝 Homestead。建議可將資源庫複製至你的 “home” 目錄中的 Homestead 資料夾,如此一來 Homestead 封裝包將能提供主機服務給你所有的 Laravel(及 PHP)專案:

git clone https://github.com/laravel/homestead.git Homestead

一旦你安裝完 Homestead,即可在 Homestead 目錄執行 bash init.sh 指令來創建 Homestead.yaml 設定檔:

bash init.sh

Homestead.yaml 檔,將會被放置在你的 ~/.homestead 目錄中。

設定你的提供者

你能夠在 Homestead.yaml 檔案中設定 provider,指定 Vagrant 要使用哪個提供者:virtualboxvmware_fusion (Mac OS X) 或 vmware_workstation (Windows)。你可以指定你偏好的提供者。

provider: virtualbox

設定你的 SSH 金鑰

再來你要編輯 Homestead.yaml。可以在檔案中設定你的 SSH 公開金鑰路徑,以及主要機器與 Homestead 虛擬機器之間的共享目錄。

你沒有 SSH 金鑰?在 Mac 和 Linux 下,你可以利用下面的指令來創建一個 SSH 金鑰組:

ssh-keygen -t rsa -C "you@homestead"

在 Windows 下,你需要安裝 Git 並且使用包含在 Git 裏的 Git Bash 來執行上述的指令。另外你也可以使用 PuTTYPuTTYgen

一旦你創建了一個 SSH 金鑰,記得在你的 Homestead.yaml 檔案中的 authorize 屬性指明金鑰路徑。

設定你的共享資料夾

Homestead.yaml 檔案中的 folders 屬性列出所有你想跟你的 Homestead 環境共享的資料夾列表。這些資料夾中的檔案若有更動,他們將會在你的本機與 Homestead 環境裡保持同步。你可以將你需要的共享資料夾都設定進去。

如果要開啟 NFS,只需要共享資料夾中增加簡單的一行:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"

設定你的 Nginx 站台

對 Nginx 不熟悉?沒關係。sites 屬性允許你簡單的對應一個 網域 到一個 homestead 環境中的目錄。在 Homestead.yaml 檔案中有一個範例的站台設定。同樣的,你可以加任何你需要的站台到你的 Homestead 環境中。Homestead 可以為你每個進行中的 Laravel 專案提供方便的虛擬化環境。

你可以透過設定 hhvm 屬性為 true 來讓虛擬站台支援 HHVM:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      hhvm: true

Each site will be accessible by HTTP via port 8000 and HTTPS via port 44300.

Bash Aliases

如果要增加 Bash aliases 到你的 Homestead 封裝包中,只要將內容加到 ~/.homestead 根目錄的 aliases 檔案中即可。

啟動 Vagrant 封裝包

當你根據你的喜好編輯完 Homestead.yaml 後,在終端機從你的 Homestead 資料夾下執行 vagrant up 指令。

Vagrant 會將虛擬機器開機,並且自動設定你的共享目錄和 Nginx 站台。如果要移除虛擬機器,可以使用 vagrant destroy --force 指令。

為了你的 Nginx 站台,別忘記在你的機器的 hosts 檔將「網域」加進去。hosts 檔會將你的本地網域的站台請求重導至你的 Homestead 環境中。在 Mac 和 Linux,該檔案放在 /etc/hosts。在 Windows 環境中,它被放置在 C:\Windows\System32\drivers\etc\hosts。你要加進去的內容類似如下:

192.168.10.10  homestead.app

務必確認 IP 位置與你的 Homestead.yaml 檔案中的相同。一旦你將網域加進你的 hosts 檔案中,你就可以透過網頁瀏覽器存取到你的站台。

http://homestead.app

繼續讀下去,你會學到如何連結到資料庫!

日常使用

透過 SSH 連接

因為你可能會經常需要透過 SSH 進入你的 Homestead 虛擬機器,可以考慮在你的主要機器上創建一個「別名」來快速 SSH 進入你的 Homestead:

alias vm="ssh vagrant@127.0.0.1 -p 2222"

一旦你創建了這個別名,無論你在主要機器的哪個目錄,都可以簡單地使用 “vm” 指令來透過 SSH 進入你的 Homestead 虛擬機器。

或者,你可以在 Homestead 目錄下執行 vagrant ssh 指令。

連結資料庫

Homestead 封裝包中,MySQL 與 Postgres 兩套資料庫都已預裝其中。為了更簡便,Laravel 的 local 資料庫設定已經預設將其設定完成。

如果想要從本機上透過 Navicat 或者是 Sequel Pro 連接 MySQL 或者 Postgres 資料庫,你可以連接 127.0.0.1 的埠 33060 (MySQL) 或 54320 (Postgres)。而帳號密碼分別是 homestead / secret

附註: 從本機端你應該只能使用這些非標準的連接埠來連接資料庫。因為當 Laravel 運行在虛擬機器時,在 Laravel 的資料庫設定檔中依然是設定使用預設的 3306 及 5432 連接埠。

增加更多的站台

一旦 Homestead 環境上架且運行後,你可能會需要為 Laravel 應用程式增加更多的 Nginx 站台。你可以在單一個 Homestead 環境中運行非常多 Laravel 安裝程式。有兩種方式可以達成:第一種,在 Homestead.yaml 檔案中增加站台然後在 Homestead 目錄執行 vagrant provision

附註: 這個是具有破壞性的步驟。 當執行 provision 指令,你現有的資料庫將會被摧毀及重建。

另外,也可以使用存放在 Homestead 環境中的 serve 指令檔。要使用 serve 指令檔,請先 SSH 進入 Homestead 環境中,並執行下列命令:

serve domain.app /home/vagrant/Code/path/to/public/directory 80

附註: 在執行 serve 指令過後,別忘記將新的站台加進本機的 hosts 檔案中。

連接埠

以下的埠將會被重導至 Homestead 環境:

  • SSH: 2222 → Forwards To 22
  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443
  • MySQL: 33060 → Forwards To 3306
  • Postgres: 54320 → Forwards To 5432

加入額外的連接埠

如果你願意,可以重導額外的連接埠到 Vagrant 封裝包,以及指定他們的協定:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

Blackfire 分析器

SensioLabs 所發佈的 Blackfire 分析器 會在你的程式執行時自動搜集相關的資訊,像是 RAM,CPU 耗時,及硬碟 I/O。在 Homestead 中對你的應用程式使用此分析器是相當輕而易舉的一件事。

所有必須的安裝包已經安裝於你的 Homestead 虛擬環境,你只需要在 Homestead.yaml 檔案中設定 Blackfire Server ID 及 token :

blackfire:
    - id: your-server-id
      token: your-server-token
      client-id: your-client-id
      client-token: your-client-token

一旦你設定完了 Blackfire 的憑證,請從你的 Homestead 目錄透過 vagrant provision 重置你的虛擬機器。當然,請確定你已經看過 Blackfire 文件,以瞭解如何在你的瀏覽器安裝 Blackfire 的擴充套件。