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、PM2、Bower、Grunt 和 Gulp)
  • Redis
  • Memcached
  • Beanstalkd

安装与设置

第一步

在启动您的 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 存储库后,从 Homestead 目录运行 bash init.sh 命令以创建 Homestead.yaml 配置文件。Homestead.yaml 文件将放置在 ~/.homestead 隐藏目录中:

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

// Windows...
init.bat

配置 Homestead

设置您的提供程序

~/.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"

您还可以通过在 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/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 机器。您可以通过在 Bash 配置文件中添加一个简单的 Bash 函数来实现。这将允许您从系统的任何位置运行任何 Vagrant 命令,并自动将该命令指向您的 Homestead 安装:

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

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

通过 SSH 连接

您可以通过从 Homestead 目录发出 vagrant ssh 终端命令来 SSH 进入您的虚拟机。

但是,由于您可能需要频繁地 SSH 进入 Homestead 机器,请考虑在主机上添加上述“函数”以快速 SSH 进入 Homestead box。

连接到数据库

默认情况下,MySQL 和 Postgres 都配置了一个 homestead 数据库。为了更方便,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/Homestead.yaml 文件中,然后从 Homestead 目录运行 vagrant reload --provision 终端命令。

配置 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

转发额外端口

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

php
ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

网络接口

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

旧版本

您可以通过在 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