[草稿] capistrano的原理
访问量: 3136
裸代码: 没有数据库的配置文件, 没有服务器相关的配置文件, 也没有压缩各种css/js , 一般都是从git上直接clone下来的代码.
传统的部署步骤:
1. ssh 到服务器. 2. git pull . 3. restart command ...
坏处是: 无法回滚, 每次都人肉, 特别麻烦. (虽然上面3个步骤看似很少, 但是需要一直盯着(比如, ssh 需要10秒, git pull 需要20秒, restart 也需要人肉输入, 这些都是时间上的损耗, 而且人肉做重复性的事情, 无趣, 容易出错. )
合理的部署是:
编写好 一个配置文件之后, 运行代码: $ cap deploy (一个命令) , 之后的所有事情, 都不用人参与了.
结构:
1. 有三个角色: 部署人员的机器, 目标服务器, 代码服务器(GIT)
( 见譞的本本上的图 )
每次部署, 都要做的事情:
1. SSH 到目标服务器
2. 把最新的代码,上传到目标服务器上. 这时候的代码是裸代码( 不能立刻部署, 因为很多配置文件都没有)
我们不能把配置文件也放到git 里面, 比如: config/database.yml , 每个人的数据库的 root , 密码都不一样.
以及其他的东东(上传文件夹)
原理: 每次部署, 都要用一个文件夹. (方便回滚)
回滚的方式有几种:
1) code roll back. (git checkout ... ) 这样不好,很多时候我们无法保证代码是没有被修改的. 被修改之后, checkout .. .会涉及到 代码合并. 这个情况, 在某些 紧急 BUG 出现时, 会特别明显.
2) 每个release 都用一个文件夹( 里面包含了完整的项目代码, 包括裸代码, 和 各种配置文件) . 比如: 201506, 201505 (时间戳命名) ,然后, 有一个特殊的 文件夹(softlink, 叫 current ) web服务器 一直使用这个 current 文件夹. (不需要每次都改nginx... thin (rails server) 的配置文件) , 只需要把 current 这个softlink , 指向不同的 release 文件夹就可以了.
所以, capistrano部署下的 文件结构是:
/opt/rails_app: current -> /opt/app/happystock_web/releases/20150518030114/ releases/ 20150210022441 20150210131018 20150228032307 20150304110004 20150310020737 20150320071854 20150505033300 20150210025432 20150210132602 20150228113310 20150305014737 20150310102403 20150320082640 20150507030343 20150210082413 20150227094142 20150304104119 20150310010954 20150319015536 20150504022043 shared/ assets config files log pids public system ( shared 中所保存的内容, 以及部分目录结构, 是由 config/deploy.rb 这个配置文件决定的 )
3. 准备启动服务器:
1. 安装各种新增的rubygem,
2. 做必要的数据库迁移.
3. 配置各种文件.
4. 修改上传文件夹的soft link.
5. 其他,每次使用裸代码做部署的时候,都要人肉做的事情. (修改保存日志的路径, 修改 rails server的配置, )
6. 编译,压缩 js/ css
4. 重启 服务器. ( $ nginx -s reload, $ kill -9 xxx , $ thin start -C config/thin.yml ... )
$ cap deploy:setup # 建立需要的各种文件夹
$ cap deploy # 部署