Linux-使用Vagrant+puppet+VMbox+apache进行虚拟化开发

我们知道,系统的生产环境和运行时环境可能有很大差别,例如bug的级别神码的,但是更主要的是对于一个系统的配置需求,比如在macOS上开发的系统,配置自然是mac那套filesystem,但是运行又要在比如linux ubuntu上运行,这是如果团队多人协作,或是个人有几个不同的开发环境,那么Vagrant就是个不错的统一配置的工具:

Vagrant通过VMbox产生一个虚拟机,然后里面的系统比如装上linux ubuntu lucid32版本,那么虚拟机里就会产生一个和宿主机里一样的文件目录,默认/vagrant, 然后你在你的macOS里的开发,更新文件,虚拟机就会自动更新/vagrant里的文件,这样你的服务器在虚拟机里运行,配置为linux系统的各种配置文件,而开发则是在macOS里,实现了,开发和运行分离,生产和部署一致的优势。使得coder的精力主要用于代码的开发,而不是部署这些麻烦事。

具体一个简单的vagrant lucid32 运行apache2的虚拟机要进行一下几步:

1. download vmbox and install http://www.virtualbox.org/wiki/Downloads
2. download the virtual system envioriment lucid32 http://files.vagrantup.com/lucid32.box
3. install ruby and rubygems
4. install vagrant : gem install vagrant
5. start your first vagrant box by:
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
#进入项目目录
cd /var/www/test
#初始化,生成配置文件Vagrantfile
vagrant init lucid32
#生成项目虚拟机
vagrant up
6. 访问虚拟机
vagrant ssh
#查看项目目录,会发现与宿主机的当前目录内容一致,/vagrant目录默认和本地创建的目录内容一致;
ls /vagrant

在虚拟机里配置apache,mysql,php,python等服务,见:Apache – Ubuntu中文

这时运行 wget -qO- 127.0.0.1 会返回apache根目录的内容;但是为了在宿主机访问,我们需要进行端口映射和privision

7. 映射端口和privison配置apache或其他服务器:可以选择 Chef & Puppet
gem install chef –no-ri –no-rdoc
gem install puppet –no-ri –no-rdoc
然后修改Vagrantfile. 当然所用的服务,虚拟机里要先装好,例如mysql和apache
修改了Vagrantfile后要通过vagrant reload 重启虚拟机;

8. 如果用puppet,那么要生成一个manifest/default.pp文件,声明需要的服务和模块

9. 通过vagrant ssh进入到虚拟机,更改apache2的默认目录为 /vagrant (这是虚拟机和宿主机的共享目录),重启apache

10. 在宿主机里访问127.0.0.1:port 即可访问虚拟机里的运行的系统

11.最后一步不要忘了我们使用vagranta+VMbox的初衷,就是为了部署和分发方便,可以通过
vagrant package生成package.box文件
下次就可以直接用这个box来初始化虚拟机了,然后就什么都克隆了。

后记:这里特别提醒的几点,也许lz是菜鸟,不知到puppet是什么,一直没有安装这个东西,这样默认生成的lucid32虚拟机是可以启动的,一旦修改了Vagrantfile加入apache服务后就无法重启了,当然也就访问不了。因为这里用到了puppet,一定要先在宿主机里安装。其次一定要先装好ruby和rubygems

附上常用的vagranta 命令:

1. vagrant inita lucid32初始化   vagrant destroy 注销虚拟机

2. vagrant up启动   <=> vagrant halt停止

3. vagrant suspend 暂停   vagrant resume 恢复

4. vagrant status, 查看当前虚拟机的状态

我的test的目录的代码:vagrant-vmbox-test.tar

发表评论

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