Skip to content
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

Laravel Homestead ​

介绍 ​

Laravel 力求让整个 PHP 开发体验变得愉快,包括您的本地开发环境。Vagrant 提供了一种简单、优雅的方式来管理和配置虚拟机。

Laravel Homestead 是一个官方的、预打包的 Vagrant box,它为您提供了一个出色的开发环境,而无需在本地机器上安装 PHP、Web 服务器和任何其他服务器软件。再也不用担心弄乱您的操作系统了!Vagrant box 是完全可丢弃的。如果出现问题,您可以在几分钟内销毁并重新创建 box!

Homestead 可以在任何 Windows、Mac 或 Linux 系统上运行,并包括 Nginx Web 服务器、PHP 7.2、PHP 7.1、PHP 7.0、PHP 5.6、MySQL、PostgreSQL、Redis、Memcached、Node 以及您需要的所有其他工具来开发出色的 Laravel 应用程序。

注意

如果您使用的是 Windows,您可能需要启用硬件虚拟化 (VT-x)。通常可以通过 BIOS 启用。如果您在 UEFI 系统上使用 Hyper-V,您可能还需要禁用 Hyper-V 以访问 VT-x。

包含的软件 ​

  • Ubuntu 16.04
  • Git
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • Apache (可选)
  • MySQL
  • MariaDB (可选)
  • Sqlite3
  • PostgreSQL
  • Composer
  • Node (带有 Yarn、Bower、Grunt 和 Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • Elasticsearch (可选)
  • ngrok

安装与设置 ​

第一步 ​

在启动您的 Homestead 环境之前,您必须安装 VirtualBox 5.2、VMWare、Parallels 或 Hyper-V 以及 Vagrant。所有这些软件包都为所有流行的操作系统提供易于使用的可视化安装程序。

要使用 VMware 提供商,您需要购买 VMware Fusion / Workstation 和 VMware Vagrant 插件。尽管它不是免费的,但 VMware 可以提供更快的共享文件夹性能。

要使用 Parallels 提供商,您需要安装 Parallels Vagrant 插件。它是免费的。

由于 Vagrant 的限制,Hyper-V 提供商会忽略所有网络设置。

安装 Homestead Vagrant Box ​

安装 VirtualBox / VMware 和 Vagrant 后,您应该使用以下命令将 laravel/homestead box 添加到您的 Vagrant 安装中。根据您的互联网连接速度,下载 box 可能需要几分钟:

php
vagrant box add laravel/homestead

如果此命令失败,请确保您的 Vagrant 安装是最新的。

安装 Homestead ​

您可以通过克隆存储库来安装 Homestead。考虑将存储库克隆到您的“home”目录中的 Homestead 文件夹中,因为 Homestead box 将作为您所有 Laravel 项目的主机:

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

您应该检出 Homestead 的标记版本,因为 master 分支可能并不总是稳定的。您可以在 GitHub 发布页面 上找到最新的稳定版本:

php
cd ~/Homestead

// 克隆所需的版本...
git checkout v7.1.2

克隆 Homestead 存储库后,从 Homestead 目录运行 bash init.sh 命令以创建 Homestead.yaml 配置文件。Homestead.yaml 文件将放置在 Homestead 目录中:

php
// Mac / Linux...
bash init.sh

// Windows...
init.bat

配置 Homestead ​

设置您的提供商 ​

Homestead.yaml 文件中的 provider 键指示应使用哪个 Vagrant 提供商:virtualbox、vmware_fusion、vmware_workstation、parallels 或 hyperv。您可以将其设置为您喜欢的提供商:

php
provider: virtualbox

配置共享文件夹 ​

Homestead.yaml 文件的 folders 属性列出了您希望与 Homestead 环境共享的所有文件夹。随着这些文件夹中的文件发生更改,它们将在本地计算机和 Homestead 环境之间保持同步。您可以根据需要配置任意数量的共享文件夹:

php
folders:
    - map: ~/code
      to: /home/vagrant/code

如果您只创建几个站点,这种通用映射就可以正常工作。但是,随着站点数量的增加,您可能会开始遇到性能问题。这个问题在低端机器或包含大量文件的项目中可能会非常明显。如果您遇到此问题,请尝试将每个项目映射到其自己的 Vagrant 文件夹:

php
folders:
    - map: ~/code/project1
      to: /home/vagrant/code/project1

    - map: ~/code/project2
      to: /home/vagrant/code/project2

要启用 NFS,您只需在同步文件夹配置中添加一个简单的标志:

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

注意

使用 NFS 时,您应该考虑安装 vagrant-bindfs 插件。此插件将维护 Homestead box 中文件和目录的正确用户/组权限。

您还可以通过在 options 键下列出它们来传递 Vagrant 的 Synced Folders 支持的任何选项:

php
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 项目的便捷虚拟化环境:

php
sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public

如果在配置 Homestead box 后更改 sites 属性,则应重新运行 vagrant reload --provision 以更新虚拟机上的 Nginx 配置。

主机文件 ​

您必须将 Nginx 站点的“域”添加到计算机上的 hosts 文件中。hosts 文件会将对 Homestead 站点的请求重定向到您的 Homestead 机器。在 Mac 和 Linux 上,此文件位于 /etc/hosts。在 Windows 上,它位于 C:\Windows\System32\drivers\etc\hosts。您添加到此文件的行将如下所示:

php
192.168.10.10  homestead.test

确保列出的 IP 地址是您 Homestead.yaml 文件中设置的地址。将域添加到 hosts 文件并启动 Vagrant box 后,您将能够通过 Web 浏览器访问该站点:

php
http://homestead.test

启动 Vagrant Box ​

编辑 Homestead.yaml 后,从 Homestead 目录运行 vagrant up 命令。Vagrant 将启动虚拟机并自动配置您的共享文件夹和 Nginx 站点。

要销毁机器,您可以使用 vagrant destroy --force 命令。

每个项目的安装 ​

您可以为您管理的每个项目配置一个 Homestead 实例,而不是全局安装 Homestead 并在所有项目中共享同一个 Homestead box。如果您希望随项目一起提供 Vagrantfile,以便其他人可以 vagrant up,则每个项目安装 Homestead 可能会有所帮助。

要直接安装到项目中,请使用 Composer 安装 Homestead:

php
composer require laravel/homestead --dev

安装 Homestead 后,使用 make 命令在项目根目录中生成 Vagrantfile 和 Homestead.yaml 文件。make 命令将自动配置 Homestead.yaml 文件中的 sites 和 folders 指令。

Mac / Linux:

php
php vendor/bin/homestead make

Windows:

php
vendor\\bin\\homestead make

接下来,在终端中运行 vagrant up 命令,并在浏览器中访问 http://homestead.test 项目。请记住,您仍然需要为 homestead.test 或您选择的域添加 /etc/hosts 文件条目。

安装 MariaDB ​

如果您更喜欢使用 MariaDB 而不是 MySQL,您可以在 Homestead.yaml 文件中添加 mariadb 选项。此选项将删除 MySQL 并安装 MariaDB。MariaDB 作为 MySQL 的替代品,因此您仍应在应用程序的数据库配置中使用 mysql 数据库驱动程序:

php
box: laravel/homestead
ip: "192.168.10.10"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true

安装 Elasticsearch ​

要安装 Elasticsearch,请将 elasticsearch 选项添加到 Homestead.yaml 文件中并指定支持的版本。默认安装将创建一个名为 'homestead' 的集群。您永远不应为 Elasticsearch 分配超过操作系统内存的一半,因此请确保您的 Homestead 机器至少有两倍于 Elasticsearch 分配的内存:

php
box: laravel/homestead
ip: "192.168.10.10"
memory: 4096
cpus: 4
provider: virtualbox
elasticsearch: 6

注意

查看 Elasticsearch 文档 以了解如何自定义配置。

别名 ​

您可以通过修改 Homestead 目录中的 aliases 文件来向 Homestead 机器添加 Bash 别名:

php
alias c='clear'
alias ..='cd ..'

更新 aliases 文件后,您应该使用 vagrant reload --provision 命令重新配置 Homestead 机器。这将确保您的新别名在机器上可用。

日常使用 ​

全局访问 Homestead ​

有时您可能希望从文件系统的任何位置 vagrant up 您的 Homestead 机器。您可以通过将 Bash 函数添加到 Bash 配置文件来在 Mac / Linux 系统上执行此操作。在 Windows 上,您可以通过将“批处理”文件添加到 PATH 来实现。这些脚本将允许您从系统的任何位置运行任何 Vagrant 命令,并将该命令自动指向您的 Homestead 安装:

Mac / Linux ​

php
function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

确保在函数中调整 ~/Homestead 路径以指向您实际的 Homestead 安装位置。安装函数后,您可以从系统的任何位置运行 homestead up 或 homestead ssh 等命令。

Windows ​

在计算机上的任意位置创建一个 homestead.bat 批处理文件,内容如下:

php
@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。

连接到数据库 ​

默认情况下,MySQL 和 PostgreSQL 都配置了一个 homestead 数据库。为了更方便,Laravel 的 .env 文件默认配置框架使用此数据库。

要从主机机器的数据库客户端连接到 MySQL 或 PostgreSQL 数据库,您应连接到 127.0.0.1 和端口 33060 (MySQL) 或 54320 (PostgreSQL)。两个数据库的用户名和密码都是 homestead / secret。

注意

仅当从主机机器连接到数据库时,您才应使用这些非标准端口。由于 Laravel 在虚拟机内运行,因此您将在 Laravel 数据库配置文件中使用默认的 3306 和 5432 端口。

添加额外的站点 ​

一旦您的 Homestead 环境配置并运行,您可能希望为您的 Laravel 应用程序添加额外的 Nginx 站点。您可以在单个 Homestead 环境中运行任意数量的 Laravel 安装。要添加额外的站点,请将站点添加到 Homestead.yaml 文件中:

php
sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public
    - map: another.test
      to: /home/vagrant/code/another/public

如果 Vagrant 没有自动管理您的“hosts”文件,您可能还需要将新站点添加到该文件中:

php
192.168.10.10  homestead.test
192.168.10.10  another.test

添加站点后,从 Homestead 目录运行 vagrant reload --provision 命令。

站点类型 ​

Homestead 支持多种类型的站点,允许您轻松运行不基于 Laravel 的项目。例如,我们可以使用 symfony2 站点类型轻松地将 Symfony 应用程序添加到 Homestead:

php
sites:
    - map: symfony2.test
      to: /home/vagrant/code/Symfony/web
      type: "symfony2"

可用的站点类型有:apache、laravel(默认)、proxy、silverstripe、statamic、symfony2 和 symfony4。

站点参数 ​

您可以通过 params 站点指令向站点添加额外的 Nginx fastcgi_param 值。例如,我们将添加一个值为 BAR 的 FOO 参数:

php
sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public
      params:
          - key: FOO
            value: BAR

环境变量 ​

您可以通过将全局环境变量添加到 Homestead.yaml 文件中来设置它们:

php
variables:
    - key: APP_ENV
      value: local
    - key: FOO
      value: bar

更新 Homestead.yaml 后,请务必通过运行 vagrant reload --provision 重新配置机器。这将更新所有已安装 PHP 版本的 PHP-FPM 配置,并更新 vagrant 用户的环境。

配置 Cron 计划 ​

Laravel 提供了一种方便的方法来 计划 Cron 作业,通过每分钟调度一次 schedule:run Artisan 命令来运行。schedule:run 命令将检查 App\Console\Kernel 类中定义的作业计划,以确定应运行哪些作业。

如果您希望为 Homestead 站点运行 schedule:run 命令,可以在定义站点时将 schedule 选项设置为 true:

php
sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public
      schedule: true

站点的 Cron 作业将定义在虚拟机的 /etc/cron.d 文件夹中。

配置 Mailhog ​

Mailhog 允许您轻松捕获传出的电子邮件并检查它,而无需实际将邮件发送给收件人。要开始使用,请更新您的 .env 文件以使用以下邮件设置:

php
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

端口 ​

默认情况下,以下端口转发到您的 Homestead 环境:

  • SSH: 2222 → 转发到 22
  • ngrok UI: 4040 → 转发到 4040
  • HTTP: 8000 → 转发到 80
  • HTTPS: 44300 → 转发到 443
  • MySQL: 33060 → 转发到 3306
  • PostgreSQL: 54320 → 转发到 5432
  • Mailhog: 8025 → 转发到 8025

转发额外的端口 ​

如果您愿意,您可以将额外的端口转发到 Vagrant box,并指定它们的协议:

php
ports:
    - send: 50000
      to: 5000
    - send: 7777
      to: 777
      protocol: udp

共享您的环境 ​

有时您可能希望与同事或客户共享您当前正在处理的内容。Vagrant 内置了一种支持此功能的方法,即 vagrant share;但是,如果您在 Homestead.yaml 文件中配置了多个站点,则此方法将不起作用。

为了解决此问题,Homestead 包含了自己的 share 命令。要开始使用,请通过 vagrant ssh SSH 进入您的 Homestead 机器并运行 share homestead.test。这将共享 Homestead.yaml 配置文件中的 homestead.test 站点。当然,您可以将其他配置的站点替换为 homestead.test:

php
share homestead.test

运行命令后,您将看到一个 Ngrok 屏幕,其中包含活动日志和共享站点的公开可访问 URL。如果您希望指定自定义区域、子域或其他 Ngrok 运行时选项,可以将它们添加到 share 命令中:

php
share homestead.test -region=eu -subdomain=laravel

注意

请记住,Vagrant 本质上是不安全的,运行 share 命令时,您正在将虚拟机暴露给互联网。

多 PHP 版本 ​

注意

此功能仅与 Nginx 兼容。

Homestead 6 引入了在同一虚拟机上支持多个 PHP 版本的功能。您可以在 Homestead.yaml 文件中指定要为给定站点使用的 PHP 版本。可用的 PHP 版本有:“5.6”、“7.0”、“7.1”和“7.2”(默认):

php
sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public
      php: "5.6"

此外,您可以通过 CLI 使用任何支持的 PHP 版本:

php
php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list

Web 服务器 ​

Homestead 默认使用 Nginx Web 服务器。但是,如果指定 apache 作为站点类型,它可以安装 Apache。虽然可以同时安装两个 Web 服务器,但它们不能同时运行。flip shell 命令可用于简化在 Web 服务器之间切换的过程。flip 命令会自动确定哪个 Web 服务器正在运行,将其关闭,然后启动另一个服务器。要使用此命令,请 SSH 进入您的 Homestead 机器并在终端中运行命令:

php
flip

网络接口 ​

Homestead.yaml 的 networks 属性配置 Homestead 环境的网络接口。您可以根据需要配置任意数量的接口:

php
networks:
    - type: "private_network"
      ip: "192.168.10.20"

要启用 桥接 接口,请配置 bridge 设置并将网络类型更改为 public_network:

php
networks:
    - type: "public_network"
      ip: "192.168.10.20"
      bridge: "en1: Wi-Fi (AirPort)"

要启用 DHCP,只需从配置中删除 ip 选项:

php
networks:
    - type: "public_network"
      bridge: "en1: Wi-Fi (AirPort)"

更新 Homestead ​

您可以通过两个简单的步骤更新 Homestead。首先,您应该使用 vagrant box update 命令更新 Vagrant box:

php
vagrant box update

接下来,您需要更新 Homestead 源代码。如果您克隆了存储库,可以在最初克隆存储库的位置 git pull origin master。

如果您通过项目的 composer.json 文件安装了 Homestead,您应该确保您的 composer.json 文件包含 "laravel/homestead": "^7" 并更新您的依赖项:

php
composer update

特定提供商设置 ​

VirtualBox ​

natdnshostresolver ​

默认情况下,Homestead 将 natdnshostresolver 设置配置为 on。这允许 Homestead 使用主机操作系统的 DNS 设置。如果您想覆盖此行为,请将以下行添加到 Homestead.yaml 文件中:

php
provider: virtualbox
natdnshostresolver: off

Windows 上的符号链接 ​

如果符号链接在您的 Windows 机器上无法正常工作,您可能需要将以下块添加到您的 Vagrantfile 中:

php
config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end