先简单介绍下Capistrano
Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用PHP开发的。Capistran最初是用来应用于bash指令行。现在Ruby on Rails框架的用于也可以使用它的新特性,例如,对当前web应用部署改变使其更新版本,或者使其回滚到之前的旧版本。
如何使用
Capistrano最新版本是v3,但是v3暂时只支持git协议,如果想使用svn等其他协议可以用v2,所以下面主要是针对v2.
1.安装:
gem install capistrano(需要先安装ruby)
装完后会有两个工具脚本加入环境变量
1.cap 调用capistrano task
2.capify 初始化目录
2.初始化部署脚本
mkdir capProject cd capProject capify .
Capfile 部署脚本入口文件
config 配置目录
deploy.rb配置
https://github.com/capistrano/capistrano/wiki/2.x-Significant-Configuration-Variables
1.配置版本控制
使用git管理代码
set :scm, :git
使用svn管理代码
set :scm, :subversion
2.设置版本控制用户名密码
set :scm_username,’xx’
set :scm_password,’xx’
3.设置repository地址
set :repository, “https://xxxx.git“
4.设置web服务器地址 多个逗号分隔,注释掉:role app和:role db在php部署中不需要
role :web, “devhc.com”
多台服务器
role :web, “devhc.com”,”devhc1.com”
5.设置ssh密码(如果设置sshkey nopassword方式访问则不填写)
set :username,’xx’
set :password,’xx’
6.设置部署目标位置
set :deploy_to,”/var/www/#{application}”
这里是引用了application的名字,若application名称为blog,则部署位置为/var/www/blog
7.杂项设置(可选)
非ruby项目该值都设为false,不然会提示public文件夹不存在
set :normalize_asset_timestamps,false
设置需要共享的目录 默认是: %w(public/system log tmp/pids)
没有就设空
set :shared_children,%w()
如yii框架中assets和protected/runtime需要共享
set :shared_children, %w(assets protected/runtime protected/config)
保持最新release个数
set :keep_releases,5
设置current_path,即当前版本目录,其实是一个软连接,执行release中最新版本代码,如果是apache为服务器,则为其web目录,默认则为
deploy_path/current,如果使用默认的话需要改下apache配置指向这里
set current_path,’/var/www/xxx’
实例配置如下:
set :application, "xxx" set :repository, "https://xxxx.git" set :normalize_asset_timestamps,false set :deploy_to,"/var/www/#{application}" set :scm,:git set :username,'xx' set :password,'xx' set :use_sudo,true set :keep_releases,5 set :shared_children, %w(assets protected/runtime) role :web, "devhc.com"
部署脚本使用
cap deploy:setup
初始化目录 release,shared目录
cap deploy 执行部署
多环境部署
通常项目部署有sandbox,ready,production等环境,分别一一设置部署比较麻烦,通过capistrano就很方便解决这个问题。
1.使用Multistage Extension扩展
通过gem安装capistrano-ext扩展
mkdir config/deploy 新建stages配置目录
#deploy.rb中引入扩展和配置stages set :stages, %w(production sandbox) set :default_stage, "sandbox" require 'capistrano/ext/multistage'
#config/deploy/production.rb
role :web, "devhc.com" set :deploy_to, "/var/www/#{application}-production/"
#config/deploy/sandbox.rb
role :web, "sandbox.devhc.com" set :deploy_to, "/var/www/#{application}-sandbox/"
cap sandbox deploy #部署沙盒
cap production deploy #部署线上
- 不使用Multistage Extension实现多环境部署
set :application, 'example-website'
task :production do
role :web, “devhc.com”
set :deploy_to, “/var/www/#{application}-production/“
set :deploy_via, :remote_cache
end
task :sandbox do
role :web, “localhost”
set :deploy_to, “/var/www/#{application}-sandbox/“
set :deploy_via, :copy
end