介绍
Laravel致力于使整个PHP开发体验愉快,包括您本地的开发环境。Vagrant 提供了一种简单,优雅的方式来管理和配置虚拟机。
Laravel Homestead是一个官方的,预封装的的Vagrant盒子,为您提供了一个绝佳的开发环境,无需您在本地机器上安装PHP,Web服务器和任何其他服务器软件。不用担心搞砸你的操作系统!Vagrant盒子是完全一次性的。如果出现问题,您可以在几分钟内销毁并重新创建盒子!
Homestead可运行在任何Windows,Mac或Linux系统上,包括Nginx Web服务器,PHP 7.1,MySQL,PostgreSQL,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
- PostgreSQL
- Composer
- Node (With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- ngrok
安装和设置
第一步
在启动Homestead环境之前,您必须安装VirtualBox 5.1,VMWare,或Parallels 以及 Vagrant。所有这些软件包为所有流行的操作系统提供易于使用的可视化安装程序。
要使用VMware提供商,您需要购买VMware Fusion / Workstation和VMware Vagrant 插件。虽然这不是免费的,但VMware可以提供更快的共享文件夹性能。
安装Homestead Vagrant Box
一旦安装了VirtualBox / VMware和Vagrant,您应该使用终端中的以下命令将 laravel/homestead
盒子添加到您的Vagrant安装目录下。根据您的Internet连接速度,将需要几分钟时间才能下载该框。
vagrant box add laravel/homestead
如果此命令失败,请确保您的Vagrant安装是最新的。
安装Homestead
您可以通过简单地克隆存储库来安装Homestead。考虑将资源库克隆到您的 Homestead
目录下的home文件夹中,因为Homestead盒子将作为您所有Laravel项目的主机:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
你应该检查一下Homestead的标签版本,因为 master
分支可能并不总是稳定的。您可以在GitHub发布页面上找到最新的稳定版本:
cd Homestead // Clone the desired release... git checkout v6.5.0
一旦克隆了Homestead存储库,运行Homestead目录中的 bash init.sh
命令来创建 Homestead.yaml
配置文件。 Homestead.yaml
文件将被放置在Homestead目录中:
// Mac / Linux... bash init.sh // Windows... init.bat
配置Homestead
设置你的提供商
您的 Homestead.yaml
文件中的提供程序密钥指示应使用哪个 provider
提供程序: virtualbox
, vmware_fusion
, vmware_workstation
,或 parallels
。您可以将其设置为您偏好的提供者:
provider: virtualbox
配置共享文件夹
Homestead.yaml
文件的 folders
属性列出了您希望与您的Homestead环境共享的所有文件夹。当这些文件夹中的文件发生更改时,它们将在本地计算机和Homestead环境之间保持同步。您可以根据需要配置任意数量的共享文件夹:
folders: - map: ~/code to: /home/vagrant/code
如果你只是创建几个网站,这个通用的映射将工作得很好。但是,随着网站数量的不断增长,您可能会开始遇到性能问题。在包含大量文件的低端机器或项目中,这个问题会非常明显。如果遇到此问题,请尝试将每个项目映射到其自己的Vagrant文件夹:
folders: - map: ~/code/project1 to: /home/vagrant/code/project1 - map: ~/code/project2 to: /home/vagrant/code/project2
要启用NFS,只需将简单标志添加到已同步的文件夹配置中即可:
folders: - map: ~/code to: /home/vagrant/code type: "nfs"
{注意}使用NFS时,应考虑安装vagrant-bindfs插件。 该插件将为Homestead框中的文件和目录维护正确的用户/组权限。
您也可以通过在选项键下列出它们来传递Vagrant的同步文件夹支持的任何选项
:
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.test to: /home/vagrant/code/Laravel/public
如果在配置Homestead盒子后更改 sites
属性,则应该重新运行 vagrant reload --provision
来更新虚拟机上的Nginx配置。
主机文件
您必须将Nginx网站的“域”添加到您计算机上的 hosts
文件中。 hosts
文件将把您的Homestead网站的请求重定向到您的Homestead机器。在Mac和Linux上,这个文件位于 /etc/hosts
。在Windows上,它位于 C:\Windows\System32\drivers\etc\hosts
。您添加到此文件的行将如下所示:
192.168.10.10 homestead.test
确保列出的IP地址是在您的 Homestead.yaml
文件中设置的IP地址。将域添加到主机文件并启动Vagrant盒子之后,您将可以通过Web浏览器访问该站点:
http://homestead.test
启动Vagrant-box
一旦你编辑了 Homestead.yaml
到你喜欢的位置,从你的Homestead目录运行 vagrant up
命令。 Vagrant将启动虚拟机并自动配置您的共享文件夹和Nginx站点。
要销毁机器,你可以使用 vagrant destroy --force
命令。
每个项目安装
您可以改为为您管理的每个项目配置一个Homestead实例,而不是在全局范围内安装Homestead并共享相同的Homestead盒子。如果您希望将 Vagrantfile
与您的项目一起运行,则为每个项目安装Homestead可能会有所帮助,从而使项目中的其他人能够轻松地 vagrant up
。
要将Homestead直接安装到您的项目中,需要使用Composer:
composer require laravel/homestead --dev
一旦安装了Homestead,使用 make
命令在项目根目录下生成 Vagrantfile
和 Homestead.yaml
文件。 make
命令将自动配置 Homestead.yaml
文件中的 sites
和 folders
指令。
Mac / Linux:
php vendor/bin/homestead make
窗口:
vendor\\bin\\homestead make
接下来,在终端上运行 vagrant up
命令,并在浏览器中访问 http://homestead.test
中的项目。请记住,您仍然需要为 homestead.test
或或您选择的域添加一个 /etc/hosts
文件条目。
安装MariaDB
如果您更喜欢使用MariaDB而不是MySQL,则可以将 mariadb
选项添加到您的 Homestead.yaml
文件中。这个选项将删除MySQL并安装MariaDB。 MariaDB可以作为MySQL的直接替代品,因此您仍然应该在应用程序的数据库配置中使用 mysql
数据库驱动程序:
box: laravel/homestead ip: "192.168.10.10" memory: 2048 cpus: 4 provider: virtualbox mariadb: true
安装Elasticsearch
要安装Elasticsearch,请将 elasticsearch
选项添加到您的 Homestead.yaml
文件中。默认安装将创建一个名为“宅基地”的集群,并分配2GB的内存。您绝不应该给Elasticsearch超过一半的操作系统内存,所以请确保您的Homestead机器至少有4GB的内存:
box: laravel/homestead ip: "192.168.10.10" memory: 4096 cpus: 4 provider: virtualbox elasticsearch: true
别名(aliases)
您可以通过修改您的Homestead目录中的 aliases
“别名”文件来将Bash别名添加到您的Homestead机器:
alias c='clear' alias ..='cd ..'
更新 aliases
文件后,应使用 vagrant reload --provision
命令重新配置Homestead机器。这将确保您的新别名在机器上可用。
日常的使用
在全局范围内访问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
这样的命令。
窗户
使用以下内容在您的机器上的任何位置创建一个 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机器,请考虑将上述“功能”添加到您的主机,以便快速进入Homestead机器。
连接到数据库
开箱即用的MySQL和PostgreSQL配置了一个 homestead
数据库。为了更方便,Laravel的 .env
文件将框架配置为使用该数据库。
要从主机的数据库客户端连接到MySQL或PostgreSQL数据库,您应该连接到 127.0.0.1
和端口口 33060
(MySQL)或 54320
(PostgreSQL)。两个数据库的用户名和密码都是 homestead
/ secret
。
{注意}您应该只使用这些非标准端口连接到数据库时从你的主机。您将使用默认的3306和5432端口自Laravel Laravel数据库配置文件中运行在虚拟机。
添加其他站点
一旦您的Homestead环境被配置并运行,您可能需要为您的Laravel应用程序添加更多的Nginx站点。您可以在单个Homestead环境中运行尽可能多的Laravel安装。要添加其他网站,只需将该网站添加到您的 Homestead.yaml
文件:
sites: - map: homestead.test to: /home/vagrant/code/Laravel/public - map: another.test to: /home/vagrant/code/another/public
如果Vagrant没有自动管理您的“主机”文件,您可能还需要将新的网站添加到该文件中:
192.168.10.10 homestead.test 192.168.10.10 another.test
一旦添加了该网站,从Homestead目录运行 vagrant reload --provision
命令。
网站类型
Homestead支持几种类型的网站,让您轻松运行不基于Laravel的项目。例如,我们可以使用 symfony2
网站类型轻松地将Symfony应用程序添加到Homestead:
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
参数:
sites: - map: homestead.test to: /home/vagrant/code/Laravel/public params: - key: FOO value: BAR
环境变量
您可以通过将它们添加到您的 Homestead.yaml
文件来设置全局环境变量:
variables: - key: APP_ENV value: local - key: FOO value: bar
更新 Homestead.yaml
后,请务必通过运行 vagrant reload --provision
来重新配置机器。这将更新所有安装的PHP版本的PHP-FPM配置,并更 vagrant
用户的环境。
配置Cron时间表
Laravel提供了一个便捷的方式来安排Cron工作,安排一个时间表:运行Artisan命令,每分钟运行一次。 schedule:run
命令将检查 App\Console\Kernel
类中定义的作业计划,以确定应该运行哪些作业。
如果您想要为Homestead站点运行 schedule:run
命令,则可以在定义站点时将 schedule
选项设置为 true
:
sites: - map: homestead.test to: /home/vagrant/code/Laravel/public schedule: true
该站点的Cron作业将在虚拟机的 /etc/cron.d
文件夹中定义。
配置Mailhog
Mailhog允许您轻松地捕获您的外发电子邮件并进行检查,而无需将邮件实际发送给收件人。要开始使用,请更新 .env
文件以使用以下邮件设置:
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 → Forwards To 5432
- Mailhog: 8025 → 转发到 8025
转发其他端口
如果你愿意的话,你可以将其他端口转发到Homestead盒子,并指定他们的协议:
ports: - send: 50000 to: 5000 - send: 7777 to: 777 protocol: udp
分享你的环境
有时候,您可能希望与同事或客户分享您目前正在进行的工作。Vagrant有一个内置的方式来支持这个通过 vagrant share
;然而,如果您在 Homestead.yaml
文件中配置了多个站点,这将不起作用。
为了解决这个问题,Homestead包含了自己的 share
命令。要开始,SSH通过 vagrant ssh
进入您的Homestead机器,并运行共享 share homestead.test
。这将从您的Homestead.yaml配置文件共享 homestead.test
站点。当然,你也可以使用其他配置好的站点替代 homestead.test
:
share homestead.test
运行该命令后,您将看到一个Ngrok屏幕,其中包含活动日志和共享网站的公共访问URL。如果您想要指定一个自定义区域,子域或其他Ngrok运行时选项,您可以将它们添加到您的 share
命令:
share homestead.test -region=eu -subdomain=laravel
{注意}请记住,Vagrant本质上是不安全的,并且在运行
share
命令时将虚拟机展示给Internet。
多个PHP版本
{注意}此功能仅与Nginx兼容。
Homestead 6在同一个虚拟机上引入了对多个PHP版本的支持。您可以指定您的 Homestead.yaml
文件中给定站点使用哪个版本的PHP。可用的PHP版本是:“5.6”,“7.0”,“7.1”和“7.2”:
sites: - map: homestead.test to: /home/vagrant/code/Laravel/public php: "5.6"
另外,您可以通过CLI使用任何受支持的PHP版本:
php5.6 artisan list php7.0 artisan list php7.1 artisan list php7.2 artisan list
网络接口
Homestead.yaml
的网络属性为您的Homestead环境配置网络接口。您可以根据需要配置多个接口:
networks: - type: "private_network" ip: "192.168.10.20"
要启用bridged桥接接口,请配置 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框:
vagrant box update
接下来,您需要更新Homestead源代码。如果你克隆了版本库,你可以简单地在你最初克隆版本库的地方把 git pull origin master
起来。
如果您已经通过项目的 composer.json
文件安装了Homestead,则应确保您的 composer.json
文件包含 "laravel/homestead": "^6"
并更新您的依赖关系:
composer update
旧版本
{提示}如果您需要更旧版本的PHP,请在尝试使用旧版Homestead之前查看多个PHP版本的文档。
通过将以下行添加到您的 Homestead.yaml
文件,您可以轻松覆盖Homestead使用的框的版本:
version: 0.6.0
一个例子:
box: laravel/homestead version: 0.6.0 ip: "192.168.10.10" memory: 2048 cpus: 4 provider: virtualbox
当您使用旧版本的Homestead框时,您需要将其与Homestead源代码的兼容版本进行匹配。下面是一个图表,显示了支持的盒子版本,使用哪个版本的Homestead源代码,以及PHP提供的版本:
Homestead版本 | Vagrant 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 | 0 | 3.0.0 |
PHP 7.2 RC3 | 6.4.0 | 4.0.0 |
提供者特定设置
VirtualBox
默认情况下,Homestead将 natdnshostresolver
设置配置为 on
。这使得Homestead可以使用您的主机操作系统的DNS设置。如果您想重写此行为,请将以下行添加到您的 Homestead.yaml
文件中:
provider: virtualbox natdnshostresolver: off