簡介
Laravel 致力于讓你在 PHP 開發(fā)過程中更加輕松愉快川梅,這其中也包括本地開發(fā)環(huán)境的搭建疯兼。 Vagrant 提供了一種簡單、優(yōu)雅的方式來管理和配置虛擬機(jī)贫途。
Laravel Homestead 是一個(gè)官方預(yù)封裝的 Vagrant box吧彪,它為你提供了一個(gè)完美的開發(fā)環(huán)境,你無需在本地安裝 PHP 丢早,web 服務(wù)器姨裸,或其他服務(wù)軟件。 Vagrant box 是完全一次性的怨酝,你不用擔(dān)心系統(tǒng)被搞亂傀缩!如果有什么地方出錯(cuò)了,你可以在幾分鐘內(nèi)銷毀并重建 box 农猬!
Homestead 可以運(yùn)行在 Windows 赡艰、Mac 或 Linux 系統(tǒng)上,它里面包含了 Nginx Web 服務(wù)器斤葱、PHP 7.1 慷垮、MySQL 揖闸、Postgres 、Redis 料身、Memcached 汤纸、Node ,以及一些有利于你開發(fā) laravel 應(yīng)用的其他程序芹血。
如果你使用的是 Windows 系統(tǒng)贮泞,你可能需要啟用硬件虛擬化(VT-x)。這通常需要通過 BIOS 來啟用它幔烛。如果你在一個(gè) UEFI 系統(tǒng)上使用 Hyper-V隙畜,您可能還需要禁用 Hyper-V 才能啟用 VT-x。
內(nèi)置軟件
- Ubuntu 16.04
- Git
- PHP 7.1
- Nginx
- MySQL
- MariaDB
- Sqlite3
- Postgres
- Composer
- Node (With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- ngrok
安裝與設(shè)置
第一步
在你使用 Homestead 環(huán)境之前说贝,你必須先安裝 VirtualBox 5.1 、VMWare 或者 Parallels 中的一個(gè)慎颗,然后再安裝 Vagrant乡恕。上述軟件均提供了針對(duì)不同操作系統(tǒng)的可視化安裝包。
若要使用 VMware provider俯萎,你需要同時(shí)購買 VMware Fusion / Workstation 以及 VMware Vagrant 插件 的軟件授權(quán)傲宜,因?yàn)樗鼈儾皇敲赓M(fèi)的。使用 VMware 的優(yōu)勢(shì)是:可以獲得開箱即用的共享文件夾特性夫啊。
若要使用 Parallels provider函卒,你需要安裝 Parallels Vagrant 插件 ,這是免費(fèi)的撇眯。
安裝 Homestead Vagrant Box
當(dāng) VirtualBox / VMware 以及 Vagrant 安裝完成后报嵌,你可以使用以下命令將 laravel/homestead 這個(gè) box 添加進(jìn)你的 Vagrant 當(dāng)中。 homestead box 的下載會(huì)花費(fèi)你一點(diǎn)時(shí)間熊榛,具體的下載時(shí)長由網(wǎng)絡(luò)速度決定:
vagrant box add laravel/homestead
如果上面的命令運(yùn)行失敗锚国,請(qǐng)先確保你已經(jīng)安裝了最新版本的 Vagrant。
- 如果使用國內(nèi)網(wǎng)絡(luò)玄坦,可以復(fù)制終端上顯示的 homestead box 下載地址手動(dòng)下載并重命名血筑。例如重命名為 virtualbox-3.0.0.box。
然后煎楣,新建一個(gè) metadata.json 文件豺总,并寫入以下示例內(nèi)容:
{
"name": "laravel/homestead",
"versions":
[
{
"version": "3.0.0",
"providers": [
{
"name": "virtualbox",
"url": "virtualbox-3.0.0.box"
}
]
}
]
}
最后,使用以下命令手動(dòng)添加 box
vagrant box add metadata.json # 添加 box
vagrant box list # 列出所有 box
安裝 Homestead
你可以簡單使用 Git 克隆代碼倉庫的方式來安裝 Homestead择懂。建議將克隆的代碼倉庫重命名為 Homestead 喻喳,并放置到你的「home」目錄中,如此一來 Homestead box 就能作為主機(jī)休蟹,為你的所有 Laravel 項(xiàng)目提供服務(wù):
cd ~
git clone https://github.com/laravel/homestead.git Homestead
由于 Homestead 的 master
分支并不是穩(wěn)定分支沸枯,你應(yīng)該檢出已經(jīng)標(biāo)簽過的穩(wěn)定版本日矫。你可以在 Github Release Page 找到最新的穩(wěn)定版本。
cd Homestead
// 檢出所需要的版本...
git checkout v5.4.0
一旦你克隆完 Homestead 的代碼倉庫绑榴,就可以在 Homestead 目錄中運(yùn)行 bash init.sh 命令來創(chuàng)建 Homesstead.yaml 配置文件哪轿。 Homesstead.yaml 文件會(huì)被放置在你的 Homestead 目錄中:
// Mac / Linux...
bash init.sh
// Windows...
init.bat
配置 Homestead
配置你的提供者
Homestead.yaml 中的 provider 參數(shù)設(shè)置取決于你用的是哪一個(gè) Vagrant 提供者 virtualbox 、vmware_fusion 翔怎、vmware_workstation 或者 parallels窃诉。你可以根據(jù)自己的實(shí)際情況來設(shè)置提供者:
provider: virtualbox
配置共享文件夾
你可以在 Homestead.yaml 文件的 folders 屬性里列出所有想與 Homestead 環(huán)境共享的文件夾。這些文件夾中的文件若有變更赤套,它們將會(huì)在你的本機(jī)電腦與 Homestead 環(huán)境自動(dòng)更新同步飘痛。你可以在這里設(shè)置多個(gè)共享文件夾:
folders:
- map: ~/Code
to: /home/vagrant/Code
若要啟動(dòng) NFS ,只需要在共享文件夾的設(shè)置值中加入一個(gè)簡單的參數(shù):
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
- 如果使用 NFS 容握,建議你安裝 vagrant-bindfs 插件宣脉。 這個(gè)插件會(huì)替你處理 box 中的文件或目錄權(quán)限問題。
你也可以在配置中傳遞任何 Vagrant 共享文件夾 支持的參數(shù)剔氏,在 options
配置項(xiàng)下列出它們:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]
配置 Nginx 站點(diǎn)
對(duì) Nginx 不熟悉嗎塑猖?沒關(guān)系。sites 屬性可以幫助你可以輕易指定一個(gè) 域名 來對(duì)應(yīng)到 homestead 環(huán)境中的一個(gè)目錄上谈跛。在 Homestead.yaml 文件中已包含了一個(gè)網(wǎng)站設(shè)置范本羊苟。同樣的,你也可以增加多個(gè)網(wǎng)站到你的 Homestead 環(huán)境中感憾。 Homestead 可以同時(shí)為多個(gè) Laravel 應(yīng)用提供虛擬化環(huán)境:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
如果你在 Homestead box 配置之后更改了 sites 屬性蜡励,那么應(yīng)該重新運(yùn)行 vagrant reload --provision 來更新 Nginx 配置到虛擬機(jī)上。
關(guān)于 Hosts 文件
你必須將在 Nginx sites 中所添加的「域名」也添加到你本機(jī)電腦的 hosts 上阻桅。 hosts 文件會(huì)將請(qǐng)求重定向至 Homestead 環(huán)境中設(shè)置的本地域名凉倚。在 Mac 或 Linux 上,該文件通常會(huì)存放在 /etc/hosts嫂沉。在 Windows 上占遥,則存放于 C:\Windows\System32\drivers\etc\hosts。設(shè)置內(nèi)容如下所示:
192.168.10.10 homestead.app
請(qǐng)務(wù)必確認(rèn) IP 地址與 Homestead.yaml 文件中設(shè)置的相同输瓜。將域名設(shè)置在 hosts 文件之后瓦胎,你就可以通過網(wǎng)頁瀏覽器訪問你的網(wǎng)站。
http://homestead.app
啟動(dòng) Vagrant Box
根據(jù)你的喜好完成 Homestead.yaml 編輯后尤揣,進(jìn)入你的 Homestead 目錄并運(yùn)行 vagrant up 命令搔啊。 Vagrant 就會(huì)根據(jù) Homestead.yaml 里的配置信息啟動(dòng),并為虛擬機(jī)設(shè)置共享文件夾和 Nginx 網(wǎng)站北戏。
如果要移除虛擬機(jī)负芋,你可以使用 vagrant destroy --force 命令
為每個(gè)項(xiàng)目分開安裝
除了在全局范圍內(nèi)安裝 Homestead 環(huán)境,所有項(xiàng)目共享相同的 Homestead box 外,你還可以為每一個(gè)項(xiàng)目配置一個(gè)獨(dú)立的 Homestead 實(shí)例旧蛾。通過傳遞 Vagrantfile 莽龟,可以實(shí)現(xiàn)為每個(gè)項(xiàng)目分別安裝上 Homestead ,其他項(xiàng)目成員只需要通過簡單的 vagrant up 即能跟你擁有一樣的 Homestead 環(huán)境锨天。
要將 Homestead 直接安裝到項(xiàng)目中毯盈,需要使用 Composer:
composer require laravel/homestead --dev
一旦 Homestead 安裝完畢,可以使用 make 命令生成 Vagrantfile 與 Homestead.yaml 文件病袄,并存放于項(xiàng)目的根目錄搂赋。make 命令將會(huì)自動(dòng)在 Homestead.yaml 文件中配置 sites 及 folders
Mac / Linux:
php vendor/bin/homestead make
Windows:
vendor\\bin\\homestead make
接下來,在命令行中運(yùn)行 vagrant up 并通過網(wǎng)頁瀏覽器訪問 http://homestead.app益缠。再次提醒:你仍然需要在 /etc/hosts 里配置 homestead.app 或其它想要使用的域名脑奠。
如果你希望使用 MariaDB 來替換 MySQL,你可以在 Homestead.yaml 文件中增加一個(gè) mariadb 的選項(xiàng)幅慌,這個(gè)選項(xiàng)會(huì)移除 MySQL 并安裝 MariaDB宋欺。因?yàn)?MariaDB 可用作 MySQL 的替代品,所以在你的數(shù)據(jù)庫配置信息里胰伍,可繼續(xù)使用 mysql 數(shù)據(jù)庫驅(qū)動(dòng)迄靠。
box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
- 安裝 MariaDB 需要連接境外網(wǎng)絡(luò),請(qǐng)確保網(wǎng)絡(luò)暢通喇辽!
常見用法
全局使用
有時(shí)候你希望在文件系統(tǒng)的任何地方都可以使用 vagrant up 命令啟動(dòng)虛擬機(jī),那么你需要添加以下代碼到你的 Mac / Linux 系統(tǒng)的 Bash profile 文件里面雨席。對(duì)于 Windows 系統(tǒng)菩咨,您可以通過在 PATH 環(huán)境變量中添加「批處理」文件的方式來實(shí)現(xiàn)此目的。下面這些腳本讓你可以在文件系統(tǒng)的任何位置都能運(yùn)行 Vagrant 命令陡厘,它相當(dāng)于切換到 Homestead 目錄運(yùn)行 Vagrant 命令:
Mac / Linux
function homestead() {
( cd ~/Homestead && vagrant $* )
}
請(qǐng)將 ~/Homestead 這個(gè)路徑修改為你的實(shí)際 Homestead 的安裝路徑抽米,一旦這個(gè)函數(shù)安裝成功,就可以在系統(tǒng)的任意位置運(yùn)行 homestead up 或 homestead ssh 命令糙置。
Windows
在系統(tǒng)的任意位置創(chuàng)建一個(gè)批處理文件 homestead.bat 云茸,并添加如下內(nèi)容:
@echo off
set cwd=%cd%
set homesteadVagrant=C:\Homestead
cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%
set cwd=
set homesteadVagrant=
請(qǐng)確保將 C:\Homestead 這個(gè)路徑修改為你的實(shí)際 Homestead 的安裝路徑,創(chuàng)建完這個(gè)文件后谤饭,將這個(gè)文件路徑添加到 PATH 環(huán)境變量中标捺,就可以在系統(tǒng)的任意位置運(yùn)行 homestead up 或 homestead ssh 命令。
通過 SSH 連接
你可以在 Homestead 目錄運(yùn)行 vagrant ssh 命令來連接虛擬主機(jī)揉抵。
但是亡容,由于您可能需要頻繁地使用 SSH 來連接 Homestead 主機(jī),請(qǐng)考慮將上述「function」添加到你的主機(jī)冤今,以便可以快速的通過 SSH 進(jìn)入你的 Homestead box
連接數(shù)據(jù)庫
在 box 中已經(jīng)為 MySQL 和 Postgres 配置好了一個(gè)開箱即用的數(shù)據(jù)庫 homestead 闺兢,為了更方便的使用它,Laravel 中的 .env 文件將這個(gè)數(shù)據(jù)庫設(shè)置成了框架默認(rèn)使用的數(shù)據(jù)庫戏罢。
如果想要從你主機(jī)上的數(shù)據(jù)庫客戶端連接 MySQL 或 Postgres屋谭,可以通過 127.0.0.1 來使用端口 33060(MySQL) 或 54320(Postgres) 連接脚囊。賬號(hào)密碼分別是 homestead / secret
- 因?yàn)樘摂M機(jī)做了端口轉(zhuǎn)發(fā),所以在本機(jī)電腦上你應(yīng)當(dāng)只使用這些非標(biāo)準(zhǔn)的連接端口桐磁。但在 Laravel 數(shù)據(jù)庫配置文件中悔耘,你依然要使用默認(rèn)的 3306 及 5432 連接端口。
增加更多網(wǎng)站
一旦 Homestead 環(huán)境配置完畢且成功運(yùn)行后所意,你可能會(huì)想要為 Laravel 應(yīng)用程序增加更多的 Nginx 網(wǎng)站淮逊。你可以在單個(gè) Homestead 環(huán)境中運(yùn)行多個(gè) Laravel 程序。要添加額外的網(wǎng)站扶踊,只需將網(wǎng)站配置信息添加到您的 Homestead.yaml 文件中:
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
- map: another.app
to: /home/vagrant/Code/another/public
如果 Vagrant 沒有自動(dòng)管理你的「hosts」文件泄鹏,你可能需要手動(dòng)把新增的站點(diǎn)加入到「hosts」文件中:
192.168.10.10 homestead.app
192.168.10.10 another.app
當(dāng)你的網(wǎng)站添加完成后,切換到 Homestead 目錄運(yùn)行 vagrant reload --provision 命令就可以應(yīng)用新的更改秧耗。
網(wǎng)站類型
Homestead 支持多種類型的網(wǎng)站备籽,允許您輕松地運(yùn)行那些不基于 Laravel 的項(xiàng)目。 例如分井,我們可以使用「symfony2」配置項(xiàng)车猬,輕松地在 Homestead 中添加 Symfony 應(yīng)用程序:
sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2
支持的站點(diǎn)類型有: apache、laravel(默認(rèn))尺锚、proxy珠闰、silverstripe、statamic瘫辩、symfony2 和 symfony4伏嗜。
網(wǎng)站參數(shù)
你還可以使用「params」配置項(xiàng),添加額外的 Nginx fastcgi_param 值到你的網(wǎng)站伐厌。例如添加一個(gè)名稱為「FOO」值為「BAR」的額外配置承绸。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
params:
- key: FOO
value: BAR
配置 Cron 調(diào)度器
Laravel 提供了便利的方式來 調(diào)度 Cron 任務(wù) ,通過 schedule:run
Artisan 命令挣轨,調(diào)度便會(huì)在每分鐘被運(yùn)行军熏。 schedule:run
命令會(huì)檢查定義在你 App\Console\Kernel
類中調(diào)度的任務(wù),判斷哪個(gè)任務(wù)該被運(yùn)行卷扮。
如果你想為 Homestead 網(wǎng)站使用 schedule:run
命令荡澎,你需要在定義網(wǎng)站時(shí)將 schedule
選項(xiàng)設(shè)置為 true
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
schedule: true
該網(wǎng)站的 Cron 任務(wù)會(huì)被定義在虛擬機(jī)的 /etc/cron.d 文件夾中。
端口
默認(rèn)情況下晤锹,以下本地電腦端口將會(huì)被轉(zhuǎn)發(fā)至 Homestead 環(huán)境:
- 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
- Mailhog: 8025 → Forwards To 8025
轉(zhuǎn)發(fā)更多端口
如果需要的話衔瓮,你可以轉(zhuǎn)發(fā)更多端給 Vagrant box ,甚至可以指定它們的協(xié)議類型抖甘。
ports:
- send: 50000
to: 5000
- send: 7777
to: 777
protocol: udp
共享你的環(huán)境
有時(shí)候你想跟你的同事或者是客戶共享你目前的工作進(jìn)度热鞍。Vagrant 為此提供了一個(gè)內(nèi)置方法 vagrant share;不過,如果你在 Homestead.yaml 文件中配置了多個(gè)站點(diǎn)薇宠,那么這條命令將會(huì)變得沒多大用處偷办。
為了解決這個(gè)問題,Homestead 提供了自己的 share 命令澄港。開始之前椒涯,通過 vagrant ssh 命令 SSH 進(jìn)你的 Homestead 機(jī)器中,然后運(yùn)行 share homestead.app回梧。這會(huì)從你的 Homestead.yaml 配置文件中共享 homestead.app 站點(diǎn)废岂。當(dāng)然了,你也可以用其他已經(jīng)配置的站點(diǎn)來代替 homestead.app狱意。
share homestead.app
運(yùn)行完命令之后湖苞,你可以看到一個(gè)包含活動(dòng)日志和共享站點(diǎn)外網(wǎng)訪問路徑的 Ngrok 界面。如果你想要自定義地區(qū)或者其他 Ngrok 選項(xiàng)详囤,你可以添加到 share 命令后面:
share homestead.app -region=eu -subdomain=laravel
- 謹(jǐn)記财骨,Vagrant 本質(zhì)上是不安全的,當(dāng)你運(yùn)行 share 命令的時(shí)候藏姐,你會(huì)把你的虛擬機(jī)暴露在互聯(lián)網(wǎng)中隆箩。
多個(gè) PHP 版本
- 這個(gè)特性僅與 Nginx 兼容。
Homestead 6 支持在同一個(gè)虛擬機(jī)上引入多個(gè)不同版本的 PHP羔杨。您需要在 Homestead.yaml 配置文件中為某個(gè)站點(diǎn)指明需要使用的 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
網(wǎng)絡(luò)接口
Homestead.yaml
文件里的 networks
配置項(xiàng)允許你為 Homestead 環(huán)境配置網(wǎng)絡(luò)接口。您可以根據(jù)需要配置任意數(shù)量的接口:
networks:
- type: "private_network"
ip: "192.168.10.20"
想要配置一個(gè) 橋接 接口的話护姆,增加 bridge
配置項(xiàng),然后 type
填寫為 public_network
:
networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"
想要配置一個(gè) DHCP 接口的話掏击,請(qǐng)從配置中移除 ip
選項(xiàng):
networks:
- type: "public_network"
bridge: "en1: Wi-Fi (AirPort)"
更新 Homestead
你可以簡單的用兩個(gè)步驟來更新 Homestead 卵皂,第一步,使用 vagrant box update 命令更新 Vgrant box :
vagrant box update
接下來砚亭。你需要更新 Homestead 的源代碼灯变,如果你是通過克隆倉庫的方式來安裝的 Homestead ,你可以在你最初克隆倉庫的位置簡單的運(yùn)行 git pull origin master 命令捅膘。
如果你已經(jīng)通過你的項(xiàng)目中的 composer.json 文件安裝了 Homestead 添祸,你應(yīng)該確認(rèn)你的 composer.json 文件中是否包含 "laravel/homestead: "^4" 并且還要更新依賴:
composer update
歷史版本
如果你需要一個(gè)舊版本的 PHP ,請(qǐng)?jiān)趪L試使用舊版本 Homestead 之前寻仗,先閱讀文檔 多個(gè) 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
當(dāng)你使用舊版本的 box 時(shí),你需要確保 Homestead 源代碼的版本與之對(duì)應(yīng),下面的圖表展示了支持的 box 版本耙替,以及與之對(duì)應(yīng)的 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 |
Provider 的特殊設(shè)置
VirtualBox
Homestead 默認(rèn)將 natdnshostresolver
設(shè)置為 on
亚侠。這允許 Homestead 使用你的主機(jī)系統(tǒng)中的 DNS 設(shè)置。如果你想重寫這行為俗扇,你可以在你的 Homestead.yaml
文件中添加下面這幾行:
provider: virtualbox
natdnshostresolver: off
譯者署名
用戶名 | 貢獻(xiàn) |
---|---|
WangYan | 翻譯 |
原文鏈接:http://shouce.jb51.net/laravel-5-5/source/homestead.html#configuring-homestead