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 应用程序所需的所有其他工具。
如果您使用的是 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"
使用 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 make
Windows:
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
。
从主机机器连接到数据库时,您应该只使用这些非标准端口。由于 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=laravel
请记住,Vagrant 本质上是不安全的,运行 share
命令时,您正在将虚拟机暴露给互联网。
多 PHP 版本
此功能仅与 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
旧版本
如果您需要旧版本的 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