在《奔跑吧Ansible》中接触了Vagrant+VirtualBox,但是感觉一般般,也没觉得很特别的:就自己安装虚拟机差不多嘛。
后面在网上了解了一些关于这两工具,很多人用来搭建开发环境,脑子瞬间被击中了—还可以这么玩。这样系统重装的时刻就不用那么纠结和犹豫了,很多软件都安装在VirtualBox里面,重装后,直接启动虚拟机,就一切的开发环境的软件就都回来了。还有集群的搭建也挺方便的:由于Vagrant是命令行的方式结合配置来启动了,非常方便。
官方网站 Vagrantbox.es Discover Vagrant Boxes 有提供一些镜像,如Centos6:
但是网络提供的不总能满足需要。所以有时还得亲自下手从零开始创建自己的Box。制作Vagrant的Box需要遵循一些要求/规范,官网有提供文档和说明:
- https://www.vagrantup.com/docs/boxes/base.html
- https://www.vagrantup.com/docs/virtualbox/boxes.html
- 制作自己第一个 vagrant box
- 如何制作一个vagrant的base box
为啥用vagrant:https://www.oschina.net/translate/get-vagrant-up-and-running-in-no-time
在本地开发爽。用Vagrant快,简单,并可帮助你同时管理多个开发环境。
想象一下,你正在和据说15人的团队开发一个应用程序。这个程序真是狂棒!它使用Laravel的PHP框架,Redis和Memcached,ImageMagick和GD的PHP模块,curl,MySQL和PostgreSQL, 甚至MongoDB。 另外,Laravel明确依赖PHP版本5.3.7或更高版本,以及mcrypt的PHP扩展。
理想情况下,你会希望团队所有的15人在开发这个应用程序时,都是相同的开发环境。 但是不是所有的开发团队,都有系统管理的专家或者培养一个系统管理。获得相同设置的开发环境可能是一个非常艰巨的任务。 最重要的是,有些人使用的是Mac,而其他人则使用Linux或Windows。在它之前,开发人员会纠结在无尽的配置中,用电脑扔墙而筋疲力尽。
其实,步骤不多也不是很复杂,但是总会遇到一些特定环境的问题。下来是我制作的过程(Vagrant1.9+VirutalBox5.1+Centos6.9_i686)。
还有其他的优点:
- 还有配置化后,就可以可以进行版本管理。
- 分享。
下载安装系统
- 下载安装 VirtualBox :https://www.virtualbox.org/
- 下载安装 Vagrant :http://www.vagrantup.com/
- 操作系统 bin-DVD1.iso
不要安装LiveDVD的版本会把桌面也安装了,系统大几个G,其实用不到图形界面。用DVD的安装没有mininal的系统。
系统网络
安装VirutalBox5.1完后,Windows宿主机多了一个 VirtualBox Host-Only Ethernet Adapter 本地网卡,可以先在VirtualBox菜单 [管理-全局设定-网络] 里删除Host-Only Network网卡。
在安装之前需要先了解VirtualBox的网卡的配置,它的选项/含义和VmWare不太一致,需要单独学习了解下:
- 未指定: 相当于虚拟机没有插上网线的情况,此时与宿主机也连不通。
- 网络地址转换(NAT):通过NAT转换仅通过HOST主机访问网络,但是访问不到虚拟机(单向的)。需要通过端口转发功能HOST主机才能连接到虚拟机。单机上网最简单的方式。
- NAT网络
- 桥接网卡:虚拟机桥接到宿主机的一块网卡,直接与外部交换数据包,像是不经过宿主机一样。虚拟机能够设置一个独立的IP,所有网络功能完全和在网络中的真实机器一样(通过路由器来自动分配IP地址)。
- 内部网络:只虚拟机互通的网络。可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。
- 仅主机(Host-Only)网络:内部网络和桥接模式的混合,需要一个虚拟的网卡来配合。此时虚拟机可以和宿主机及宿主机所在的局域网通信,无法与外网通信。看F1帮助文档里面的,感觉和内部网络差不多,由于HOST主机 多了个网卡可以和HOST通信(通过Host Only网卡的IP),但虚拟机需要上网的话还需要再多配置一个桥接网络。
- 通用驱动
网上的一些资料:
- http://www.live-in.org/archives/789.html
- https://liuliqiang.info/post/29/ 非常详细
- https://www.douban.com/group/topic/15558388/ 和上一篇一样不知道谁抄谁,都看过就列在这里了
- VirtualBox: How to set up networking so both host and guest can access internet and talk to each other NAT / host only; use a Bridge Adapter 桥接
- Can’t ping guest OS in VirtualBox, but guests can ping host
配置
安装系统后默认eth0的网卡是没有启用的。修改网络配置然后重启网络。
如果网卡启动失败,用 ifconfig -a 看看设备是不是eth0。
接下来就是连接系统,然后配置Vagrant了。
为了后面的配置更加顺利,需要先把网络调通。在虚拟机的黑窗口操作是非常不方便的,添加端口转发然后本地用Putty/git-ssh等工具登录系统操作 SSH to Vagrant box in Windows? 。
接下来按照官网的说明进行配置:
- https://www.vagrantup.com/docs/boxes/base.html#quot-vagrant-quot-user
- https://www.vagrantup.com/docs/virtualbox/boxes.html#to-install-via-the-command-line-
- https://www.vagrantup.com/docs/virtualbox/boxes.html#virtual-machine
- https://www.vagrantup.com/docs/boxes/base.html#testing-the-box
步骤如下:
- 增加帐号密码均为 vagrant ,root密码也是 vagrant
- 配置sudo
- 配置无密钥登录使用密钥进行登录,同时把insecure的 vagrant的公钥 写入authorized_key
- 安装tools
- 清理yum缓冲,tmp目录下的内容,以及其他的一些临时文件
- 删掉、禁用虚拟机多余的设备
- 第一个网卡设置为NAT(用于vagrant的端口转发,并且这网卡要boot启动啊!) boxes.html#virtual-machine
- 打包,进入到虚拟机存储的目录(可以通过【设置-高级】的备份位置确定),然后执行
vagrant package --base centos6_i386
1 2 3 4 5 6 7 8 9 10 11 |
|
这里单独把安装tools执行的命令抽取出来:
- https://superuser.com/questions/412527/modprobe-vboxguest-failed 关键
- https://www.if-not-true-then-false.com/2010/install-virtualbox-guest-additions-on-fedora-centos-red-hat-rhel/comment-page-5/#comment-121648
1 2 3 4 |
|
事情总归不会一帆风顺的,依赖需要进行处理,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
安装配置(jdk/tomcat/mysql/pgsql/redis/…)好后,打包前清理缓冲:
1 2 3 4 |
|
然后打开windows的命令行,进入到虚拟机磁盘文件目录打包:
1 2 3 4 5 |
|
搭建开发环境
- 使用Vagrant在Windows下部署开发环境 非常好的一篇文章
- Automated virtual test-environments with Vagrant and Puppet
- 手工下载和导入 vagrant 镜像 现在下载很快啊,尽管如此也是能学习一种新的备用方法。
实际操作命令
重装系统后再绑定
重新安装后,vagrant和virtualbox在C盘用户目录的文件没有保存。再次启动发现vagrant是去重新启动一个新的虚拟机。
虚拟机嘛,总还是台机器,不会和对待docker那样操作。很多的文件、配置等等还是存储在虚拟机里面的。现在vagrant和virtualbox脱钩了。我们要做的就是把他们再绑定起来:
- 首先启动直接双击box,启动虚拟机。会在用户目录.VirtualBox下面产生/修改VirtualBox.xml,打开文件找到当前虚拟机MachineEntry对应的uuid。
- 打开原vagrant的目录下 .vagrant\machines\default\virtualbox 的id文件。内容替换为virtualbox的最新的id。
- 上面的步骤已经把两者关联起来了,但是无密钥登录不行了。需要重新把github上的内容写入到虚拟机用户vagrant的authorzied_key里面。
至此,就可以用 vagrant up 启动虚拟机了。还原绑定成功。
其他
vagrant + virtualbox + nginx cache
- https://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour
- https://github.com/mitchellh/vagrant/issues/351#issuecomment-1339640
vagrant + java deveploe env
- https://github.com/rob-murray/vagrant-javadev-box/blob/master/Vagrantfile 案例
- https://github.com/rob-murray/vagrant-javadev-box/blob/master/puppet/manifests/base.pp
- https://github.com/spanneberg/vagrant-puppet-demo/blob/master/files/my.cnf
- https://blog.codecentric.de/en/2012/02/automated-virtual-test-environments-with-vagrant-and-puppet/
git
–END