laravel-homestead 开发环境使用

这里记录下我使用 vagrant 来做开发环境的各种经验,本文主要讲通过 homestead 命令行来控制虚拟机。
之前我用 vagrant 搭建了自己的方便移动的开发和生产环境,用过 CentOS-6.5 CentOS-7.0 CentOS-7.1,最终我回到了官方提供的开发环境:laravel/homestead,为什么要绕一圈,为什么绕了一圈又回来了呢?

故事背景

曾经用绿色的 amp 环境包来部署各类应用,然后各种慢和不稳定,慢是必然的,稳定性的影响主要来自于宿主计算机,当时部署给别人一个自己做好的站点,不到一个月,打不开了,查明原因是因为毒,没错,是因为毒,毒把网站搞坏了,把 mysql 的服务也搞坏了,虽然最终是搞定了,但是这个过程让我意识到一个问题,再有类似的事情,我要给他们配个虚拟机!也就是那个时候,我接触了 laravel,学习的过程中又遇到了 vagrant,顿时觉得这真是神器,当时本来试图用官方提供的 homestead 环境的,但是遇到了一些问题,第一,该环境配好后要配置环境变量,我确实按照文档配置了,但是不起作用,当时也懒得考虑为什么,我总是对 Ubuntu 有成见。第二,当我用它操作了半天,发现怎么修改和配置,它都只能针对homestead这个数据库操作,我创建新的数据库用来连不上,不明白是什么原因,反正我是放弃了。
事隔半年,我又燃起了要搞定homestead的愿望,原因是每次自己搞个 lnmp 环境出来总还是会遇到一些其他的问题,问题解决了又有新问题,我感觉自己把时间大量的花费在了环境上,我不想这样,我想把更多的时间放在 laravel 上,我得把环境配置上的时间节省下来,干脆就用官方的环境吧!因此,我重新阅览官方文档,重新的意思包括把5.1版本的文档翻译了一下,翻译过后确实对很多细节更了解了,也意识到当时可能遇到但是没解决的问题。啰嗦了太多了,下面上干货:

准备工作

你的电脑应该已经具备如下环境:Composer, git, php(可选)

你的电脑最好是能够畅游互联网,可以访问 github.com。

安装

新版 vagrant 用这个命令:

vagrant box add laravel/homestead

老版 vagrant 用这个:

vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

本土局域网用户也许会在安装中遇到下载失败的问题,请科学上网,或用下载工具下载吧,我是用 wget 下载下来安装的,写此文时,homestead 版本还是 0.2.7,本来想上传到百度云的,但是 Urumqi 的百度网盘有问题。

分支1:vagrant 命令行管理虚拟机

如果你本地没有 PHP 环境,可以选择这个分支。
克隆 Homestead 代码库,你可以在用户根目录(~)下运行下面的命令,这样会在~/Homestead目录下克隆:

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

初始化,可以实现在~/.homestead目录下创建配置文件Homestead.yaml

bash init.sh

此时,你已经可以在~/Homestead 目录下,用vagrant up命令来启动虚拟机了,虚拟机的目录等配置后面说。

分支2:homestead 命令行管理虚拟机

如果你本地有 PHP 环境,建议选择这个分支。
为了实现 http://laracasts.com 里那样的操作,我们需要安装 homestead 的命令行。

composer global require "laravel/homestead=~2.0"

完后,你的~/.composer/vendor/bin目录下应该是具备了homestead文件,该文件具有执行权限。

添加环境变量(可能成为你的绊脚石)

下面修改环境变量,将~/.composer/vendor/bin写入 PATH 环境变量里。

注意: 如果你的命令行安装了zshoh-my-zsh,修改环境变量时有些小的变化。

我遇到的就是这个问题,怎么修改,环境变量都不生效,比如我修改的是~/.bash_profile,那么必须source ~/.bash_profile才能生效,而且重启后继续无效,为什么呢?因为 zsh !我的终端是 iTerm2,它很炫酷,但是就是环境变量搞不成。Google 找到了问题所在,安装 zsh 后,~/.bash_profile并没有被执行,所以需要编辑 zsh 的配置文件~/.zshrc,在该文件里加入

source ~/.bash_profile

现在我们应该可以用homestead命令了,可以看到 homestead 包含了一些 vagrant 的功能,下面初始化:

homestead init

此时应会在~/.homestead/下创建配置文件Homestead.yaml,如果该文件已经存在会问你是否覆盖。如果想编辑配置文件就输入homestead edit

使用

不管你是分支1还是分支2,下面的操作都是一样的。
配置~/.homestead/Homestead.yaml

目录映射

说明:

folders:
    - map: 本地目录
      to: 虚拟机上的目录

我的配置:

folders:
    - map: ~/Sites
      to: /home/vagrant/Code

虚拟目录

说明:

sites:
    - map: 域名,自己的 hosts 文件里已经定义了的。
      alias: 别名,也是 hosts 文件里已经定义了的。
      to: 虚拟主机里的目录,一般这个目录是通过目录映射映射好了的。

我的配置:

sites:
    - map: pma.local
      to: /home/vagrant/Code/phpMyAdmin
    - map: test.local
      to: /home/vagrant/Code/test
    - map: hfcms.local
      to: /home/vagrant/Code/hfcms/public
    - map: flyer.dev
      to: /home/vagrant/Code/flyer.dev/public

新增或修改虚拟目录配置

方式一:修改完Homestead.yaml后,务必运行下面命令以使配置生效:
  1. 有 php 环境,成功配置好了 homestead 环境的。

    homestead provision
  2. 无 php 环境,未成功配置 homestead 环境的。

    vagrant provision
方式二:通过 SSH 直接登录到虚拟机里面,然后运行:
serve domain.app /home/vagrant/Code/path/to/public/directory

就会添加一个域名为domain.app
目录在/home/vagrant/Code/path/to/public/directory的虚拟目录。

0%