2022年用Capistrano自动化部署Web应用 .pdf
《2022年用Capistrano自动化部署Web应用 .pdf》由会员分享,可在线阅读,更多相关《2022年用Capistrano自动化部署Web应用 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用 Capistrano 3自动化部署Web 应用如果你部署过Web 应用,你应该知道,很多时候并不是把源代码/war 包放上服务器就了事的。你得修改配置,修改数据库结构,重启服务器,重启后台进程 人是很容易犯错的,步骤一多,就会记不住。如果你部署的是大型Web 应用,几百台服务器各自负责不同的工作,那部署一次就能让你哭出来。有什么办法解决这个问题?自动化部署!计算机能够勤勤恳恳孜孜不倦地重复劳动,那为什么我们不把部署的任务交给它呢?于是乎,今天我就来讲讲怎么用Capistrano 3 来实现自动化部署。一、先决条件1.Ruby = 1.9 (Capistrano 的运行环境,并不要求你的We
2、b 项目是 Ruby 的)2.SSH Server(服务器端),采用公钥验证3.SSH Client (开发机端)4.SCM(Source Controll Management ,版本控制,推荐使用Git)5.如果使用Git,建议申请一个 或 的帐号二、安装Capistrano 3 并将项目纳入Capistrano 管理打开控制台( UNIX/Linux的 Terminal、Windows 用户可使用Git Bash),输入:$ gem install -v , 3.3? capistrano$ cd $project_root $ cap install 其中 $project_root
3、是你的项目的根。注:如果你从来没用过UNIX/Linux ,每行开头的那个$是不用你打的。它是命令行提示符,相当于 Windows 里的 C:。中间的 $xxx 是变量,类似于Windows 里的 %xxx% 。最后一条命令会帮你在项目的根下创建下述文件/目录结构:$project_root/ | |-Capfile | |-config/ | | | |-deploy.rb | | | |-deploy/ | | | |-production.rb | |-staging.rb | |-lib/ | |-capistrano/ | |-tasks/ Capfile 是一个胶水文件,用来导入各
4、种第三方库。这些第三方库往往已经定义好了各种任务,如数据库更新/回滚、远程控制台、等等等等。很多库也把任务整合进了部署/回滚流程(见下节)。config/deploy.rb 可以看成是主配置文件,所有在部署/回滚中需要自动执行的自定义任务都名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 可以挂在这里。虽然它其实是Ruby 脚本,但是它提供了非常简洁的DSL,使得不懂Ruby的程序员也可以看得懂、写得出部署脚本。config/de
5、ploy/*.rb是针对每个不同环境(见下节)的配置,这里主要配置一些服务器端的IP、登录用户名之类的东西。由于这些文件会被提交至SCM,所以非常不建议把敏感信息(如密码、 SSL 私钥等)写在里面。敏感写在哪里下面会说。也正是由于这样的理由,建议 SSH 使用公钥验证,而非用户名+密码的验证方式。lib/capistrano/tasks 文件夹给你存放自定义任务的脚本。这些脚本必须以.rake 结尾。三、快速上手我们来看看如何以最少的配置、最快的速度部署项目。1. 进入项目根目录$ cd /path/to/my_app 2. 把项目加入SCM(如果已经做过了,这一步可以省略。这里用Git,你
6、也可以用SVN )$ git init $ git add -all . $ git commit - m ,Initial commit?$ git remote add origin $ git push origin master 3. 把项目 Capistrano 化(如果已经做过了,直接跳过)$ cap install 4. 修改 config/deploy.rb 里的这几行:set :application, my_app # my_app 是你的项目名称,这决定部署的目录set :scm, :git # 如果你用SVN ,把:git 改成 :svn 就行set :repo_url
7、, # 你的 remote 仓库的 url set :deploy_to, /var/www/my_app # 默认部署到/var/www/my_app 目录5. 修改 config/deploy/staging.rb :注释掉下面这几行:# role :app, %# role :web, %# role :db, %根据实际服务器的IP/域名和用户名修改下面这一行:server , user: admin, roles: %wweb app db, my_variable: :my_value 6. 部署$ cap staging deploy 这一步可能会出现一些权限问题,请确保服务器端
8、的部署目录的上级目录存在,并且你配置的用户对该目录有完全权限,并且它的上级、上上级 目录至少具有读和执行权限。 通常 /var/www 是没有写权限的,你可以把它的权限改成drwxrwsrwt (3777)。改完权限后再次尝试这一步即可。四、远端的文件夹结构用 Capistrano 部署后,在服务器端会生成这样一个文件夹结构:$deploy_path/ | 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - |-revisions.
9、log | |-releases/ | |-xxxxxxxxx/ | |-yyyyyyyyy/ | |-shared/ | |-repo/ | |-current - releases/xxxxxxxxx/ 简要介绍一下几个文件/文件夹的作用: 1. releases 这个文件夹保存了你部署上去的历史版本。每个版本的文件夹的名称都是一个时间戳。2. shared 这个文件夹保存了所有各版本共享的文件/文件夹,尤其是linked_files 、linked_dirs 指定的文件 /文件夹(见后)3. repo 这是一个git 仓库(如果你用git 作为 SCM 的话)4. current 这是一
10、个symlink ( Windows 用户可把它想象成快捷方式),它指向当前运行的版本。你可以把它看成服务器端的项目的根目录。5. revisions.log 这里记录了你所有的部署记录。五、 Capistrano 3 基本概念Capistrano 3 每次部署都会让服务器去SCM 上拉取最新版本(注意不是本地版本,更不是本地尚未提交至SCM 的文件),你可以通过下述指令开始部署过程:$ cd $project_root $ cap $env deploy 其中 $env 是你要部署的环境,通常会有production 和 staging 两个环境,偶尔也可能需要部署 development
11、环境。注意:如果你是Rails 程序员,不要把Capistrano 的 env和 Rails 的 env 搞混了。 Capistrano的 env 只包含服务器的IP/域名、登录用户名及任意多个环境变量。Rails 的 env 指的是 Rails 的运行环境, 包含数据库连接配置、SMTP 服务器配置、 是否缓存页面、是否serve静态文件等。你可以在 Capistrano 的 staging 环境下部署Rails 的 production 环境(大家都这么做),也可以在 Capistrano 的 production 环境下部署Rails 的 development 环境(没人这么做,后果自
12、负)。你要做的只是在Capistrano 的对应配置文件里设置RAILS_ENV环境变量而已。Production 环境指正式的生产环境,也就是你的目标用户真正访问的环境。Staging 环境指的是一套和生产环境相仿的环境,用来做压力测试等。Development 环境是开发环境,通常不需要通过Capistrano 部署。每次部署 Capistrano 都会经历这样一个状态变迁的过程:deploy:starting (部署中)deploy:started(部署已开始)deploy:updating (正在更新服务器端文件)名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
13、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - deploy:updated(服务器端文件更新完毕)deploy:publishing (服务器端正在切换当前版本)deploy:published (服务器端当前版本已切换至最新版本)deploy:finishing (正在处理一些收尾工作)deploy:finished (一切就绪)所有这些状态的前后都可以添加自定义的任务,例如在 updated之后执行 css/js的编译 /混淆,published 之后重启app 服务器和后台任务等。所有这些任
14、务,包括自定义任务,只要有一个失败,则部署失败。注意:部署失败后并不会自动回滚!Capistrano 默认会在服务器端保留 5 个部署的版本,以便回滚。你可以通过下面这条命令开始回滚流程:$ cap $env rollback 这条指令会让服务器端的APP 回滚一个版本。回滚也有一个状态变迁的过程:deploy:starting (部署尚未开始)deploy:started(部署已开始)deploy:reverting (正在更新服务器端文件)deploy:reverted(服务器端文件更新完毕)deploy:publishing (服务器端正在切换当前版本)deploy:published
15、(服务器端当前版本已切换至最新版本)deploy:finishing_rollback (正在处理一些收尾工作)deploy:finished (一切就绪)和部署一样,所有这些状态的前后也可以添加自定义任务,例如在reverted 之后停掉服务器,回滚数据库结构,在published 之后把服务器再启动起来等。值得一提的是, 所有 Capistrano 脚本都 “ 跑在本地 ” , 这意味着你没有必要每次修改Capistrano的文件都往SCM 上提交一个新版本。六、 Capistrano 中的角色( Role)Capistrano 有一个 “ 角色(Role)” 的概念。 一个角色某台服务器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年用Capistrano自动化部署Web应用 2022 年用 Capistrano 自动化 部署 Web 应用
限制150内