Laravel 致力于让你在 PHP 开发过程当中更加轻松愉快,这其中也包括本地开发环境的搭建。 Vagrant 提供了一种简单、优雅的方式来管理和配置虚拟机。javascript
Laravel Homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,你无需在本地安装 PHP ,web 服务器,或其余服务软件。 Vagrant box 是彻底一次性的,你不用担忧系统被搞乱!若是有什么地方出错了,你能够在几分钟内销毁并重建 box !php
Homestead 能够运行在 Windows 、Mac 或 Linux 系统上,它里面包含了 Nginx Web 服务器、PHP 7.1 、MySQL 、Postgres 、Redis 、Memcached 、Node ,以及一些有利于你开发 laravel 应用的其余程序。css
若是你使用的是 Windows 系统,你可能须要启用硬件虚拟化(VT-x)。这一般须要经过 BIOS 来启用它。若是你在一个 UEFI 系统上使用 Hyper-V,您可能还须要禁用 Hyper-V 才能启用 VT-x。html
在你使用 Homestead 环境以前,你必须先安装 VirtualBox 5.1 、VMWare 或者 Parallels 中的一个,而后再安装 Vagrant。上述软件均提供了针对不一样操做系统的可视化安装包。java
若要使用 VMware provider,你须要同时购买 VMware Fusion / Workstation 以及 VMware Vagrant 插件 的软件受权,由于它们不是免费的。使用 VMware 的优点是:能够得到开箱即用的共享文件夹特性。node
若要使用 Parallels provider,你须要安装 Parallels Vagrant 插件 ,这是免费的。mysql
当 VirtualBox / VMware 以及 Vagrant 安装完成后,你可使用如下命令将 laravel/homestead 这个 box 添加进你的 Vagrant 当中。 homestead box 的下载会花费你一点时间,具体的下载时长由网络速度决定:laravel
vagrant box add laravel/homestead
若是上面的命令运行失败,请先确保你已经安装了最新版本的 Vagrant。git
而后,新建一个 metadata.json 文件,并写入如下示例内容:github
{
"name": "laravel/homestead", "versions": [ { "version": "3.0.0", "providers": [ { "name": "virtualbox", "url": "virtualbox-3.0.0.box" } ] } ] }
最后,使用如下命令手动添加 box
vagrant box add metadata.json # 添加 box vagrant box list # 列出全部 box
你能够简单使用 Git 克隆代码仓库的方式来安装 Homestead。建议将克隆的代码仓库重命名为 Homestead ,并放置到你的「home」目录中,如此一来 Homestead box 就能做为主机,为你的全部 Laravel 项目提供服务:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
因为 Homestead 的 master
分支并非稳定分支,你应该检出已经标签过的稳定版本。你能够在 Github Release Page 找到最新的稳定版本。
cd Homestead // 检出所须要的版本... git checkout v5.4.0
一旦你克隆完 Homestead 的代码仓库,就能够在 Homestead 目录中运行 bash init.sh 命令来建立 Homesstead.yaml 配置文件。 Homesstead.yaml 文件会被放置在你的 Homestead 目录中:
// Mac / Linux... bash init.sh // Windows... init.bat
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"
你也能够在配置中传递任何 Vagrant 共享文件夹 支持的参数,在 options
配置项下列出它们:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync" options: rsync__args: ["--verbose", "--archive", "--delete", "-zz"] rsync__exclude: ["node_modules"]
对 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 配置到虚拟机上。
你必须将在 Nginx sites 中所添加的「域名」也添加到你本机电脑的 hosts 上。 hosts 文件会将请求重定向至 Homestead 环境中设置的本地域名。在 Mac 或 Linux 上,该文件一般会存放在 /etc/hosts。在 Windows 上,则存放于 C:\Windows\System32\drivers\etc\hosts。设置内容以下所示:
192.168.10.10 homestead.app
请务必确认 IP 地址与 Homestead.yaml 文件中设置的相同。将域名设置在 hosts 文件以后,你就能够经过网页浏览器访问你的网站。
http://homestead.app
根据你的喜爱完成 Homestead.yaml 编辑后,进入你的 Homestead 目录并运行 vagrant up 命令。 Vagrant 就会根据 Homestead.yaml 里的配置信息启动,并为虚拟机设置共享文件夹和 Nginx 网站。
若是要移除虚拟机,你可使用 vagrant destroy --force 命令
除了在全局范围内安装 Homestead 环境,全部项目共享相同的 Homestead box 外,你还能够为每个项目配置一个独立的 Homestead 实例。经过传递 Vagrantfile ,能够实现为每一个项目分别安装上 Homestead ,其余项目成员只须要经过简单的 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。再次提醒:你仍然须要在 /etc/hosts 里配置 homestead.app 或其它想要使用的域名。
若是你但愿使用 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
有时候你但愿在文件系统的任何地方均可以使用 vagrant up 命令启动虚拟机,那么你须要添加如下代码到你的 Mac / Linux 系统的 Bash profile 文件里面。对于 Windows 系统,您能够经过在 PATH 环境变量中添加「批处理」文件的方式来实现此目的。下面这些脚本让你能够在文件系统的任何位置都能运行 Vagrant 命令,它至关于切换到 Homestead 目录运行 Vagrant 命令:
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 命令。
你能够在 Homestead 目录运行 vagrant ssh 命令来链接虚拟主机。
可是,因为您可能须要频繁地使用 SSH 来链接 Homestead 主机,请考虑将上述「function」添加到你的主机,以即可以快速的经过 SSH 进入你的 Homestead box
在 box 中已经为 MySQL 和 Postgres 配置好了一个开箱即用的数据库 homestead ,为了更方便的使用它,Laravel 中的 .env 文件将这个数据库设置成了框架默认使用的数据库。
若是想要从你主机上的数据库客户端链接 MySQL 或 Postgres,能够经过 127.0.0.1 来使用端口 33060(MySQL) 或 54320(Postgres) 链接。帐号密码分别是 homestead / secret
一旦 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」文件,你可能须要手动把新增的站点加入到「hosts」文件中:
192.168.10.10 homestead.app 192.168.10.10 another.app
当你的网站添加完成后,切换到 Homestead 目录运行 vagrant reload --provision 命令就能够应用新的更改。
Homestead 支持多种类型的网站,容许您轻松地运行那些不基于 Laravel 的项目。 例如,咱们可使用「symfony2」配置项,轻松地在 Homestead 中添加 Symfony 应用程序:
sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2
支持的站点类型有: apache、laravel(默认)、proxy、silverstripe、statamic、symfony2 和 symfony4。
你还可使用「params」配置项,添加额外的 Nginx fastcgi_param 值到你的网站。例如添加一个名称为「FOO」值为「BAR」的额外配置。
sites:
- map: homestead.app to: /home/vagrant/Code/Laravel/public params: - key: FOO value: BAR
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 环境:
若是须要的话,你能够转发更多端给 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 界面。若是你想要自定义地区或者其余 Ngrok 选项,你能够添加到 share 命令后面:
share homestead.app -region=eu -subdomain=laravel
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
配置项,而后 type
填写为 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 ,第一步,使用 vagrant box update 命令更新 Vgrant box :
vagrant box update
接下来。你须要更新 Homestead 的源代码,若是你是经过克隆仓库的方式来安装的 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
当你使用旧版本的 box 时,你须要确保 Homestead 源代码的版本与之对应,下面的图表展现了支持的 box 版本,以及与之对应的 Homestead 的源代码版本和 box 所提供的 PHP 版本:
Homestead Version | Box Version | |
---|---|---|
PHP 7.0 | 3.1.0 | 0.6.0 |
PHP 7.1 | 4.0.0 | 1.0.0 |
Homestead 默认将 natdnshostresolver
设置为 on
。这容许 Homestead 使用你的主机系统中的 DNS 设置。若是你想重写这行为,你能够在你的 Homestead.yaml
文件中添加下面这几行:
provider: virtualbox natdnshostresolver: off
用户名 | 贡献 |
---|---|
WangYan | 翻译 |
原文连接:http://shouce.jb51.net/laravel-5-5/source/homestead.html#configuring-homestead