Vagrant 部署

原创
2013/11/26 13:43
阅读数 820

#准备工作

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

#设置环境 安装VirtualBox, Vagrant时环境变量可能不生效, 推荐重启机器...

添加Box,

首先在本地创建好工作目录,并在命令行下切换到对应目录 添加box的几种方式

# 网络不好不推荐,一个box 100M+
vagrant box add base http://files.vagrantup.com/precise32.box
# 选择已下载的box或者自己做的box(.box是一个tar文件), 推荐
vagrant box add base precise32.box
# 指定Box名称
vagrant box add precise32 precise32.box
vagrant box add precise32 http://files.vagrantup.com/precise32.box

base 表示指定默认的box,也可以为box指定名称,比如 precise32,使用base时,之后可以直接使用 vagrant init 进行初始化,如果自行指定名称,则初始化的时候需要指定box的名称。

初始化工作目录

# 如果名称是base可以直接运行初始化命令
vagrant init
# 如果指定了名称
vagrant init precise32

完成之后会生成 Vagrantfile 配置文件, Vagrant的精华就在这个文件里面了

网络配置

Vagrant的网络有三种模式

  • 较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置

      #guest: 22 表示虚拟机中的22端口, host: 2222 表示映射到宿主机的2222端口
      config.vm.network :forwarded_port, guest: 22, host: 2222
    
  • 如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP,在Vagrantfile中配置:

      #192.168.1.2 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可
      config.vm.network :private_network, ip: "192.168.1.2"
    
  • 如果需要将虚拟机作为当前局域网中的一台计算机(桥接),由局域网进行DHCP,那么在Vagrantfile中配置:

      config.vm.network :public_network
    

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

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

ln -fs /vagrant/wwwroot /var/www

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

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

前面的参数 wwwroot/ 表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: d:/www/
后面的参数 /var/www表示虚拟机中对应映射的目录。

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

#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

保存为sh文件,文件位置随意,但最好是和Vagrantfile相同目录,文件名自取(如 boot.sh),然后在Vagrantfile中添加:

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

当初次使用基本的设置都完成则之后,则可以使用 vagrant up 启动虚拟机

虚拟机启动之后则可以通过 vagrant ssh 联入虚拟机进行进一步的环境配置,或者软件安装相关的工作,在Windows系统下,并不能直接通过 vagrant ssh 连到虚拟机,需要使用 Putty,Xshell 等第三方工具进行连接

连接的IP和端口根据网络环境配置的不同有所不同,如果是默认使用端口映射的话,一般是连接本地的2222端口。可以通过配置修改,前提是主机没有占用22端口

config.vm.network :forwarded_port, guest: 22, host: 22

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

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

在不进入虚拟机的情况下,还可以使用下面的命令对 虚拟机进行管理: vagrant up (启动虚拟机) vagrant halt (关闭虚拟机——对应就是关机) vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用) vagrant resume (恢复虚拟机 —— 与前面的暂停相对应) vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)

当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box,

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

制作完成之后直接将box文件拿到其他计算机上配置即可使用。

参考 http://blog.smdcn.net/article/1308.html 并做部分修改

展开阅读全文
打赏
0
5 收藏
分享
加载中
更多评论
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部