Laravel 致力於讓你在 PHP 開發過程當中更加輕鬆愉快,這其中也包括本地開發環境的搭建。 Vagrant 提供了一種簡單、優雅的方式來管理和配置虛擬機。javascript
Laravel Homestead 是一個官方預封裝的 Vagrant box,它爲你提供了一個完美的開發環境,你無需在本地安裝 PHP ,web 服務器,或其餘服務軟件。 Vagrant box 是徹底一次性的,你不用擔憂系統被搞亂!若是有什麼地方出錯了,你能夠在幾分鐘內銷燬並重建 box !php
Homestead 能夠運行在 Windows 、Mac 或 Linux 系統上,它裏面包含了 Nginx Web 服務器、PHP 7.1 、MySQL 、Postgres 、Redis 、Memcached 、Node ,以及一些有利於你開發 laravel 應用的其餘程序。css
若是你使用的是 Windows 系統,你可能須要啓用硬件虛擬化(VT-x)。這一般須要經過 BIOS 來啓用它。若是你在一個 UEFI 系統上使用 Hyper-V,您可能還須要禁用 Hyper-V 才能啓用 VT-x。html
在你使用 Homestead 環境以前,你必須先安裝 VirtualBox 5.1 、VMWare 或者 Parallels 中的一個,而後再安裝 Vagrant。上述軟件均提供了針對不一樣操做系統的可視化安裝包。java
若要使用 VMware provider,你須要同時購買 VMware Fusion / Workstation 以及 VMware Vagrant 插件 的軟件受權,由於它們不是免費的。使用 VMware 的優點是:能夠得到開箱即用的共享文件夾特性。node
若要使用 Parallels provider,你須要安裝 Parallels Vagrant 插件 ,這是免費的。mysql
當 VirtualBox / VMware 以及 Vagrant 安裝完成後,你可使用如下命令將 laravel/homestead 這個 box 添加進你的 Vagrant 當中。 homestead box 的下載會花費你一點時間,具體的下載時長由網絡速度決定:laravel
vagrant box add laravel/homestead
若是上面的命令運行失敗,請先確保你已經安裝了最新版本的 Vagrant。git
而後,新建一個 metadata.json 文件,並寫入如下示例內容:github
{
"name": "laravel/homestead", "versions": [ { "version": "3.0.0", "providers": [ { "name": "virtualbox", "url": "virtualbox-3.0.0.box" } ] } ] }
最後,使用如下命令手動添加 box
vagrant box add metadata.json # 添加 box vagrant box list # 列出全部 box
你能夠簡單使用 Git 克隆代碼倉庫的方式來安裝 Homestead。建議將克隆的代碼倉庫重命名爲 Homestead ,並放置到你的「home」目錄中,如此一來 Homestead box 就能做爲主機,爲你的全部 Laravel 項目提供服務:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
因爲 Homestead 的 master
分支並非穩定分支,你應該檢出已經標籤過的穩定版本。你能夠在 Github Release Page 找到最新的穩定版本。
cd Homestead // 檢出所須要的版本... git checkout v5.4.0
一旦你克隆完 Homestead 的代碼倉庫,就能夠在 Homestead 目錄中運行 bash init.sh 命令來建立 Homesstead.yaml 配置文件。 Homesstead.yaml 文件會被放置在你的 Homestead 目錄中:
// Mac / Linux... bash init.sh // Windows... init.bat
Homestead.yaml 中的 provider 參數設置取決於你用的是哪個 Vagrant 提供者 virtualbox 、vmware_fusion 、vmware_workstation 或者 parallels。你能夠根據本身的實際狀況來設置提供者:
provider: virtualbox
你能夠在 Homestead.yaml 文件的 folders 屬性裏列出全部想與 Homestead 環境共享的文件夾。這些文件夾中的文件如有變動,它們將會在你的本機電腦與 Homestead 環境自動更新同步。你能夠在這裏設置多個共享文件夾:
folders:
- map: ~/Code to: /home/vagrant/Code
若要啓動 NFS ,只須要在共享文件夾的設置值中加入一個簡單的參數:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
你也能夠在配置中傳遞任何 Vagrant 共享文件夾 支持的參數,在 options
配置項下列出它們:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync" options: rsync__args: ["--verbose", "--archive", "--delete", "-zz"] rsync__exclude: ["node_modules"]
對 Nginx 不熟悉嗎?不要緊。sites 屬性能夠幫助你能夠輕易指定一個 域名 來對應到 homestead 環境中的一個目錄上。在 Homestead.yaml 文件中已包含了一個網站設置範本。一樣的,你也能夠增長多個網站到你的 Homestead 環境中。 Homestead 能夠同時爲多個 Laravel 應用提供虛擬化環境:
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public
若是你在 Homestead box 配置以後更改了 sites 屬性,那麼應該從新運行 vagrant reload --provision 來更新 Nginx 配置到虛擬機上。
你必須將在 Nginx sites 中所添加的「域名」也添加到你本機電腦的 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
根據你的喜愛完成 Homestead.yaml 編輯後,進入你的 Homestead 目錄並運行 vagrant up 命令。 Vagrant 就會根據 Homestead.yaml 裏的配置信息啓動,併爲虛擬機設置共享文件夾和 Nginx 網站。
若是要移除虛擬機,你可使用 vagrant destroy --force 命令
除了在全局範圍內安裝 Homestead 環境,全部項目共享相同的 Homestead box 外,你還能夠爲每個項目配置一個獨立的 Homestead 實例。經過傳遞 Vagrantfile ,能夠實現爲每一個項目分別安裝上 Homestead ,其餘項目成員只須要經過簡單的 vagrant up 即能跟你擁有同樣的 Homestead 環境。
要將 Homestead 直接安裝到項目中,須要使用 Composer:
composer require laravel/homestead --dev
一旦 Homestead 安裝完畢,可使用 make 命令生成 Vagrantfile 與 Homestead.yaml 文件,並存放於項目的根目錄。make 命令將會自動在 Homestead.yaml 文件中配置 sites 及 folders
Mac / Linux:
php vendor/bin/homestead make
Windows:
vendor\\bin\\homestead make
接下來,在命令行中運行 vagrant up 並經過網頁瀏覽器訪問 http://homestead.app。再次提醒:你仍然須要在 /etc/hosts 裏配置 homestead.app 或其它想要使用的域名。
若是你但願使用 MariaDB 來替換 MySQL,你能夠在 Homestead.yaml 文件中增長一個 mariadb 的選項,這個選項會移除 MySQL 並安裝 MariaDB。由於 MariaDB 可用做 MySQL 的替代品,因此在你的數據庫配置信息裏,可繼續使用 mysql 數據庫驅動。
box: laravel/homestead
ip: "192.168.20.20" memory: 2048 cpus: 4 provider: virtualbox mariadb: true
有時候你但願在文件系統的任何地方均可以使用 vagrant up 命令啓動虛擬機,那麼你須要添加如下代碼到你的 Mac / Linux 系統的 Bash profile 文件裏面。對於 Windows 系統,您能夠經過在 PATH 環境變量中添加「批處理」文件的方式來實現此目的。下面這些腳本讓你能夠在文件系統的任何位置都能運行 Vagrant 命令,它至關於切換到 Homestead 目錄運行 Vagrant 命令:
function homestead() { ( cd ~/Homestead && vagrant $* ) }
請將 ~/Homestead 這個路徑修改成你的實際 Homestead 的安裝路徑,一旦這個函數安裝成功,就能夠在系統的任意位置運行 homestead up 或 homestead ssh 命令。
在系統的任意位置建立一個批處理文件 homestead.bat ,並添加以下內容:
@echo off set cwd=%cd% set homesteadVagrant=C:\Homestead cd /d %homesteadVagrant% && vagrant %* cd /d %cwd% set cwd= set homesteadVagrant=
請確保將 C:\Homestead 這個路徑修改成你的實際 Homestead 的安裝路徑,建立完這個文件後,將這個文件路徑添加到 PATH 環境變量中,就能夠在系統的任意位置運行 homestead up 或 homestead ssh 命令。
你能夠在 Homestead 目錄運行 vagrant ssh 命令來鏈接虛擬主機。
可是,因爲您可能須要頻繁地使用 SSH 來鏈接 Homestead 主機,請考慮將上述「function」添加到你的主機,以即可以快速的經過 SSH 進入你的 Homestead box
在 box 中已經爲 MySQL 和 Postgres 配置好了一個開箱即用的數據庫 homestead ,爲了更方便的使用它,Laravel 中的 .env 文件將這個數據庫設置成了框架默認使用的數據庫。
若是想要從你主機上的數據庫客戶端鏈接 MySQL 或 Postgres,能夠經過 127.0.0.1 來使用端口 33060(MySQL) 或 54320(Postgres) 鏈接。帳號密碼分別是 homestead / secret
一旦 Homestead 環境配置完畢且成功運行後,你可能會想要爲 Laravel 應用程序增長更多的 Nginx 網站。你能夠在單個 Homestead 環境中運行多個 Laravel 程序。要添加額外的網站,只需將網站配置信息添加到您的 Homestead.yaml 文件中:
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public - map: another.app to: /home/vagrant/Code/another/public
若是 Vagrant 沒有自動管理你的「hosts」文件,你可能須要手動把新增的站點加入到「hosts」文件中:
192.168.10.10 homestead.app 192.168.10.10 another.app
當你的網站添加完成後,切換到 Homestead 目錄運行 vagrant reload --provision 命令就能夠應用新的更改。
Homestead 支持多種類型的網站,容許您輕鬆地運行那些不基於 Laravel 的項目。 例如,咱們可使用「symfony2」配置項,輕鬆地在 Homestead 中添加 Symfony 應用程序:
sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2
支持的站點類型有: apache、laravel(默認)、proxy、silverstripe、statamic、symfony2 和 symfony4。
你還可使用「params」配置項,添加額外的 Nginx fastcgi_param 值到你的網站。例如添加一個名稱爲「FOO」值爲「BAR」的額外配置。
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public params: - key: FOO value: BAR
Laravel 提供了便利的方式來 調度 Cron 任務 ,經過 schedule:run
Artisan 命令,調度便會在每分鐘被運行。 schedule:run
命令會檢查定義在你 App\Console\Kernel
類中調度的任務,判斷哪一個任務該被運行。
若是你想爲 Homestead 網站使用 schedule:run
命令,你須要在定義網站時將 schedule
選項設置爲 true
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public schedule: true
該網站的 Cron 任務會被定義在虛擬機的 /etc/cron.d 文件夾中。
默認狀況下,如下本地電腦端口將會被轉發至 Homestead 環境:
若是須要的話,你能夠轉發更多端給 Vagrant box ,甚至能夠指定它們的協議類型。
ports: - send: 50000 to: 5000 - send: 7777 to: 777 protocol: udp
有時候你想跟你的同事或者是客戶共享你目前的工做進度。Vagrant 爲此提供了一個內置方法 vagrant share;不過,若是你在 Homestead.yaml 文件中配置了多個站點,那麼這條命令將會變得沒多大用處。
爲了解決這個問題,Homestead 提供了本身的 share 命令。開始以前,經過 vagrant ssh 命令 SSH 進你的 Homestead 機器中,而後運行 share homestead.app。這會從你的 Homestead.yaml 配置文件中共享 homestead.app 站點。固然了,你也能夠用其餘已經配置的站點來代替 homestead.app。
share homestead.app
運行完命令以後,你能夠看到一個包含活動日誌和共享站點外網訪問路徑的 Ngrok 界面。若是你想要自定義地區或者其餘 Ngrok 選項,你能夠添加到 share 命令後面:
share homestead.app -region=eu -subdomain=laravel
Homestead 6 支持在同一個虛擬機上引入多個不一樣版本的 PHP。您須要在 Homestead.yaml 配置文件中爲某個站點指明須要使用的 PHP 版本便可。 可用的 PHP 版本有:「5.6」、「7.0」、「7.1」
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public php: "5.6"
此外,您還能夠經過 CLI 使用任何支持的 PHP 版本:
php5.6 artisan list php7.0 artisan list php7.1 artisan list
Homestead.yaml
文件裏的 networks
配置項容許你爲 Homestead 環境配置網絡接口。您能夠根據須要配置任意數量的接口:
networks:
- type: "private_network" ip: "192.168.10.20"
想要配置一個 橋接 接口的話,增長 bridge
配置項,而後 type
填寫爲 public_network
:
networks:
- type: "public_network" ip: "192.168.10.20" bridge: "en1: Wi-Fi (AirPort)"
想要配置一個 DHCP 接口的話,請從配置中移除 ip
選項:
networks:
- type: "public_network" bridge: "en1: Wi-Fi (AirPort)"
你能夠簡單的用兩個步驟來更新 Homestead ,第一步,使用 vagrant box update 命令更新 Vgrant box :
vagrant box update
接下來。你須要更新 Homestead 的源代碼,若是你是經過克隆倉庫的方式來安裝的 Homestead ,你能夠在你最初克隆倉庫的位置簡單的運行 git pull origin master 命令。
若是你已經經過你的項目中的 composer.json 文件安裝了 Homestead ,你應該確認你的 composer.json 文件中是否包含 "laravel/homestead: "^4" 而且還要更新依賴:
composer update
若是你須要一箇舊版本的 PHP ,請在嘗試使用舊版本 Homestead 以前,先閱讀文檔 多個 PHP 版本。
你能夠經過添加如下配置到你的 Homestead.yaml
文件來方便的覆蓋 Homestead 使用的 box 版本:
version: 0.6.0
例如:
box: laravel/homestead
version: 0.6.0
ip: "192.168.20.20" memory: 2048 cpus: 4 provider: virtualbox
當你使用舊版本的 box 時,你須要確保 Homestead 源代碼的版本與之對應,下面的圖表展現了支持的 box 版本,以及與之對應的 Homestead 的源代碼版本和 box 所提供的 PHP 版本:
Homestead Version | Box Version | |
---|---|---|
PHP 7.0 | 3.1.0 | 0.6.0 |
PHP 7.1 | 4.0.0 | 1.0.0 |
Homestead 默認將 natdnshostresolver
設置爲 on
。這容許 Homestead 使用你的主機系統中的 DNS 設置。若是你想重寫這行爲,你能夠在你的 Homestead.yaml
文件中添加下面這幾行:
provider: virtualbox natdnshostresolver: off
用戶名 | 貢獻 |
---|---|
WangYan | 翻譯 |
原文連接:http://shouce.jb51.net/laravel-5-5/source/homestead.html#configuring-homestead