Laravel Homestead 
介绍 
Laravel 力求让整个 PHP 开发体验变得愉快,包括您的本地开发环境。Vagrant 提供了一种简单、优雅的方式来管理和配置虚拟机。
Laravel Homestead 是一个官方的、预打包的 Vagrant box,它为您提供了一个出色的开发环境,而无需在本地机器上安装 PHP、Web 服务器和其他服务器软件。再也不用担心弄乱您的操作系统!Vagrant box 是完全可丢弃的。如果出现问题,您可以在几分钟内销毁并重新创建 box!
Homestead 可以在任何 Windows、Mac 或 Linux 系统上运行,并包括 Nginx Web 服务器、PHP 7.1、MySQL、Postgres、Redis、Memcached、Node 以及开发出色 Laravel 应用程序所需的所有其他工具。
NOTE
如果您使用的是 Windows,可能需要启用硬件虚拟化(VT-x)。通常可以通过 BIOS 启用。如果您在 UEFI 系统上使用 Hyper-V,可能还需要禁用 Hyper-V 以访问 VT-x。
包含的软件 
- Ubuntu 16.04
- Git
- PHP 7.1
- Nginx
- MySQL
- MariaDB
- Sqlite3
- Postgres
- Composer
- Node(带有 Yarn、Bower、Grunt 和 Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- ngrok
安装与设置 
第一步 
在启动您的 Homestead 环境之前,您必须安装 VirtualBox 5.1、VMWare 或 Parallels 以及 Vagrant。所有这些软件包都为所有流行的操作系统提供易于使用的可视化安装程序。
要使用 VMware 提供商,您需要购买 VMware Fusion / Workstation 和 VMware Vagrant 插件。尽管不是免费的,但 VMware 可以提供开箱即用的更快的共享文件夹性能。
要使用 Parallels 提供商,您需要安装 Parallels Vagrant 插件。它是免费的。
安装 Homestead Vagrant Box 
安装 VirtualBox / VMware 和 Vagrant 后,您应该使用以下命令将 laravel/homestead box 添加到您的 Vagrant 安装中。根据您的互联网连接速度,下载 box 可能需要几分钟:
vagrant box add laravel/homestead如果此命令失败,请确保您的 Vagrant 安装是最新的。
安装 Homestead 
您可以通过简单地克隆存储库来安装 Homestead。考虑将存储库克隆到您的“home”目录中的 Homestead 文件夹中,因为 Homestead box 将作为您所有 Laravel 项目的主机:
cd ~
git clone https://github.com/laravel/homestead.git Homestead您应该检出 Homestead 的标记版本,因为 master 分支可能并不总是稳定的。您可以在 GitHub Release Page 上找到最新的稳定版本:
cd Homestead
// 克隆所需的版本...
git checkout v6.1.0克隆 Homestead 存储库后,从 Homestead 目录运行 bash init.sh 命令以创建 Homestead.yaml 配置文件。Homestead.yaml 文件将放置在 Homestead 目录中:
// Mac / Linux...
bash init.sh
// Windows...
init.bat配置 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,您只需在同步文件夹配置中添加一个简单的标志:
folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"NOTE
使用 NFS 时,您应该考虑安装 vagrant-bindfs 插件。此插件将维护 Homestead box 中文件和目录的正确用户/组权限。
您还可以通过在 options 键下列出它们来传递 Vagrant 的 Synced Folders 支持的任何选项:
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 机器。在 Mac 和 Linux 上,此文件位于 /etc/hosts。在 Windows 上,它位于 C:\Windows\System32\drivers\etc\hosts。您添加到此文件的行将如下所示:
192.168.10.10  homestead.app确保列出的 IP 地址是您 Homestead.yaml 文件中设置的地址。将域添加到 hosts 文件并启动 Vagrant box 后,您将能够通过 Web 浏览器访问该站点:
http://homestead.app启动 Vagrant Box 
编辑 Homestead.yaml 后,从 Homestead 目录运行 vagrant up 命令。Vagrant 将启动虚拟机并自动配置您的共享文件夹和 Nginx 站点。
要销毁机器,您可以使用 vagrant destroy --force 命令。
每个项目的安装 
您可以为您管理的每个项目配置一个 Homestead 实例,而不是全局安装 Homestead 并在所有项目中共享同一个 Homestead box。如果您希望随项目一起提供 Vagrantfile,以便其他人可以简单地 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 makeWindows:
vendor\\bin\\homestead make接下来,在终端中运行 vagrant up 命令,并在浏览器中访问 http://homestead.app 项目。请记住,您仍然需要为 homestead.app 或您选择的域添加 /etc/hosts 文件条目。
安装 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日常使用 
全局访问 Homestead 
有时您可能希望从文件系统的任何位置 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 等命令。
通过 SSH 连接 
您可以通过从 Homestead 目录发出 vagrant ssh 终端命令来 SSH 进入您的虚拟机。
但是,由于您可能需要频繁地 SSH 进入您的 Homestead 机器,请考虑将上面描述的“函数”添加到您的主机机器中,以快速 SSH 进入 Homestead box。
连接到数据库 
默认情况下,homestead 数据库已为 MySQL 和 Postgres 配置。为了更方便,Laravel 的 .env 文件默认配置框架使用此数据库。
要从主机机器的数据库客户端连接到您的 MySQL 或 Postgres 数据库,您应该连接到 127.0.0.1 和端口 33060(MySQL)或 54320(Postgres)。两个数据库的用户名和密码都是 homestead / secret。
NOTE
从主机机器连接到数据库时,您应该只使用这些非标准端口。由于 Laravel 在虚拟机内运行,您将在 Laravel 数据库配置文件中使用默认的 3306 和 5432 端口。
添加额外的站点 
一旦您的 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 命令。
站点类型 
Homestead 支持多种类型的站点,允许您轻松运行不基于 Laravel 的项目。例如,我们可以使用 symfony2 站点类型轻松地将 Symfony 应用程序添加到 Homestead:
sites:
    - map: symfony2.app
      to: /home/vagrant/Code/Symfony/public
      type: symfony2可用的站点类型有:apache、laravel(默认)、proxy、silverstripe、statamic、symfony2 和 symfony4。
站点参数 
您可以通过 params 站点指令向站点添加额外的 Nginx fastcgi_param 值。例如,我们将添加一个值为 BAR 的 FOO 参数:
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      params:
          - key: FOO
            value: BAR配置 Cron 计划 
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 环境:
- 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共享您的环境 
有时您可能希望与同事或客户共享您当前正在处理的内容。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=laravelNOTE
请记住,Vagrant 本质上是不安全的,运行 share 命令时,您正在将虚拟机暴露给互联网。
多 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网络接口 
Homestead.yaml 的 networks 属性配置 Homestead 环境的网络接口。您可以根据需要配置任意数量的接口:
networks:
    - type: "private_network"
      ip: "192.168.10.20"要启用 桥接 接口,请配置 bridge 设置并将网络类型更改为 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 
您可以通过两个简单的步骤更新 Homestead。首先,您应该使用 vagrant box update 命令更新 Vagrant box:
vagrant box update接下来,您需要更新 Homestead 源代码。如果您克隆了存储库,可以在最初克隆存储库的位置简单地 git pull origin master。
如果您通过项目的 composer.json 文件安装了 Homestead,您应该确保您的 composer.json 文件包含 "laravel/homestead": "^4" 并更新您的依赖项:
composer update旧版本 
NOTE
如果您需要旧版本的 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使用旧版本的 Homestead box 时,您需要与兼容的 Homestead 源代码版本匹配。下面是一个图表,显示了支持的 box 版本、要使用的 Homestead 源代码版本以及提供的 PHP 版本:
| Homestead 版本 | Box 版本 | |
|---|---|---|
| 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 | 
特定提供商设置 
VirtualBox 
默认情况下,Homestead 将 natdnshostresolver 设置配置为 on。这允许 Homestead 使用您的主机操作系统的 DNS 设置。如果您想覆盖此行为,请将以下行添加到您的 Homestead.yaml 文件中:
provider: virtualbox
natdnshostresolver: off