Vagrant安装与使用

一、安装 VirtualBox 、Vagrant

VirtualBoxhttps://www.virtualbox.org/wiki/Downloads/
vagrant: http://downloads.vagrantup.com

二、下载 box

1https://vagrantcloud.com/
2http://www.vagrantbox.es/
3https://puphpet.com    # php环境的配置文件可以在线生成

三、添加并安装 box

vagrant box add base ~/Downloads/virtualbox.box

四、查看已经安装的 box 列表

vagrant box list

五、初始化 box

vagrant init

六、Vagrantfile 配置

1、 网络设置

1.1、端口映射:

config.vm.network :forwarded_port, guest: 80, host: 8080

1.2、private_network :

config.vm.network :private_network, ip: "192.168.2.222"

1.3、DHCP:

config.vm.network :public_network
2、 共享目录
config.vm.synced_folder "./data", "/vagrant_data"
3、运行脚本
config.vm.provision "shell", inline: <<-SHELL
  sudo apt-get update
  sudo apt-get install -y apache2
SHELL

或:

config.vm.provision :shell, :path => "boot.sh"
4、内存、CPU
config.vm.provider "virtualbox" do |vb|
    #Display the VirtualBox GUI when booting the machine
    vb.gui = true
    #Customize the amount of memory on the VM:
    vb.memory = "1024"
    vb.cpus = 2
    vb.name = "my_vm"
end
5、nfs 权限
config.vm.synced_folder '.', '/vagrant', :nfs =>{
    :linux__nfs_options => ["no_root_squash"],
    :map_uid => 0,
    :map_gid => 0
}
6、域名解析慢
config.vm.provider :virtualbox do |vb|
    #vb.gui = true
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end

七、其他命令

$ vagrant init          # 初始化
$ vagrant up            # 启动虚拟机
$ vagrant halt          # 关闭虚拟机
$ vagrant reload    # 重启虚拟机
$ vagrant package    # 打包分发
$ vagrant ssh       # SSH 至虚拟机
$ vagrant status    # 查看虚拟机运行状态
$ vagrant destroy   # 销毁当前虚拟机

八、共享目录的静态文件缓存

Nginx: sendfile off;
Apache: EnableSendfile off

九、Vagrant For Parallels On Mac OS X

gem install ffi -v '1.9.8'
gem install json -v '1.8.2'
gem install vagrant-parallels -v '1.3.9'

vagrant plugin install vagrant-parallels
vagrant up --provider=parallels
参考阅读:

WHY VAGRANT?

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.

To achieve its magic, Vagrant stands on the shoulders of giants. Machines are provisioned on top of VirtualBox, VMware, AWS, or any other provider. Then, industry-standard provisioning tools such as shell scripts, Chef, or Puppet, can be used to automatically install and configure software on the machine.

——以上内容摘自官网

因其是使用虚拟机的,所以虚拟机的好处全部都有,你可以随便折腾,弄得不爽了可以马上复原,真的是很方便

安装

下载并添加 Box

Box 理解为一个打包好的操作系统环境就好了
可以自己做,也可以直接下载制作好的

Box 可以去 Vagrant Cloud 找

Vargrant 将 box 解包后放在 /.vagrant.d/boxes 文件夹

配置

  1. 建立一个 Vagrant 项目目录

    mkdir ~/Vagrant

  2. 初始化一个项目

    cd ~/Vagrant vagrant box list # 列出现有的 box vagrant init Ubuntu_Server_64-bit_14.04

会在当前目录下生成一个 Vagrantfile 文件,用于描述你的项目(虚拟机的网络连接方式,同步文件夹等)

Vagrantfile 配置文件

配置文件是用 Ruby 写的,不过都是一些常用的赋值

文件内部的解释非常清晰,就不班门弄斧了

默认共享目录

默认主机的项目目录和虚拟机中的 /vagrant 目录是共享的

使用

以下命令在项目目录中执行

更多命令请看《官方文档 - COMMAND-LINE INTERFACE

打包成 box

当你自定义了开发环境之后,在项目目录执行命令

vagrant package

在此目录会生成一个 package.box 文件,将这个 box 给其它开发人员,就能保证你们的开发环境相同了

或者使用命令 vagrant package -h 查看更详尽的用法,例如使用

vagrant package --include readme.txt --vagrantfile Vagrantfile

但是发现个问题,下次使用 vagrant box add 和 vagrant init 添加和初始化好这个 box 之后, 然后使用 vagrant up 会出现警告大致是说 .vagrant.d/boxes/boxname/0/virtualbox/include/_Vagrantfile:5: warning: already initialized constant VAGRANTFILE_API_VERSION, 出现这个问题的原因呢就是项目的当前目录有个 Vagrantfile, 并且我们用上面的命令把 Vagrantfile 也添加到了 box 中
解决的办法就是,如果要用 box 中的 Vagrantfile 那么把.vagrant.d/boxes/boxname/0/virtualbox/include/_Vagrantfile 文件重命名为 Vagrantfile 并覆盖项目目录中的 Vagrantfile; 如果不用它,那么将其删除

自动化

若想统一开发环境和生成环境也是可以的,将虚拟机系统环境配置成相同的环境即可

若想让两个环境完全一样,并实现自动化配置,可以尝试 Chef 或 Puppet

心得

使用的一段时间如下环境:Mac + VirtualBox + Vagrant
有个问题,使用 Public Networks 网络方式的时候,与外网的连接不是很好

而且我还用着 Parallels 虚拟机,于是尝试了 vagrant-parallels 插件,使之能用 Vagrant 来管理 Parallels 虚拟机
官方文档:http://parallels.github.io/vagrant-parallels/docs/
当使用 Vagrant 启动 Parallels 虚拟机的时候,会出现 Gui 窗口,为了关闭这个窗口可以按如下操作:
执行 prlctl set <name> --on-window-close keep-running 命令之后,即使把窗口关了,虚拟机也在后台运行

使用了一段时间,在 VirtualBox 中的问题没有遇到过,也没有遇到其它问题。 而且 Parallels 虚拟机的性能比 VirtualBox 虚拟机要好

parallels/ubuntu-14.04 的 box 下载地址: https://vagrantcloud.com/parallels/boxes/ubuntu-14.04/versions/1.0.1/providers/parallels.box