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、PM2、Bower、Grunt 和 Gulp)
- Redis
- Memcached
- Beanstalkd
安装与设置
第一步
在启动您的 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 存储库后,从 Homestead 目录运行 bash init.sh
命令以创建 Homestead.yaml
配置文件。Homestead.yaml
文件将放置在 ~/.homestead
隐藏目录中:
// Mac / Linux...
bash init.sh
// Windows...
init.bat
配置 Homestead
设置您的提供程序
~/.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"
您还可以通过在 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/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 机器。您可以通过在 Bash 配置文件中添加一个简单的 Bash 函数来实现。这将允许您从系统的任何位置运行任何 Vagrant 命令,并自动将该命令指向您的 Homestead 安装:
function homestead() {
( cd ~/Homestead && vagrant $* )
}
确保在函数中调整 ~/Homestead
路径到您实际的 Homestead 安装位置。安装函数后,您可以从系统的任何位置运行 homestead up
或 homestead 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
。
仅在从主机连接到数据库时使用这些非标准端口。由于 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
:
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,并指定它们的协议:
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
网络接口
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
旧版本
您可以通过在 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 |