# Laravel Homestead
- [簡介](#introduction)
- [安裝與設置](#installation-and-setup)
- [第一步](#first-steps)
- [配置 Homestead](#configuring-homestead)
- [啟動 Vagrant Box](#launching-the-vagrant-box)
- [根據項目安裝](#per-project-installation)
- [安裝 MariaDB](#installing-mariadb)
- [常見用法](#daily-usage)
- [全局可用的 Homestead](#accessing-homestead-globally)
- [通過 SSH 連接](#connecting-via-ssh)
- [連接數據庫](#connecting-to-databases)
- [增加更多網站](#adding-additional-sites)
- [配置 Cron 調度器](#configuring-cron-schedules)
- [端口](#ports)
- [共享你的環境](#sharing-your-environment)
- [多個 PHP 版本](#multiple-php-versions)
- [網絡接口](#network-interfaces)
- [更新 Homestead](#updating-homestead)
- [歷史版本](#old-versions)
- [提供器的特殊設置](#provider-specific-settings)
- [VirtualBox](#provider-specific-virtualbox)
<a name="introduction"></a>
## 簡介
Laravel 努力使整個 PHP 開發體驗更加愉快,包括你的本地開發環境。[Vagrant](https://www.vagrantup.com) 提供了一種簡單、優雅的方式來管理和配置虛擬機。
Laravel Homestead 是一個官方預封裝的 Vagrant Box,它為你提供了一個完美的開發環境,你無需在本地安裝 PHP 、web 服務器或任何服務軟件。 Vagrant Box 是完全一次性的,不用擔心會搞亂你的操作系統!如果有什么地方出錯了,你可以在幾分鐘內銷毀并重建該 Box !
Homestead 可以在任何 Windows、Mac 或 Linux 系統上運行,它包括了 Nginx Web 服務器、PHP 7.1、MySQL、PostgresSQL、Redis、Memcached、Node 以及開發 laravel 應用所需的東西。
> {note} 如果你使用的是 Windows,你可能需要通過 BIOS 來啟用硬件虛擬化(VT-x)。如果你在 UEFI 系統上使用 Hyper-V,可能還需要禁用 Hyper-V 才能啟用 VT-x。
<a name="included-software"></a>
### 內置軟件
- Ubuntu 16.04
- Git
- PHP 7.1
- Nginx
- MySQL
- MariaDB
- Sqlite3
- Postgres
- Composer
- Node (帶有 Yarn、Bower、Grunt 和 Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- ngrok
<a name="installation-and-setup"></a>
## 安裝與設置
<a name="first-steps"></a>
### 第一步
在啟動 Homestead 環境之前,你必須先安裝 [VirtualBox 5.1](https://www.virtualbox.org/wiki/Downloads)/[VMWare](https://www.vmware.com)/[Parallels](http://www.parallels.com/products/desktop/) 以及 [Vagrant](https://www.vagrantup.com/downloads.html)。上述軟件均針對不同操作系統提供了易于使用的可視化安裝包。
若要使用 VMware 提供器,你需要同時購買 VMware Fusion/Workstation 以及 [VMware Vagrant 插件](https://www.vagrantup.com/vmware)。盡管 VMware 不是免費的,但 VMware 可以提供更快的共享文件夾性能。
若要使用 Parallels 提供器,你需要安裝 [Parallels Vagrant 插件](https://github.com/Parallels/vagrant-parallels)。這是免費的。
#### 安裝 Homestead Vagrant Box
當安裝完 VirtualBox/VMware 以及 Vagrant 后,你可以在終端使用下面的命令將 `laravel/homestead` Box 添加到 Vagrant 中安裝。下載 Box 需要幾分鐘的時間,具體取決于你的互聯網連接速度:
vagrant box add laravel/homestead
如果上面的命令運行失敗,請確保你的 Vagrant 是最新版本的 。
> {tip} 國內網絡的下載速度不是一般的慢。可另尋解決之道。
#### 安裝 Homestead
你可以簡單使用 Git 克隆代碼庫來安裝 Homestead。建議將代碼庫克隆到用戶「home」目錄下的 `Homestead` 文件夾中。這樣 Homestead Box 就可以作為所有 Laravel 項目的主機:
cd ~
git clone https://github.com/laravel/homestead.git Homestead
由于 Homestead 的 `master` 分支并不是穩定分支,你應該用打過標簽的穩定版本。你可以在 [Github 發行頁面](https://github.com/laravel/homestead/releases) 上找到最新的穩定版本。
cd Homestead
// Clone the desired release...
git checkout v6.1.0
克隆 Homestead 代碼庫后,從 Homestead 目錄中運行 `bash init.sh` 命令來創建 `Homesstead.yaml` 配置文件。 `Homesstead.yaml` 文件會被放置在你的 Homestead 目錄中:
// Mac / Linux...
bash init.sh
// Windows...
init.bat
<a name="configuring-homestead"></a>
### 配置 Homestead
#### 配置提供器
`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](https://www.vagrantup.com/docs/synced-folders/nfs.html),只需要在共享的文件夾配置中添加一個簡單的標志:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
> {note} 使用 NFS 時,建議你安裝 [vagrant-bindfs](https://github.com/gael-ian/vagrant-bindfs) 插件。這個插件會替你處理 Homestead Box 中的文件或目錄權限問題。
你也可以通過在 `options` 下方列出 Vagrant 的 [共享文件夾](https://www.vagrantup.com/docs/synced-folders/basic_usage.html) 支持的任何選項:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]
#### 配置 Nginx 站點
對 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 配置。
#### 關于 Hosts 文件
你必須將在 Nginx 站點中所添加的「域名」也添加到你機器的 `hosts` 上。 `hosts` 文件會將 Homestead 站點的請求重定向到 Homestead Box 中。在 Mac 或 Linux 上,該文件位于 `/etc/hosts`。在 Windows 上,它位于 `C:\Windows\System32\drivers\etc\hosts`。添加的內容如下所示:
192.168.10.10 homestead.app
請確保列出的 IP 地址是你 `Homestead.yaml` 文件中的 IP 地址。將域名設置到 `hosts` 文件并啟動 Vagrant Box后,你就可以通過 Web 瀏覽器訪問該站點:
http://homestead.app
<a name="launching-the-vagrant-box"></a>
### 啟動 Vagrant Box
根據你的喜好完成 `Homestead.yaml` 的編輯后,再從 Homestead 目錄運行 `vagrant up` 命令。Vagrant 將啟動虛擬機并自動配置你的共享文件夾和 Nginx 站點。
如果要刪除虛擬機,使用 `vagrant destroy --force` 命令。
<a name="per-project-installation"></a>
### 根據項目安裝
除了全局安裝 Homestead 并且在所有項目共享相同的 Homestead Box 外,你可以為每個項目配置 Homestead 實例。通過在項目下創建 `Vagrantfile`,可以實現為每個項目分別安裝上 Homestead ,其他項目成員只需要簡單地運行 `vagrant up` 就能都擁有同樣的開發環境。
要將 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` 或其它想要使用的域名。
<a name="installing-mariadb"></a>
### 安裝 MariaDB
如果你喜歡使用 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
<a name="daily-usage"></a>
## 常見用法
<a name="accessing-homestead-globally"></a>
### 全局使用
如果你想在系統的任何地方都可以使用 `vagrant up` 命令啟動 Homestead,你可以在 Mac / Linux 系統的 Bash 配置文件中添加 Bash 函數。在 Windows 中,你可以通過在 `PATH` 環境變量中添加一個「批處理」文件來實現。下面這些腳本使你可以從系統的任何地方運行任何 Vagrant 命令,并將自動將該命令指向你的 Homestead 安裝路徑:
#### Mac / Linux
function homestead() {
( cd ~/Homestead && vagrant $* )
}
確保將該功能中的 `~/Homestead` 路徑是你實際的 Homestead 安裝路徑。這樣你就可以在系統的任何地方運行 `homestead up` 或 `homestead ssh` 等命令。
#### Windows
在系統的任意位置創建一個批處理文件 `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` 命令。
<a name="connecting-via-ssh"></a>
### 通過 SSH 連接
你可以通過在 Homestead 目錄運行 `vagrant ssh` 命令來連接虛擬主機。
你可能需要頻繁地使用 SSH 連接 Homestead 主機,可以嘗試著利用上述「功能」來快速地使用 SSH 連接 Homestead Box 。
<a name="connecting-to-databases"></a>
### 連接數據庫
在 Box 中已經為 MySQL 和 Postgres 配置好了一個數據庫 `homestead`。為了更方便的使用它,Laravel 中的 `.env` 文件將框架配置成默認使用此數據庫。
要從主機的數據庫客戶端連接到 MySQL 或 Postgres,就連接到 `127.0.0.1` 和端口 `33060` (MySQL) 或 `54320` (Postgres)。賬號密碼分別是 `homestead`/`secret`
> {note} 從主機連接到數據庫時,只能使用這些非標準端口。 而 Laravel 在虛擬機中運行時,仍舊使用 Laravel 數據庫配置文件中的默認 3306 和 5432 端口。
<a name="adding-additional-sites"></a>
### 增加更多網站
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」文件,你可能需要手動把新增的站點加入到該文件中:
192.168.10.10 homestead.app
192.168.10.10 another.app
添加站點后,從 Homestead 目錄運行 `vagrant reload --provision` 命令就可以應用新的更改。
<a name="site-types"></a>
#### 站點類型
Homestead 支持多種類型的站點,可以讓你輕松地運行那些不基于 Laravel 的項目。 例如,我們可以使用 `symfony2` 站點類型輕松地在 Homestead 中添加 Symfony 應用程序:
sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2
支持的站點類型有: `apache`、`laravel`(默認)、`proxy`、`silverstripe`、`statamic`、`symfony2` 和 `symfony4`。
<a name="site-parameters"></a>
#### 站點參數
你還可以使用 `params` 站點指令向你的站點添加其他 Nginx `fastcgi_param` 值。例如,添加一個值為 `BAR` 的 `FOO` 參數。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
params:
- key: FOO
value: BAR
<a name="configuring-cron-schedules"></a>
### 配置 Cron 調度器
Laravel 提供了便利的方式來 [調度 Cron 任務](/docs/{{version}}/scheduling),通過Artisan 命令 `schedule:run` ,調度便會在每分鐘運行一次。`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` 文件夾中。
<a name="ports"></a>
### 端口
默認情況下,以下端口會被轉發至 Homestead 環境:
- **SSH:** 2222 → 發送到 22
- **HTTP:** 8000 → 發送到 80
- **HTTPS:** 44300 → 發送到 443
- **MySQL:** 33060 → 發送到 3306
- **Postgres:** 54320 → 發送到 5432
- **Mailhog:** 8025 → 發送到 8025
#### 轉發更多端口
你可以根據需要轉發更多端口給 Vagrant Box,并指定其協議:
ports:
- send: 50000
to: 5000
- send: 7777
to: 777
protocol: udp
<a name="sharing-your-environment"></a>
### 共享你的環境
有時候你想跟你的同事或者是客戶共享你目前在開展的工作。Vagrant 提供了一個內置方法 `vagrant share` 來支持。不過,如果你的 `Homestead.yaml` 文件中配置了多個站點,就無法使用此命令。
為了解決這個問題,Homestead 提供了自己的 `share` 命令。開始之前,通過 `vagrant ssh` SSH 命令連接 Homestead 機器中并運行 `share homestead.app`。這會從 `Homestead.yaml` 配置文件中共享 `homestead.app` 站點。你也可以用其他已經配置的站點來代替 `homestead.app`。
share homestead.app
運行命令后,你可以看到一個 Ngrok 界面,其中包含活動日志和共享站點的可公開訪問的 URL。如果要指定自定義地區或者其他 Ngrok 選項,可以將它們添加到 `share` 命令后面:
share homestead.app -region=eu -subdomain=laravel
> {note} 謹記,Vagrant 本質上是不安全的。當你運行 `share` 命令時,你已經在互聯網中暴露了你的虛擬機。
<a name="multiple-php-versions"></a>
### 多個 PHP 版本
> {note} 此功能僅與 Nginx 兼容。
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
<a name="network-interfaces"></a>
## 網絡接口
`Homestead.yaml` 的 `networks` 屬性為 Homestead 環境配置網絡接口。你可以根據需要配置任意數量的接口:
networks:
- type: "private_network"
ip: "192.168.10.20"
想啟用 [橋接](https://www.vagrantup.com/docs/networking/public_network.html) 接口,請配置 `bridge` 設置,并將網絡類型更改為 `public_network` :
networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"
要啟用 [DHCP](https://www.vagrantup.com/docs/networking/public_network.html),只需從配置中刪除 `ip` 選項:
networks:
- type: "public_network"
bridge: "en1: Wi-Fi (AirPort)"
<a name="updating-homestead"></a>
## 更新 Homestead
你可以通過兩個簡單的步驟更新 Homestead。首先,使用 `vagrant box update` 命令更新 Vgrant Box :
vagrant box update
接下來,如果你是通過克隆倉庫的方式來安裝的 Homestead,你需要更新 Homestead 的源代碼。你可以在你最初克隆倉庫的位置簡單地運行 `git pull origin master` 命令。
如果你是通過項目中的 `composer.json` 文件安裝 Homestead ,則應該確認 `composer.json` 文件中包含 `"laravel/homestead: "^6"` 并更新依賴:
composer update
<a name="old-versions"></a>
## 歷史版本
> {tip} 如果你需要一個舊版本的 PHP,請在嘗試使用舊版本的 Homestead 之前,先閱讀文檔 <a href="#multiple-php-versions">多個 PHP 版本</a> 上的文檔。
你可以通過添加以下內容添加到 `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
當你使用較舊版本的 Homestead Box 時,你需要確保將其與 Homestead 源代碼的兼容版本進行匹配。下面的圖表展示了支持的 Box 版本,使用哪個版本的 Homestead 源代碼以及提供的 PHP 版本
| | Homestead Version | Box Version |
| ------- | ----------------- | ----------- |
| PHP 7.0 | 3.1.0 | 0.6.0 |
| PHP 7.1 | 4.0.0 | 1.0.0 |
| PHP 7.1 | 5.0.0 | 2.0.0 |
| PHP 7.1 | 6.0.0 | 3.0.0 |
<a name="provider-specific-settings"></a>
## 提供器的特殊設置
<a name="provider-specific-virtualbox"></a>
### VirtualBox
Homestead 默認將 `natdnshostresolver` 設置為 `on`。這允許 Homestead 使用主機系統中的 DNS 設置。如果你想重寫這行為,你可以在你的 `Homestead.yaml` 文件中添加下面這幾行:
provider: virtualbox
natdnshostresolver: off
## 譯者署名
| 用戶名 | 頭像 | 貢獻 | 簽名 |
|---|---|---|---|
| [WangYan](http://blog.wangyan.org) | <img class="avatar-66 rm-style" src="http://imgcdn.wangyan.org/a/120x120.jpg"> | 翻譯 | [About Me](http://blog.wangyan.org/about) |
| [@JokerLinly](https://laravel-china.org/users/5350) | <img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/5350_1481857380.jpg"> | Review | Stay Hungry. Stay Foolish. |
---
> {note} 歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動共創開源社區。
>
> 轉載請注明:本文檔由 Laravel China 社區 [laravel-china.org](https://laravel-china.org) 組織翻譯,詳見 [翻譯召集帖](https://laravel-china.org/topics/5756/laravel-55-document-translation-call-come-and-join-the-translation)。
>
> 文檔永久地址: https://d.laravel-china.org
- 說明
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- HomeStead
- Valet
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- 門面(Facades)
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- 重定向
- Session
- 表單驗證
- 錯誤與日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- API認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Passport OAuth 認證
- Scout 全文搜索
- Socialite 社交化登錄
- 交流說明