Capistrano是一个ruby写的远程服务器自动化和部署工具。
虽然我们可以直接连上服务器操作部署,甚至可以写脚本自动来做,但是比起自动化工具来说,有以下缺点:
- 多台服务器任务量巨大。
- 手动操作的话,需要连上服务器手动执行,步骤烦琐,容易操作错误和忘记事项。
- 写脚本自动操作不能重用到其他项目里面去。
用了自动化工具,可能第一次配置比较复杂,但是配置好了之后,发布工作就简单得只需要执行一个命令,轻松愉快。 它也有学习复杂,因为有抽象出现问题难以找到原因,造成额外心智负担的问题, 这个要开发者根据项目大小和类型来做权衡。
看了官方文档,wiki,看了一天都没有看出门道,后来看官方网站上面的文档才慢慢弄懂。
Capistrano的原理是这样:
- 需要部署的服务器根据角色(role)区分: 比如有app,db,web,然后每个角色可以有多台服务器。
- 针对不同角色,设置各类的任务,设置执行一些命令。
- 可以根据阶段设置不同的stage,比如staging/production,staging用来本地测试环境的部署,production用来进行生产环境的部署。
- 默认的一套发布流程包括了检查服务器环境,更新代码,初始化,上线等各种过程。
- 每个过程都提供了钩子,把任务链接到钩子上面,就能够保证部署过程按照期待的状况进行。
弄懂如何用cap比较麻烦,我整理了一下如何学习的资料:
- 首先是去看官方文档,对于基础概念,有一定的了解。
- 一定要实际部署一下,可以用本地环境测试,repo_url设置成本地,比如”user@localhost:/home/user/testapp”。
- 弄清楚发布到服务器上面的文件架构。本地测试部署一次就清楚概念了。
- 如果需要自动部署rails,可看别人整理的一份详细文档。
然后学习一些原理性质的资料:
- 弄清楚发布过程和逻辑。
- 如何在服务器上面执行代码是用SSHKit库,需要看一遍文档。
- 看一遍用到的cap相关Gem,包括capistrano, capistrano-bundle, capistrano-rvm, capistrano-rails里面rake是怎么执行的,弄清楚原理。