在 Windows 上进行 Laravel Homestead 安装、配置及测试

软件环境:在 Windows 10 上基于 VirtualBox 4.3.24 + Vagrant 1.7.1 使用 Laravel Homestead

1、准备

先下载安装VirtualBoxVagrant

安装完成后需要将vagrant/vagrant.exe所在目录放到系统路径中(这个需要根据Vagrant安装目录来,比如我的是D:\HashiCorp\Vagrant\bin)。

2、安装及配置

2.1 安装

使用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)目录中删除下载的部分文件。然后再执行上面的命令即可重新开始下载:

添加Homestead盒子

这种方式是全局安装,即同一主机上所有项目共享该Homestead盒子,当然你也可以为每个项目单独指定Homestead盒子,可参考Laravel Homestead相应的文档,这里不再赘述。

使用Composer全局安装Homestead包

composer global require "laravel/homestead=~2.0"

使用Composer全局安装Homestead包

2.2 配置

安装完Homestead盒子后,默认配置文件位于~/.homestead/Homestead.yaml(Windows下用户名为test的话对应目录是C:\Users\test\.homestead\Homestead.yaml)。该配置文件内容如下所示:

Homestead.yaml默认配置及注释

2.2.1 SSH KEY

由于我们在安装Homestead盒子时已经指定了provider,所以这里没有该选项。如果系统没有配置过公共SSH KEY路径,可以参考Homestead文档设置SSH KEY部分去生成。

2.2.2 共享文件夹

接下来,我们来配置主机和虚拟机之间的共享文件夹,这个通过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
2.2.3 Nginx配置

然后我们来进行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

这里我们设置hhvmtrue以让该站点使用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
2.2.4 数据库配置

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的数据库。

对数据库配置我们不做任何更改。

2.2.5 端口转发

默认情况下,Homestead端口转发配置如下:

  • SSH: 2222 →  22
  • HTTP: 8000 →  80
  • HTTPS: 44300 →  443
  • MySQL: 33060 →  3306
  • Postgres: 54320 →  5432

如果要添加更多端口转发,可以通过在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引用。

3、启动及测试

3.1 启动报错及解决方法

完成上述配置后,我们可以使用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)并保存:

设置VirtualBox全局网络配置

6)接下来设置VirtualBox中homestead的网络配置,选择其连接方式为:仅主机(Host-only)适配器“:

设置Homestead网络配置

7)再次运行homestead up

启动Homestead

3.2 测试

3.2.1 SSH连接测试

然后我们可以通过homestead ssh连接到虚拟机,当然也可以使用其他工具如putty连接:

使用putty连接到homestead

putty连接配置信息如下:

IP:127.0.0.1
端口号:2222
用户名:vagrant
密码:vagrant
3.2.2 浏览器站点访问测试

接下来我们迫不及待去浏览器中测试下吧(为区分我们将视图中文字略作修改):

Homestead站点访问测试

3.2.3 本地数据库连接测试

我们使用Navicat For MYSQL对Homestead上的MySQL数据库连接做了测试:

本地连接Homestead数据库测试

数据库连接信息与上面数据库配置.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镜像

学院君

学院君 has written 550 articles

资深PHP工程师,Laravel学院院长