基于Vagrant的虚拟环境搭建流程

Vagrant,基于Ruby开发,使用开源 VirtualBox 作为虚拟化支持,可以轻松的跨平台部署。

 

一. 下载资源:

1 下载安装 VirtualBox :https://www.virtualbox.org/

2 下载安装 Vagrant :http://www.vagrantup.com/

3 下载需要使用的 box :

官方提供的范例:http://files.vagrantup.com/precise32.box

还可以在 http://www.vagrantbox.es/ 这里下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。

 

二. 添加镜像到 Vagrant:

假设下载的镜像存放路径是 ~/box/test.box,在终端里输入:

$ vagrant box add gsky ~/box/test.box

gsky 是我们给这个 box 命的名字,~/box/test.box 是 box 所在路径

 

三. 初始化开发环境:

1 创建一个开发目录(比如:~/dev),你也可以使用已有的目录,切换到开发目录里,用 gsky 镜像初始化当前目录的环境:

$ cd ~/dev  # 切换目录

$ vagrant init gsky  # 初始化

$ vagrant up  # 启动环境

 

2 启动完成后,就可以用 SSH 登录虚拟机了,剩下的步骤就是在虚拟机里配置要运行的各种环境和参数了。

$ vagrant ssh  # SSH 登录

$ cd /vagrant  # 切换到开发目录,也就是宿主机上的 `~/dev`

~/dev 目录对应虚拟机中的目录是 /vagrant

Windows 终端并不支持 ssh,所以需要安装第三方 SSH 客户端,比如:Putty、Cygwin 等。

 

登录的帐号密码均为 vagrant ,登录之后如果需要 su root ,密码也是 vagrant

注:使用 vagrant ssh 时,会提示可以使用密钥进行登录,如果需要使用putty进行密钥登录的话,需要下载 puttygen 将 ssh 的密钥转换为 ppk 文件才能使用。

 

3 Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。

 

Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式,这种方式比较麻烦,新开和修改端口的时候都得编辑。相比较而言,host-only 模式显得方便多了。打开 Vagrantfile,将下面这行的注释去掉(移除 #)并保存:

 

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

重启虚拟机,这样就能用 192.168.33.10 访问这台机器了,可以把 IP 改成其他地址,只要不产生冲突就行。

 

4 目录映射:

既然是部署环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。

 

默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如

 

ln -fs /vagrant/wwwroot /var/www

来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:

 

config.vm.synced_folder "wwwroot/", "/var/www"

前面的参数 “wwwroot/”  表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “d:/www/”.

后面的参数 “/var/www” 表示虚拟机中对应映射的目录。

 

5 运行脚本:

虽然不是必须,但是如果有需要在启动时运行一些脚本(环境的安装或者有些服务的启动需要在完成目录映射之后进行),可以编辑脚本,类似如下(摘自Vagrant Document):

 

#!/usr/bin/env bash

 

apt-get update

apt-get install -y apache2

rm -rf /var/www

ln -fs /vagrant /var/www

 

保存在和Vagrantfile相同目录,文件名自取(如 boot.sh),然后在Vagrantfile中添加:

config.vm.provision :shell, :path => "boot.sh"

 

四. 打包分发

当配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:

$ vagrant package

打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。

 

PS:

vagrant package --output NAME --vagrantfile FILE

可选参数:

--output NAME :(可选)设置通过NAME来指定输出的文件名

--vagrantfile FILE:(可选)可以将Vagrantfile直接封进box中

 

注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:

sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

 

 

五. 常用命令

$ vagrant init  # 初始化

$ vagrant up  # 启动虚拟机

$ vagrant halt  # 关闭虚拟机

$ vagrant reload  # 重启虚拟机

$ vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)

$ vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)

$ vagrant ssh  # SSH 至虚拟机

$ vagrant status  # 查看虚拟机运行状态

$ vagrant destroy  # 销毁当前虚拟机

 

六. 注意事项

 

使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:

 

# Apache 配置添加:

EnableSendfile off

# Nginx 配置添加:

sendfile off;

可以参考: http://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour

posted on 2014-03-14 10:25  秋叶leaf  阅读(896)  评论(0编辑  收藏  举报