Vagrant+VirtualBox搭建统一开发环境

首先安装基础工具Vagrant、VirtualBox、Git:参考http://docs.docker.io/en/latest/installation/windows/

  1. Install virtualbox from https://www.virtualbox.org – or follow this tutorial
  1. Install vagrant from http://www.vagrantup.com – or follow this tutorial
  1. Install git with ssh from http://git-scm.com/downloads – or follow this tutorial

We recommend having at least 2Gb of free disk space and 2Gb of RAM (or more).

简单点就直接下载官方封装好的box:

Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box

单独下载的box放到docker根目录,

vagrant init ubuntu precise64.box

vagrant box add base http://files.vagrantup.com/precise64.box
mkdir vagrant
vagrant init
vagrant up

要是愿意自己动手也可以在VirtualBox里建好虚拟机,然后通过

vagrant package –output ubuntu.box –base vagrant-ubuntu

命令,导出一个自定义的box。

以下为vagrant用法说明:

Usage: vagrant [-v] [-h] command [<args>]

-v, –version                    Print the version and exit.
-h, –help                       Print this help.

Available subcommands:
box          manages boxes: installation, removal, etc.
destroy      stops and deletes all traces of the vagrant machine
halt         stops the vagrant machine
help         shows the help for a subcommand
init         initializes a new Vagrant environment by creating a Vagrantfile
package      packages a running vagrant environment into a box
plugin       manages plugins: install, uninstall, update, etc.
provision    provisions the vagrant machine
reload       restarts vagrant machine, loads new Vagrantfile configuration
resume       resume a suspended vagrant machine
ssh          connects to machine via SSH
ssh-config   outputs OpenSSH valid configuration to connect to the machine
status       outputs status of the vagrant machine
suspend      suspends the machine
up           starts and provisions the vagrant environment

For help on any individual command run `vagrant COMMAND -h`

vagrant的官方网站:http://www.vagrantup.com/

vagrant的一些镜像:http://www.vagrantbox.es/ 各种发行版的linux。

虚拟机启动后,就可以ssh连接,虚拟机的22端口默认映射到了本机的2222端口,默认的用户名和密码都是vagrant,初始化就完成了。

 

记一下vagrant的一些常用命令。
vagrant up   #开机
vagrant halt #关机
vagrant reload #重新启动,主要用于重新载入配置文件
关于vagrant的配置文件vagrantfile,vagrantfile在vagrant目录里面。配置基础开发环境主要是两个方面,一个是config.vm.forward_port选项,主要用于端口映射,初始的映射了22到本机的2222端口,我们可以把虚拟机的80端口映射到本机的4470上,然后再虚拟机里配好环境(例如lnmp)以后访问127.0.0.1:4470就是访问虚拟机的80了,非常方便。
config.vm.forward_port 8080, 4470
config.vm.forward_port 80, 4471
config.vm.forward_port 3306, 3307

还有一个就是配置一下共享目录,做到本机开发,虚拟机测试。

# Share an additional folder to the guest VM. The first argument is
# an identifier, the second is the path on the guest to mount the
# folder, and the third is the path on the host to the actual folder.
   config.vm.share_folder "v-data", "/data", "data"   #把这一行的注释去掉,如上所说,第一个是个标志,第二个是你虚拟机里挂载的目录,第三个就是物理机的目录了,这个目录是777的,可以随意修改删除,所有操作在虚拟机和本机都是同步的。

网络配置:

Vagrant的网络有三种模式

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

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

guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。

2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP ,在Vagrantfile中配置:

1 config.vm.network :private_network, ip: "192.168.1.104"

192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可

3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:

1 config.vm.network :public_network

目录映射:

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

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

1 ln -fs /vagrant/wwwroot /var/www

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

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

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

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

运行脚本:

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

1 #!/usr/bin/env bash
2
3 apt-get update
4 apt-get install -y apache2
5 rm -rf /var/www
6 ln -fs /vagrant /var/www

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

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

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

01 Bringing machine 'default' up with 'virtualbox' provider...
02 [default] Setting the name of the VM...
03 [default] Clearing any previously set forwarded ports...
04 [default] Creating shared folders metadata...
05 [default] Clearing any previously set network interfaces...
06 [default] Preparing network interfaces based on configuration...
07 [default] You are trying to forward to privileged ports (ports < = 1024). Most operating systems restrict this to only privileged process (typicallyprocesses running as an administrative user). This is a warning in case
08 the port forwarding doesn't work. If any problems occur, please try a port higher than 1024.
09 [default] Forwarding ports...
10 [default] -- 22 => <strong>2222</strong> (adapter 1)
11 [default] -- 80 => 8080 (adapter 1)
12 [default] Booting VM...
13 [default] Waiting for VM to boot. This can take a few minutes.
14 [default] VM booted and ready for use!
15 [default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can cause things such as shared folders to not work properly. If you see shared folder errors, please update the guest additions within the virtual machine and reload your VM.
16
17 Guest Additions Version: 4.1.18
18 VirtualBox Version: 4.2
19 [default] Mounting shared folders...
20 [default] -- /var/www
21 [default] -- /vagrant
22 [default] Running provisioner: shell...

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

连接的IP和端口根据网络环境配置的不同有所不同,如果是默认使用端口映射的话,一般是连接 本地的2222端口。

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

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

登录ssh完成环境的配置,如果在开发环境中使用webserver(nginx/apache)为了避免一些静态文件处理的问题,可能还需要进行一些额外的配置:Vagrant下共享目录静态文件(js/jpg/png等)“缓存”问题

在不进入虚拟机的情况下,还可以使用下面的命令对 虚拟机进行管理:

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

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

vagrant package --output NAME --vagrantfile FILE

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

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

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

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>