软件环境:在 Windows 10 上基于 VirtualBox 4.3.24 + Vagrant 1.7.1 使用 Laravel Homestead。php
先下载安装VirtualBox和Vagrant。html
安装完成后须要将vagrant
/vagrant.exe
所在目录放到系统路径中(这个须要根据Vagrant安装目录来,好比个人是D:\HashiCorp\Vagrant\bin
)。laravel
使用Vagrant安装Homestead盒子数据库
在控制台中执行以下命令:浏览器
vagrant box add laravel/homestead
安装过程须要较长时间(取决于你的网络链接速度),若是网络中断,直接再次执行上面的命令会报错:网络
HTTP server doesn't seem to support byte ranges. Cannot resume.
意思是说不支持断点下载,不能从上次中断的地方恢复下载,解决办法是去~/.vagrant.d/tmp
(Windows上须要将~替换成当前用户目录,好比你当前用户名是test
,则对应目录为C:\Users\test\.vagrant.d\tmp
)目录中删除下载的部分文件。而后再执行上面的命令便可从新开始下载:app
这种方式是全局安装,即同一主机上全部项目共享该Homestead盒子,固然你也能够为每一个项目单独指定Homestead盒子,可参考Laravel Homestead相应的文档,这里再也不赘述。composer
使用Composer全局安装Homestead包ssh
composer global require "laravel/homestead=~2.0"
安装完Homestead盒子后,默认配置文件位于~/.homestead/Homestead.yaml
(Windows下用户名为test的话对应目录是C:\Users\test\.homestead\Homestead.yaml
)。该配置文件内容以下所示:ide
因为咱们在安装Homestead盒子时已经指定了provider
,因此这里没有该选项。若是系统没有配置过公共SSH KEY路径,能够参考Homestead文档设置SSH KEY部分去生成。
接下来,咱们来配置主机和虚拟机之间的共享文件夹,这个经过folders
选项来配置。配置完成后,主机上对应文件夹下的任何文件修改都会实时同步到虚拟机相应的文件夹下。若是要开启NFS,只需在folders
选项下新增一个type
配置:
folders: - map: E:/xampp/htdocs/laravel to: /vagrant/laravel type: 'nfs'
这里咱们将其修改成前一篇文章中已经安装好的Laravel应用目录laravelapp
:
folders: - map: E:/xampp/htdocs/laravelapp to: /vagrant/laravelapp
而后咱们来进行Nginx站点配置,该配置容许咱们在Homestead.yaml
文件中经过sites
选项进行简单域名解析,而没必要去虚拟机上对Nginx进行复杂配置,就能够完成域名与Homestead上相应目录的映射。Homestead.yaml
默认已经为咱们配置了一个示例站点homestead.app
,该域名映射到Homestead上的/vagrant/laravel/public
目录,这里咱们相应将目录修改成/vagrant/laravelapp/public
:
sites: - map: homestead.app to: /vagrant/laravelapp/public hhvm: true
这里咱们设置hhvm
为true
以让该站点使用HHVM。
配置完域名解析后,不要忘了在hosts
中添加对应的IP地址映射:
127.0.0.1 homestead.app
多站点配置
多站点配置很简单,只须要在sites
选项中新增匹配便可:
sites: - map: homestead.app to: /vagrant/laravelapp/public - map: laravel.app to: /vagrant/laravelapp/public
注意:配置多站点后须要使用
homestead provision
重启homestead虚拟机。
若是你使用ssh登陆到Homestead的话,还能够经过以下命令新增站点:
serve laravel.app /vagrant/laravelapp/public 80
Homestead.yaml
中默认已经配置好了一个数据库配置示例,该配置示例对应新安装的Laravel应用中的.env
数据库配置:
APP_ENV=local APP_DEBUG=true APP_KEY=8PGeOBuLcDBHSvjBL19fGw5aySbb9M3d DB_HOST=localhost DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
.env
中配置就是为Homestead准备的。这意味着咱们在Homestead上能够经过homestead/secret链接上数据库,且该数据库中有一个名为homestead
的数据库。
对数据库配置咱们不作任何更改。
默认状况下,Homestead端口转发配置以下:
若是要添加更多端口转发,能够经过在Homestead.yaml
中新增ports
选项配置:
ports: - send: 93000 to: 9300
小贴士:想要对Homestead虚拟机有更多的自定义配置,能够去修改
~/AppData/Roaming/Composer/vendor/laravel/homestead/scripts/homestead.rb
文件,该文件对Homestead有更加细粒度的配置,而后被~/AppData/Roaming/Composer/vendor/laravel/homestead/Vagrantfile
引用。
完成上述配置后,咱们可使用homestead up
启动Homestead虚拟机了,若是启动时报错:
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["hostonlyif", "create"] Stderr: 0%... Progress state: E_FAIL VBoxManage.exe: error: Failed to create the host-only adapter VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error (extended in fo not available) VBoxManage.exe: error: Context: "int __cdecl handleCreate(struct HandlerArg *,in t,int *)" at line 66 of file VBoxManageHostonly.cpp
则对应的解决方案以下:
1)去C:\Users\test\AppData\Roaming\Composer\vendor\laravel\homestead\scripts
(假定你的Windows用户名为test
)而后打开homestead.rb
2)在homestead.rb
中注释第17行:
# config.vm.network :private_network, ip: settings["ip"] ||= "192.168.10.10"
3)去D:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.7.1\plugins\providers\virtualbox
(相关目录取决于你安装Vagrant的目录及版本)打开action.rb
4)在action.rb
中注释掉第64行:
# b.use ClearNetworkInterfaces
5)以管理员权限打开VirtualBox,去管理->全局设定->网络界面,点击第二个选项卡“仅主机(Host-only)网络”,选择一个适配器进行编辑(将IP设为与Homestead.yaml
中一致即192.168.10.10
)并保存:
6)接下来设置VirtualBox中homestead
的网络配置,选择其链接方式为:仅主机(Host-only)适配器“:
7)再次运行homestead up
:
而后咱们能够经过homestead ssh
链接到虚拟机,固然也可使用其余工具如putty链接:
putty链接配置信息以下:
IP:127.0.0.1 端口号:2222 用户名:vagrant 密码:vagrant
接下来咱们火烧眉毛去浏览器中测试下吧(为区分咱们将视图中文字略做修改):
咱们使用Navicat For MYSQL对Homestead上的MySQL数据库链接作了测试:
数据库链接信息与上面数据库配置中.env
中的配置信息同样。
固然,在安装启动Homestead的过程还有各类其它小问题,这里只作了一个简单测试,在具体操做过程当中有任何问题,欢迎在下面的评论框中提出,咱们来一块儿探讨。
附:Homestead命令大全
命令 | 解释 |
---|---|
up | 启动homestead |
halt | 中止homestead |
init | 建立初始化的homestead.yaml |
edit | 编辑homestead.yaml |
suspend | 挂起homestead |
resume | 继续挂起的homestead |
ssh | 经过ssh登陆homestead |
run | 经过ssh在homestead上运行命令 |
status | 获取homestead的状态 |
list | 列表命令 |
help | 显示命令的帮助 |
provision | 从新配置homestead |
destory | 销毁homestead |
update | 更新homestead镜像 |