VisualBox&Vagrant搭建开发环境

前言: 以前都是使用破解版的VMware,感觉也是挺好用的,但是需要周边的东西的话,可能还要找破解版的,不胜麻烦.干脆换成免费版的VisualBox,听过完全备份出来的文件也要小些,但是实际我测出来并没有小多少.

目录:

  1. setup VisualBox
  2. set Vagrant
  3. setup dev
  4. setup db
  5. package box
  6. setup bat
  7. extension
    • 详解vagrant网络配置
    • 通过vagrant打造集群

setup VisualBox

VisualBox下载地址https://www.virtualbox.org/wiki/Downloads

我这里选择的是Windows版的

安装好之后就不用再管它了,Vagrant会自动关联的.(配置网络时要用到一次)

set Vagrant

Vagrant下载地址https://www.vagrantup.com/downloads.html

我选的还是Windows版的

它的配置较为繁琐,这里还要下载一个box文件,来安装我们的系统.这里有个Vagrant的库.

我这里下载的是centos65.作为我的初始操作系统.

搭建的过程中会经常使用到Vagrant的文档. 我这里也参考了另一篇文章.

Vagrant的box文件我存放到G:\VagrantWorkspace\box下。 虚拟机有两个,分别是dev和db.

setup dev

> win+R
> mkdir G:\VagrantWorkspace\project\dev
> notepad ./Vagrantfile
/*
Vagrant.configure(2) do |config|
  config.vm.box = "dev"
  config.vm.define "dev" do |dev|
  end
  config.vm.network "public_network", 
    adapter: 1, 
    ip: "192.168.1.143", 
    bridge: "Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter", 
    auto_config: false
  config.ssh.host     = "192.168.1.143"
  config.ssh.username = "vagrant"
  config.ssh.password = "vagrant"
  config.vm.provision "shell",
    run: "always",
    inline: "/bin/sh /etc/init.d/network restart"
#  config.vm.synced_folder "G:/workspace-143/", "/home/yaoguai/project",
#    owner: "yaoguai", group: "yaoguai"
end
*/

我这里使用的是桥接的方式,ssh使用账号密码登录,但是首次使用桥接的话,因为系统是没有正确配置网络的,所以我们打开VisualBox找到改虚拟机并使用账号密码登录,编辑其网络配置.

$sudo passwd root
// 111111
// 111111
$su root
#cd /etc/sysconfig/network-scripts
#mkdir backup
#cp ifcfg-eth0 backup/
#vi ifcfg-eth0
/*
DEVICE="eth0"
BOOTPROTO=static
HWADDR="08:00:27:07:9E:3D"
ONBOOT="yes"
TYPE="Ethernet"
BROADCAST=192.168.0.255
IPADDR=192.168.1.143
NETMASK=255.255.255.0
NETWORK=192.168.1.0
*/
#cd /etc/udev/rules.d/
#rm -f 70-persistent-net.rules
#vi /etc/sysconfig/network
/*
NETWORKING=yes
HOSTNAME=vagrant
GATEWAY=192.168.1.1
*/
#vi /etc/resolv.conf
// nameserver 192.168.1.1
#service network restart
#ifconfig
#ping www.baidu.com
// 一般能够正常ping通

这里的70-persistent-net.rules很特别,在我使用VMware时,如果把一个备份虚拟机考到另外一台电脑上,不删除这个文件就会出现网络问题,猜测应该是Mac地址造成的.

setup db

创建db虚拟机的过程与dev的基本一致,也包括创建其配置文件与网络配置.这里只贴出其配置文件.

Vagrant.configure(2) do |config|
  config.vm.box = "db"
  config.vm.define "db" do |db|
  end
  config.vm.network "public_network", 
    adapter: 1, 
    ip: "192.168.1.144", 
    bridge: "Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter", 
    auto_config: false
  config.ssh.host     = "192.168.1.144"
  config.ssh.username = "vagrant"
  config.ssh.password = "vagrant"
  config.vm.provision "shell",
    run: "always",
    inline: "/bin/sh /etc/init.d/network restart"
  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 1
  end
end

package box

打包后的虚拟机可以直接发送给其他用户,这对开发来说是很方便的.

> vagrant -h
> G:
> cd G:\VagrantWorkspace\project\dev
> vagrant halt
> vagrant package --output ../../box/dev.box
> cd G:\VagrantWorkspace\project\db
> vagrant halt
> vagrant package --output ../../box/db.box

我们开发的虚拟机就相当于做了一个快照保存到box文件夹下了.

setup bat

其实单个配置文件是可以配置多个虚拟机同时启动的,但是我还是希望一个虚拟机一个配置文件,这样拷给别人也方便.

这个做了两个简单的批处理脚本,以免每次打开所有虚拟机都要在命令行中敲半天,还可以直接把他们添加到开机自启动中.

> notepad G:\vagrant-up.bat
/*
G:
cd VagrantWorkspace\project\dev
vagrant up

cd G:\VagrantWorkspace\project\db
vagrant up
*/
> notepad G:\vagrant-halt.bat
/*
G:
cd VagrantWorkspace\project\dev
vagrant halt
cd G:\VagrantWorkspace\project\db
vagrant halt
*/

extension

扩展篇我们讲解一些实际应用,比如你想试验怎么同时管理多台服务器的时候,首先你得有多台服务器,而通过vagrant是很容易完成这件事情的.

详解vagrant网络配置

因为vagrant是管理虚拟机的,所以网络配置就是配置虚拟机的网络.而虚拟机里面的网络常用的有三种

  1. nat
  2. hostonly
  3. bridge

详细讲解可以参见实例讲解虚拟机3种网络模式(桥接、nat、Host-only)

而vagrant中的配置即与这些模式相关联,vagrant关于网络主要也有三种配置:

  1. private_network
  2. public_network
  3. forwarded_port 端口转发

比如我们在配置开发环境的时候,因为基本只需要一台开发机即可,所以选择private_network+forwarded_port完全可以满足需求.

当我们在配置文件中什么也不写的时候,默认就是使用private_network+forwarded_port的, 例如:

Vagrant.configure(2) do |config|
  config.vm.box = "dev"
  # 关闭默认的文件夹共享
  config.vm.synced_folder "../dev", "/vagrant", disabled: true
  # 配置虚拟机为2核4G
  config.vm.provider "virtualbox" do |vb|
      vb.memory = "4096"
      vb.cpus = 2
  end
end

上面的配置虽然没有写,但是也涉及了地址转发,vagrant帮你配置了ssh的端口转发.