造云记(2):Chef一键部署与Railsbox示例
Published:
10 Aug 2013
背景
在造云记(1):从零打造一个私人云(提纲)中,我们主要介绍了本系列涉及到的核心技术。
现在,从一个一个具体技术难题开始上手实践。先从自动部署谈起。自动部署是一件看似容易,但是大坑无数的事情。幸好,现在我们有了来自ops社区,久经考验的各项利器。今天侧重介绍以下知识点:
各自扮演角色
它们在一键部署中,分别承担以下角色:
- vagrant:虚拟机本地测试,你也可以将其换成linode vps或者阿里云、ucloud等空白的真实云主机进行测试
- chef-solo:chef的三种部署方式之一,在这里,介绍的是最常用的方式
- capistrano:大家都比较熟悉,将Ruby、Python应用分发到你要分发的机器(3.0开始对非Ruby应用支持大幅度改善)
chef-solo项目最佳实践
Ruby社区各位开发者非常熟悉:
- gem:Ruby的第三方包管理机制,Gemfile文件用来描述一个项目引用的第三方包
- bundle:通过bundle install来安装项目所依赖的第三方包
- capistrano:通过cap来分发Ruby应用
那么,在云端管理的时候,是否也可以参考这种强大而友好的机制呢?有,这就是chef对应的cookbook的内容。它们对应的关系分别如下:
- cookbook :一个完整的chef-solo项目包括很多cookbook。它对应gem机制,即使用bersk来描述一台云端服务器所需要安装的第三方组件,在这里,nginx、mysql等等,就是如同gem一样,直接可以看做一台服务器的第三方库。一个典型的cookbook由四部分构成。
- berks:它就是类似于bundle机制,拿来管理第三方的cookbook,用法也如同bundle一样:berks install -p cookbooks/
- knife solo:它就是类似于cap机制一样,用来自动化部署服务器。比如,对服务器执行类似于安装nginx、重启服务器等操作。
比如,来看一个典型的berks文件:
site :opscode
cookbook 'apt'
cookbook 'build-essential'
cookbook 'user:cookbook 'rvm', :git => "https://github.com/fnichol/chef-rvm"
cookbook 'nginx'
cookbook 'postgresql'
大家是不是特别亲切?跟gemfile文件基本一致,只是,在上述示范中,我们使用了:
site:opscode
来代替:source 'https://rubygems.org'
cookbook 'postgresql'
来代替:gem 'pg'
同样的,在berks中,我们照样可以使用隐私的git来写cookbook。如上述例子中的:
cookbook 'rvm', :git => "https://github.com/fnichol/chef-rvm"
配置管理生态圈
它们的关系图如下:
大图点击查看:http://d.pr/i/wBuz
Railsbox项目及其示范
整合以上知识点,我将其汇总在Railsbox项目中。它是一个我写的整合多个cookbook与社区最佳实践的部署项目,能够实现在linode vps、阿里云、ucloud与vagrant上的一键部署。启动一台空白的云主机,到全部部署Rails应用完毕,全程自动化。同样,也可以将它修改为部署任何一个其他非Ruby应用。
具体使用流程,参考Railsbox示例项目说明文档:
声明: 本文采用 CC BY-NC-ND 4.0授权。微信号Mindnote,欢迎订阅。扫码请点击