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.1、MySQL、Postgres、Redis、Memcached、Node 以及开发出色 Laravel 应用程序所需的所有其他工具。

exclamation

如果您使用的是 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.1VMWareParallels 以及 Vagrant。所有这些软件包都为所有流行的操作系统提供易于使用的可视化安装程序。

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

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

安装 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
cd ~

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

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

php
cd Homestead

// 克隆所需的版本...
git checkout v6.1.0

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

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

// Windows...
init.bat

配置 Homestead

设置您的提供商

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

php
provider: virtualbox

配置共享文件夹

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

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

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

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

使用 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.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。您添加到此文件的行将如下所示:

php
192.168.10.10  homestead.app

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

php
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 进行安装:

php
composer require laravel/homestead --dev

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

Mac / Linux:

php
php vendor/bin/homestead make

Windows:

php
vendor\\bin\\homestead make

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

安装 MariaDB

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

php
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

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

确保在函数中调整 ~/Homestead 路径到您实际的 Homestead 安装位置。安装函数后,您可以从系统的任何位置运行 homestead uphomestead 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 uphomestead 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

exclamation

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

添加额外的站点

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

php
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
    - map: another.app
      to: /home/vagrant/Code/another/public

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

php
192.168.10.10  homestead.app
192.168.10.10  another.app

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

站点类型

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

php
sites:
    - map: symfony2.app
      to: /home/vagrant/Code/Symfony/public
      type: symfony2

可用的站点类型有:apachelaravel(默认)、proxysilverstripestatamicsymfony2symfony4

站点参数

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

php
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

php
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,并指定它们的协议:

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.app。这将共享您 Homestead.yaml 配置文件中的 homestead.app 站点。当然,您可以将其他配置的站点替换为 homestead.app

php
share homestead.app

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

php
share homestead.app -region=eu -subdomain=laravel
exclamation

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

多 PHP 版本

exclamation

此功能仅与 Nginx 兼容。

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

php
sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      php: "5.6"

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

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

网络接口

Homestead.yamlnetworks 属性配置 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": "^4" 并更新您的依赖项:

php
composer update

旧版本

lightbulb

如果您需要旧版本的 PHP,请在尝试使用旧版本的 Homestead 之前查看 多 PHP 版本 的文档。

您可以通过在 Homestead.yaml 文件中添加以下行轻松覆盖 Homestead 使用的 box 版本:

php
version: 0.6.0

示例:

php
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.03.1.00.6.0
PHP 7.14.0.01.0.0
PHP 7.15.0.02.0.0
PHP 7.16.0.03.0.0

特定提供商设置

VirtualBox

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

php
provider: virtualbox
natdnshostresolver: off