安装 Laravel 官方集成开发环境 Homestead+Vagrant

Bittersweet2016-7-29,更新于 2016-8-11
本文最后更新于 2475 天前(2016-8-11),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 1939 字,全部读完大约需要 6 分钟。

参考链接:http://laravel-china.org/docs/5.4/homestead

1. 安装 VirtualBox 5.x 和 Vagrant . 各个平台下都有友善的安装方式。

2. 安装 Homestead Vagrant box. 通过输入下列命令即可在线下载:

vagrant box add laravel/homestead

如果网络缓慢,也可手动访问 https://atlas.hashicorp.com/laravel/boxes/homestead 选择最新版本手动下载,

进去了大概你找不到下载的链接,下载的链接是像这样的 https://atlas.hashicorp.com/laravel/boxes/homestead/versions/2.0.0/providers/virtualbox.box

之后通过输入下列命令手动添加:

vagrant box add laravel/homestead <下载下来的文件路径>

其中把<下载下来的文件路径>替换成你刚刚手动下载的 .box 文件路径

vagrant up 的时候还是会选择官方源(注释:是 vagrant up 的时候,现在你还没这目录呢,做到那你就知道了),发现 /scripts/homestead.rb 内有一句

config.vm.box_version = settings["version"] ||= ">= 0.4.0"

注释它或者写成大于 0 即可(默认用 vagrant box add 本地文件添加的 box 版本号不能更改且为 0 除非自己重新打包)

(鉴于手动添加很麻烦,并且网络十分缓慢如果用浏览器下载很可能失败(i.e. 要用下载工具),因此推荐的方法是使用网络代理然后在线添加。Linux 下可以用 Proxychains, Windows 下可以用 Proxifier。)

3. 安装 Homestead. 通过输入以下命令将 Homestead 克隆到本地:

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

一旦你克隆完 Homestead 的代码仓库,即可在 Homestead 目录中运行 bash init.sh 命令来创建 Homestead.yaml 配置文件。Homestead.yaml 文件将会被放置在你的 ~/.homestead 目录中(Linux)或你刚刚 clone 的 Homestead 里(Windows)(反正如果一个地方没有就去另一个地方找找):

Linux下:bash init.sh

Windows下:init.bat

4. 配置 Homestead

配置登陆方式

将 authorize 和 keys 段注释,如下:

#authorize: ~/.ssh/id_rsa.pub

#keys:
#    - ~/.ssh/id_rsa

配置你的提供者

Homestead.yaml 文件中的 provider 参数设置取决于你用的是哪一个 Vagrant 提供者:virtualbox、vmware_fusion 或 vmware_workstation。你可以根据自己的喜好来设置提供者:

provider: virtualbox

配置共享文件夹

你可以在 Homestead.yaml 文件的 folders 属性里列出所有你想与你的 Homestead 环境共享的文件夹。这些文件夹中的文件若有更动,它们将会在你的本机电脑与 Homestead 环境自动更新同步。你可以在这里设置多个共享文件夹:

folders:
    - map: ~/Code   #本机的共享文件夹路径
      to: /home/vagrant/Code   #虚拟机内的映射路径

配置 Nginx 网站

对 Nginx 不熟悉吗?没关系。sites 属性可以帮助你可以轻易指定一个 域名 来对应到 homestead 环境中的一个目录上。在 Homestead.yaml 文件中已包含了一个网站设置范本。同样的,你也可以增加多个网站到你的 Homestead 环境中。Homestead 可以为你正在开发中的所有 Laravel 项目提供方便的虚拟化环境:

sites:
    - map: homestead.app   #访问域名
      to: /home/vagrant/Code/Laravel/public   #网站根目录

关于 Hosts 文件

你必须将在 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 文件之后,你就可以通过网页浏览器访问你的网站啦!

5. 安装插件

进入 Homestead 目录,输入以下命令:

vagrant plugin install vagrant-vbguest

6. 启动 Vagrant box

在你根据自己的喜好编辑完 Homestead.yaml 后,在命令行里进入你的 Homestead 目录并运行 vagrant up 命令。Vagrant 就会自将虚拟主机启动并自动设置共享文件夹和 Nginx 网站。

如果要重启虚拟机,可以使用 vagrant reload 命令。

如果要关闭虚拟机,可以使用 vagrant halt 命令。

如果以后修改了 Homestead.yaml,要重新载入配置,可以使用 vagrant provision 命令或 vagrant up –provision

如果虚拟机发生故障,要重置虚拟机,可以使用 vagrant destroy 命令。

7. 通过 SSH 连接

在 Homestead 目录运行 vagrant ssh 命令来连接虚拟主机。

ssh vagrant@127.0.0.1 -p 2222

你可能会经常需要使用 SSH 来连接 Homestead 主机,因此你可以在本机电脑上创建一个「别名」以便快速连接 Homestead box。在创建这个别名之后,就可以轻易地通过「vm」这个命令用 SSH 连上你的 Homestead 主机:

alias vm="ssh vagrant@127.0.0.1 -p 2222"

8. 解决Composer国内慢的问题

参考 http://pkg.phpcomposer.com/

这会让你感到很爽

其他杂项:

连接数据库

在 Homestead 中,已经预装了 MySQL 与 Postgres 两种数据库。为了方便使用,Laravel 在 local 的数据库设置值中已经默认将其设置好了。

如果想要从本机电脑上通过 Navicat 或者是 Sequel Pro 来连接 MySQL 或 Postgres 数据库,可以通过 127.0.0.1 来使用端口 33060 (MySQL) 或 54320 (Postgres) 连接。帐号密码分别是 homestead / secret

附注: 在本机电脑上你应当只使用这些非标准的连接端口来连接数据库。因为当 Laravel 运行于虚拟主机时,在 Laravel 的数据库设置值中依然是设置使用默认的 3306 及 5432 连接端口。

增加更多网站

一旦 Homestead 环境配置完毕且成功运行后,你可能会想要为 Laravel 应用程序增加更多的 Nginx 网站。你可以在单个 Homestead 环境中运行多个 Laravel 安装程序。在 Homestead.yaml 文件中增加另一个网站的设置后,进入 Homestead 目录并运行 vagrant provision 命令,即可新增一个网站。

配置 Cron 调度器

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 环境:

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

转发更多连接端口

如果你愿意的话,也可以借助指定连接端口的通信协议来转发更多额外的连接端口给 Vagrant box:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp
除特殊说明以外,本网站文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。