Homestead 环境:用 Homestead 命令行来操作虚拟机
本来想去掉多余的,没用的只说说 homestead 的命令配置,后来想想新朋友估计要打开好几个页面来配置,我就干脆一起放上来了。
转载请注明出处:http://huifeng.me/2015/09/20/laravel-homes...
故事背景
曾经用绿色的 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 环境变量里。
注意: 如果你的命令行安装了zsh
和oh-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
后,务必运行下面命令以使配置生效:
- 有 php 环境,成功配置好了 homestead 环境的。
homestead provision
- 无 php 环境,未成功配置 homestead 环境的。
vagrant provision
方式二:通过 SSH 直接登录到虚拟机里面,然后运行:
serve domain.app /home/vagrant/Code/path/to/public/directory
就会添加一个域名为domain.app
,
目录在/home/vagrant/Code/path/to/public/directory
的虚拟目录。
vagrant provision帮我大忙了,谢谢博主
请问怎么修改默认生成数据库的用户名和密码?
添加环境变量那块讲的也有坑