之前一直折腾 Homestead 的安装,每次都失败,经过多次的尝试。终于安装成功(泪流满面)。这篇文章记录安装过程,以免时间长忘了~
软件环境:在 Windows 7 上基于 VirtualBox 5.1.18 + Vagrant 1.9.3 使用 Laravel Homestead

Laravel Homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,你无需在本地安装 PHPweb 服务器,或其他服务软件。并且不用担心系统被搞乱!Vagrant box 是完全一次性的。如果有什么地方出错了,你也可以在几分钟内销毁并重建 box

Homestead 可以运行在 WindowsMacLinux 系统上,并且里面包含了 Nginx Web 服务器、 PHP 7.1MySQLPostgresRedisMemcachedNode 、 以及所有利于你开发 laravel 应用的其他程序。

在多人协同开的情况下, Homestead 能用来统一开发环境, 让程序员把精力更集中的放在程序业务逻辑上, 免去了各种因为开发环境不一样而造成的混乱。

内置软件

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • ngrok

安装必要软件

在你启动你的 Homestead 环境之前,你必须安装 VirtualBox 5.1VMWareParallels 的其中之一,以及 Vagrant

本教程用 VirtualBox 安装

  • VirtualBox — Oracle 公司的虚拟机软件, 能运行在当前大部分流行的系统上,开源免费
  • Vagrant — 提供一种命令行接口, 允许自动化安装虚拟机, 并且因为是脚本编写成的 provision 文本文件, 给共享虚拟机配置提供了可能, Homestead 正是构建在 Vagrant 之上

安装 Homestead

我们通过手动克隆代码仓库的方式来安装 Homestead:

git clone https://github.com/laravel/homestead.git Homestead

克隆项目后,官方解释 master 分支并不是稳定分支,为了避免出现意外的错误,切换到最新稳定版:

cd Homestead

// 检出所需要的版本...
git checkout v5.4.0

Homestead 目录中运行 bash init.sh 命令 来创建 Homesstead.yaml 配置文件。Homesstead.yaml 文件会被放置在你的 Homestead 目录中:

// Mac / Linux...
bash init.sh

// Windows...
init.bat

我是用的 git 命令行,安装的时候是按照 Linux 方式来的,所以我执行的是 bash init.sh , 大家根据自己的系统选择即可。全局安装 Homestead 后配置文件在当前目录,直接克隆安装好像在 Windows 当前用户家目录(比如:C:\Users\Administrator)

配置 Homestead

详细配置参数我就不多解释了,官方文档已经说得很详细了,这里我只展示一下我的配置信息:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa
# 本地电脑与 Homestead 虚拟环境中的目录映射
folders:
    - map: F:/www
      to: /home/vagrant/Code
# 站点域名配置
sites:
    - map: homestead.app
      to: /home/vagrant/Code/blog/public
    - map: laravelu.app
      to: /home/vagrant/Code/laravelu-html/public

databases:
    - homestead

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

添加 Homestead 本地域名:
你必须将在 sites 中所添加的「域名」也添加到你本机电脑的 hosts 上。 hosts 文件会将请求重定向至 Homestead 环境中设置的本地域名。在 MacLinux 上,该文件通常会存放在 /etc/hosts 。在 Windows 上,则存放于 C:\Windows\System32\drivers\etc\hosts 。设置内容如下所示:

192.168.10.10 homestead.app
192.168.10.10 laravelu.app

本地电脑与虚拟机共享文件夹,我的是放在 F:/www,所以要新建一个文件夹来共享,不然启动 vagrant 会报错

安装 Homestead Vagrant Box

VirtualBox 以及 Vagrant 安装完成后, vagrant box add laravel/homestead 这个命令安装 homestead box 会从网上下载最新的 homestead box,由于是资源文件都在国外,所以下载相当缓慢,大部分情况下下载一段时间超时。所以我们将 box 先预先下载到本地,然后 vagrant 添加 box

Homesstead 中新建 Homesstead.json

{
    "name": "laravel/homestead",
    "versions": [{
        "version": "2.1.0",
        "providers": [{
            "name": "virtualbox",
            "url": "D:/virtualbox.box"
        }]
    }]
}

上面 version 版本为 2.1.0 实际上本地的 virtualbox.box 是2.0.0 版本的。这里这样写是为了避免 Laravel Homestead 检查最新版本警告。url 则是本地下载好 box 的镜像文件

执行 vagrant box add Homestead.json 添加本地 box:

vagrant box add homestead.json

启动 Vagrant Box

编辑完 Homestead.yaml 后,进入你的 Homestead 目录并运行 vagrant up 命令。 Vagrant 就会根据 Homestead.yaml 里的配置信息,为虚拟机设置共享文件夹和 Nginx 网站。

vagrant up

Vagrant1.9.3启动错误问题

如果 vagrant 1.9.3 版本中启动 Vagrant Box 的时候报如下错:

$ vagrant up
Bringing machine 'homestead-7' up with 'virtualbox' provider...
==> homestead-7: Importing base box 'laravel/homestead'...
==> homestead-7: Matching MAC address for NAT networking...
==> homestead-7: Checking if box 'laravel/homestead' is up to date...
==> homestead-7: Setting the name of the VM: homestead-7
==> homestead-7: Destroying VM and associated drives...
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.3/lib/vagrant/util/is_port_open.rb:21:in `initialize': The requested address is not valid in its context. - connect(2) for "0.0.0.0" port 8000 (Errno::EADDRNOTAVAIL)
...

Homestead/scripts/homestead.rb 修改如下代码:

unless settings.has_key?("default_ports") && settings["default_ports"] == false
    default_ports.each do |guest, host|
        unless settings["ports"].any? { |mapping| mapping["guest"] == guest }
            config.vm.network "forwarded_port", guest: guest, host: host, auto_correct: true, host_ip: "127.0.0.1"
        end
    end
end

最后面加上 host_ip: "127.0.0.1" , vagrant1.9.5 没有这个问题,亲测~

OK,Homestead 的安装基本上就完成了,用法大家直接看官方文档,非常详细,我就不重复描述。每次修改 Homestead.yaml 站点配置后,重启 vagrant box 的时候记得加上 provision 参数:

vagrant reload --provision

Source: http://blog.iwanli.me/article/P1NdeAJe.html

Leave a comment