Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。本文通过安装php开发环境homestead来说明 Vagrant 的安装使用与优点。
我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发,这样不仅保证代码运行环境一致,还可以节省部署开发环境带来的不必要时间开销,让团队新成员快速投入开发工作中。
安装步骤
1、安装VirtualBox
下载地址:https://www.virtualbox.org/wiki/Downloads;虽然 Vagrant 也支持 VMware,但是VMware 对应的 Vagrant 版本也是收费的。
2、安装 Vagrant
Vagrant 的下载地址https://www.vagrantup.com/downloads.html;下载好后,打开 Vagrant镜像一步一步的安装。使用
$ vagrant -v
查看是否安装成功。
3、添加box镜像
Vagrant 安装成功后,运行
vagrant box add laravel/homestead
命令将 laravel/homestead 盒子添加到 Vagrant 中安装。下载盒子需要几分钟的时间,具体取决于你的互联网连接速度。
但一般国内网络环境下都会失败。那么我们需要离线安装 box 。下载homestead 离线安装包;下载完成后,运行
vagrant box add laravel/homestead ~/Download/virtualbox.box
此处路径只是为了演示。
因为是手动导入包,还需要多更改几个步骤。
编辑Homestead/scripts/homestead.rb文件
修改
config.vm.box_version = settings["version"] ||= ">= 1.0.0" 改成 config.vm.box_version = settings["version"] ||= ">= 0
这样就安装离线安装好 homestead box 了。可以使用
vagrant up
来启动 box 了。
4、克隆和配置homestead文件
在目标目录,运行
git clone https://github.com/laravel/homestead.git Homestead
由于 Homestead 的 master 分支并不是稳定分支,你应该用打过标签的稳定版本。你可以在 Github 发行页面 上找到最新的稳定版本。
cd Homestead // Clone the desired release... git checkout v6.1.0
克隆 Homestead 代码库后,从 Homestead 目录中运行bash init.sh
命令来创建 Homesstead.yaml 配置文件。 Homesstead.yaml 文件会被放置在你的 Homestead 目录中:
运行命令来初始化配置
bash init.sh
其他详细的配置参考官方文档,这里不再赘述。
5、初始化开发环境
切换到目标目录,使用 vagrant init laravel/homestead
初始化该目录的环境。然后启动环境vagrant up
。
看到终端显示了启动过程,启动完成后,我们就可以用 SSH 登录虚拟机了,剩下的步骤就是在虚拟机里配置你要运行的各种环境和参数了。
$ vagrant ssh # SSH 登录 $ cd /vagrant # 切换到开发目录,也就是宿主机上的 工作目录
6、其他设置
Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。
Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式,这种方式比较麻烦,新开和修改端口的时候都得编辑。相比较而言,host-only 模式显得方便多了。打开 Vagrantfile,将下面这行的注释去掉(移除 #)并保存:
config.vm.network :private_network, ip: "192.168.33.10"
重启虚拟机,这样我们就能用 192.168.33.10 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。
7、设置共享文件夹
打开 Vagrantfile,输入以下代码或者去掉注释
config.vm.synced_folder “/Users/name/nginxWeb”, “/wwwroot”
第一个是你本地的文件夹 第二个是挂在到虚拟机上的文件夹
给共享文件夹设置权限
默认共享文件夹属主 和属组都是 vagrant 我们如果php操作文件夹 是没权限的 要把该文件夹设置成 www用户
config.vm.synced_folder "/Users/gwyy/wwwroot","/wwwroot", create:true, :owner => "www", :group => "www", :mount_options => ["dmode=775","fmode=664"]
打包分发
虽然我们这里的用 laravel 官方的开发环境, 其他成员可以使用同样方法搭建好一致的开发环境。那么,如果我们需要根据自己的开发需求来定制 box 后该如何打包分发给其他成员呢。
当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:
vagrant package
打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。
常用命令
$ vagrant init # 初始化 $ vagrant up # 启动虚拟机 $ vagrant halt # 关闭虚拟机 $ vagrant reload # 重启虚拟机 $ vagrant ssh # SSH 至虚拟机 $ vagrant status # 查看虚拟机运行状态 $ vagrant destroy # 销毁当前虚拟机
注意事项
1、使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
# Apache 配置添加: EnableSendfile off # Nginx 配置添加: sendfile off;
2、如果访问出现 no input file specified
输入 vagrantprovision