忽然之间的博客

Thoughts, stories and ideas.

Vagrant 实战

Vagrant 是一个可创建轻量级、高复用性和便于移植的开发环境的工具。

此文章是作者折腾vagrant的笔记, 希望大家看后,不再去网上搜罗资料, 能顺利搭建vagrant环境。vagrant更新较快, 还建议大家以官网为主。Vagrant官网

面临的问题

  • 开发人员设备不统一, win , Mac , Linux等
  • 开发环境不统一, 各种软件安装、版本和依赖管理困难
  • 没有专业的人员来进行系统管理
  • 换了设备还要折腾新的开发环境

如果你希望本地开发, 同时拥有统一的开发环境, Vagrant 可以帮你搞定。

实战:Windows下,使用Vagrant部署Linux 开发环境

安装VirtualBox - 下载安装VirtualBox Windwo版

下载 Vagrant - 下载安装Windows版 window版是msi安装文件,直接界面安装即可。 如果下载centos版本,是rmp包 rpm -ivh vagrant_1.8.1_x86_64.rpm

安装 Vagrant

mkdir vagrant_getting_started
cd vagrant_getting_started
vagrant init

执行init命令后, 会在当前目录生成一个配置文件 Vagrantfile

添加Vagrantbox

vagrant box add hashicorp/precise64
vagrant up

其中 hashicorp/precise64 是在(https://atlas.hashicorp.com/boxes/search)这里定义的, 会直接从网络下载镜像。

鉴于下载速度极慢,Vagrantbox还可以支持下载好直接本地add.

  • Vagrantbox资源及下载到本地

Vagrantbox镜像网站

  • 安装操作系统镜像, 例如我们下载一个centos镜像

[CentOS 6.5 x86_64](https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box]

从本地添加vbox

mkdir vagrant_getting_started
mkdir vagrant_vbox  #centos65-x86_64-20140116.box 下载到此目录
cd vagrant_getting_started

vagrant box add centos65 vagrant_vbox/centos65-x86_64-20140116.box
vagrant up

其中centos65是我们自定义的vbox镜像命名,vagrant_vbox/centos65-x86_64-20140116.box是vbox下载镜像的本地路径。

查看已经添加的box列表

vagrant box list

centos65 (virtualbox, 0)

说明添加成功。

接下来可以配置Vagrantfile

Vagrant.configure(2) do |config|

  #box add 的名字
  config.vm.box = "centos65"

  #Vagrant的三种网络配置
  #端口映射(Forwarded port) 把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。
  #例如下面的配置,将访问宿主计算机8080端口的请求都转发到虚拟机的80端口上进行处理       #访问localhost:8080,对应访问虚拟机的80端口
  #优点:容易实现外网访问虚拟机
  #缺点:端口比较多时,配置麻烦;不支持在宿主机器上使用小于1024的端口来转发。比如:不能使用SSL的443端口来进行https连接。
  config.vm.network "forwarded_port", guest: 80, host: 8080

  #私有网络(Private network) ,只有主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问,当然虚拟机是可以访问外部网络的。
  #优点:安全,只有自己能访问
  #缺点:因为私有的原因,所以团队成员其他人不能和你协作
  config.vm.network "private_network", ip: "192.168.33.10"

  #公有网络(Public network) ,虚拟机享受实体机器一样的待遇,一样的网络配置,vagrant1.3版本之后也可以设定静态IP。
  #优点:方便团队协作,别人可以访问你的虚拟机
  #缺点:需要有网络,有路由器分配IP
  config.vm.network "public_network", ip: "192.168.12.253"


  #设置文件同步,如下 ../www_data 是本地目录, /vagrant_data是虚拟机文件目录
  #两个目录设置为同步,这样就可以直接本地编辑文件,使用虚拟机配置的软件环境了。
  config.vm.synced_folder "../www_data", "/vagrant_data"

启动虚拟机

vagrant up

配置ssh 登录

vagrant ssh

执行此命令后,vagrant会生成ssh配置,

hostname: localhost

port:   2222

Connection Type: SSH

User Name:  vagrant

Password:   vagrant

使用ssh 工具 , 如 xshell 即可登录虚拟机

另外,登录到虚拟机如果想使用root,可以配置root密码

sudo passwd root

打包分发

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

vagrant package

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

也可以把配置文件打包进box

vagrant package --vagrantfile Vagrantfile

Vagrant 常用命令

Vagrant的命令很多.官网上有 完整的列表, 这里会介绍一些常用的. vagrant up

vagrant up这会运行基于 Vagrantfile配置文件的vagrant. 我用来启动和重启开发环境. vagrant suspend

vagrant suspend 这个能暂停当前环境操作. 最好在关机前做好这一步,以防下次开机配置无法恢复. Starting, Pausing, and Resuming: 启动和重启可以直接使用vagrant up. 所有之前的状态都会被保存起来. vagrant destroy

vagrant destroy永久性的移除你的虚拟环境. vagrant reload

vagrant reload 和vagrant reload –provision如果环境挂了,可以重启.如果加了–provision, 就会恢复资料库. 这在使用Cookbooks 或Puppet移除或添加东西时很有效果. vagrant ssh

vagrant ssh所有公共文件夹中的操作都会同步到虚拟环境,但如果需要直接操作可使用该命令. vagrant ssh-config

vagrant ssh-config这个显示连接到虚拟环境的所有配置项信息.