开发过程中,环境配置不一致经常导致一些问题,本地运行正常,到测试、生产环境却出现了问题。所以,一套和线上环境配置一致的本地开发环境是很有必要的。在虚拟机中搭建一套和线上环境一致的虚拟环境,能够有些避免类似问题;尤其在团队开发中,一致的开发环境能够减少很多不必要的问题。不过,单纯使用VMware、VirtualBox或者Parallels在做开发环境标准化时有些困难,团队中每个人按照要求在虚拟机中搭建一遍,既费时又费力。Vagrant作为一个虚拟机管理工具,很好的解决了这些问题,基于命令行更轻便的操作虚拟机,实现快速的虚拟机镜像分发和使用,团队中打包一个box,就可以分发给所有人使用。
Vagrant提供的共享文件夹、端口转发等功能,对于在主机上写程序,在虚拟环境中调试来说是非常有用;可以将代码放到共享目录,方便虚拟环境调试,把日志文件放到共享目录,方便主机查看。在模拟分布式环境时,同时配置启动多台虚拟机也非常方便。Vagrant环境的搭建比较简单,可以使用Vagrant+VirtualBox组合,也支持Vagrant+VMware、Parallels这种组合。
安装Vagrant和VirtualBox
推荐使用Vagrant+VirtualBox这个组合,因为Vagrant最早支持VirtualBox,感觉会更靠谱一些;当然,最重要的原因:VMware和Parallels都是付费软件,VirtualBox是开源的。
如果机器已经安装了虚拟机软件,在下载安装Vagrant的时一定注意版本,版本不兼容可能无法使用,建议全部升级到最新版本。官网下载:
- 下载VirtualBox:https://www.virtualbox.org/
- 下载Vagrant:https://www.vagrantup.com/downloads.html
双击下载文件,傻瓜式安装;安装完成后,控制台运行vagrant version
出现以为内容,说明安装正常。
Installed Version: 2.0.2
Latest Version: 2.0.2
You're running an up-to-date version of Vagrant!
在/Users/wangxuesong下创建Vagrant目录,打开官网点击Find Boxes
查找需要安装box,搜索Centos,在How to use this box with Vagrant中有两行最简单的命令,在刚才创建的目录中执行这两个命令就可以快速下载并启动一个centos7的虚拟机了:
vagrant init centos/7
vagrant up
由于某些原因下载速度可能比较慢,在执行vagrant up命令后,找到下载链接,类似于这个https://vagrantcloud.com/centos/boxes/7/versions/1801.02/providers/virtualbox.box,放到迅雷之类的工具中下载会快一些。
下载完成后,拷贝到Vagrant目录,执行vagrant box add centos/7 centos-VAGRANTSLASH-7
添加box;执行vagrant init
完成相关虚拟机的初始化(第一种是直接运行的vagrant init,会先添加box再初始化)。
初始化完成,在Vagrant目录会生成一个Vagrantfile
文件,里面可以配置各种虚拟机信息。
执行vagrant up
(最初的那两个简单命令之一)启动虚拟机器;
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' is up to date...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
==> default: Rsyncing folder: /Users/wangxuesong/Vagrant/ => /vagrant
启动完成,执行vagrant ssh
登陆虚拟机。
配置Vagrant和VirtualBox
在Vagrant中,生成的Vagrantfile文件,里面包含了各种配置信息。
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
这两默认配置,代表使用的配置版本为2.x,指定了所使用的box为centos/7。
hostname设置
config.vm.hostname = "centos7"
网络设置
Vagrant默认为NAT模式,用于让vm可以通过host转发访问局域网甚至互联网;Vagrant还支持host-only(主机模式)和Bridge(桥接模式),因为不需要局域网,一般设置为host-only模式。避免与局域网机器IP冲突,尽量不要使用192.168、10、172.16等ip地址。config.vm.network "private_network", ip: "66.66.66.66"
同步目录设置
从vagrant启动输出信息可以看到,默认设置了同步目录:==> default: Rsyncing folder: /Users/wangxuesong/Vagrant/ => /vagrant
可以通过配置来设置自定义同步目录。
config.vm.synced_folder "/Users/wangxuesong/Vagrant_Data", "/vagrant_data"
设置内存、CPU
调整内存和CPU,找到配置文件靠后部分,将config.vm.provider部分注释去掉。config.vm.provider "virtualbox" do |vb|
vb.memory = "3072" vb.cpus = "2"
end
执行vagrant reload
重启生效配置,登陆虚拟机验证配置是否生效。
Vagrant常用命令
vagrant up
启动虚拟机vagrant ssh
ssh到虚拟机vagrant halt
关闭虚拟机vagrant reload
重启虚拟机vagrant status
查看虚拟机状态vagrant suspend
暂停虚拟机vagrant resume
恢复虚拟机vagrant package
打包当前虚拟机环境