源:
http://blog.csdn.net/largetalk/article/details/6743090
setp 1:
gem install capistrano
gem install capistrano-ext
setp 2: 在项目根目录执行
capify .
这将在根目录创建Capfile 和 config目录下创建deploy.rb 文件
setp 3: 编辑deploy.rb
require 'bundler/capistrano' #添加之后部署时会调用bundle install, 如果不需要就可以注释掉
require "capistrano/ext/multistage" #多stage部署所需
set :stages, %w(development production)
set :default_stage, "development"
set :application, "crm_app_end" #应用名称
set :repository, "https://chang.abc.com/svn/engineering/vwaccount/mydeploy/trunk"
set :keep_releases, 5 #只保留5个备份
set :deploy_to, "/var/www/#{application}" #部署到远程机器的路径
set :user, "user1" #登录部署机器的用户名
set :password, "user1" #登录部署机器的密码, 如果不设部署时需要输入密码
default_run_options[:pty] = true #pty: 伪登录设备
#default_run_options[:shell] = false #Disable sh wrapping
set :use_sudo, true #执行的命令中含有sudo, 如果设为false, 用户所有操作都有权限
set :runner, "user2" #以user2用户启动服务
set :svn_username, "xxxx"
set :scm, :subversion #
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
#set :deploy_via, :copy #如果SCM设为空, 也可通过直接copy本地repo部署
#set :domain, "crm.abc.com" #custom define
role :web, "192.168.0.13", "192.168.0.117" # Your HTTP server, Apache/etc
role :app, "192.168.0.13", "192.168.0.117" # This may be the same as your `Web` server
role :db, "192.168.0.13", :primary => true # This is where Rails migrations will run
#role :db, "your slave db-server here"
#
namespace :deploy do
desc "remove and destory this app"
task :destory, :roles => :app do
run "cd #{deploy_to}/../ && #{try_sudo} mv #{application} /tmp/#{application}_#{Time.now.strftime('%Y%d%m%H%M%S')}" #try_sudo 以sudo权限执行命令
end
after "deploy:update", "deploy:shared:setup" #after, before 表示在特定操作之后或之前执行其他任务
namespace :shared do
desc "setup shared folder symblink"
task :setup do
run "cd #{deploy_to}/current; rm -rf shared; ln -s #{shared_path} ."
end
end
after "deploy:setup", "deploy:setup_chown"
desc "change owner from root to user1"
task :setup_chown do
run "cd #{deploy_to}/../ && #{try_sudo} chown -R #{user}:#{user} #{application}"
end
task :start do
run "cd #{deploy_to}/current && ./crmd.sh start"
#try_sudo "cd #{deploy_to}/current && ./restart.sh"
end
task :stop do
run "cd #{deploy_to}/current && ./crmd.sh stop"
end
task :restart do
run "cd #{deploy_to}/current && ./crmd.sh restart"
end
end
setup 4: 在项目根目录执行
cap deploy:setup #建立部署路径
cap deploy:update #部署
cap deploy:start #启动服务
cap deploy:stop #停止服务
cap deploy:restart #重启服务
setup 5: 如果有多个stage要部署,则在config下创建deploy文件夹, 在该文件夹下有各stages文件, 文件名和 set :stages, %w(development production) 对应, 如development.rb production.rb,在各文件中设置相应变量即可, 然后可用 cap production deploy:... 来执行对应production的操作
其实capistrano最终都是转变成shell命令来完成任务的, 所以纯粹用shell脚本也可以完成相应功能, 但相对于晦涩的shell命令, capistrano明显更好懂, 并且它有很多默认操作非常好用, 比如setup, update, 如果自己用shell来实现非常麻烦, capistrano允许在脚本中嵌入shell, 比如上面的start, restart等, 这非常方便, 很多capistrano做不到的就可以用shell去搞定了
这事最近又有了新进展,我在一个django项目中用capistrano来发布,虽然python下也有一个叫fabric的东西,但那个还不熟,先用这个,有时间学习一下fabric再说
require 'bundler/capistrano' #添加之后部署时会调用bundle install, 如果不需要就可以注释掉
#require "capistrano/ext/multistage" #多stage部署所需
set :application, "app" #应用名称
set :scm, :subversion
set :repository, "svn://0.0.0.0/trunk/src"
set :keep_releases, 5 #只保留5个备份
set :deploy_to, "/var/www/#{application}" #部署到远程机器的路径
set :user, "xxx" #登录部署机器的用户名
set :password, "xxxxx" #登录部署机器的密码, 如果不设部署时需要输入密码
default_run_options[:pty] = true #pty: 伪登录设备
#default_run_options[:shell] = false #Disable sh wrapping
#set :use_sudo, true #执行的命令中含有sudo, 如果设为false, 用户所有操作都有权限
set :runner, "xxxx" #以用户启动服务
#set :deploy_via, :copy #如果SCM设为空, 也可通过直接copy本地repo部署
role :web, "172.16.120.222"#, "192.168.0.117" # Your HTTP server, Apache/etc
role :app, "172.16.120.222"#, "192.168.0.117" # This may be the same as your `Web` server
role :db, "172.16.120.222", :primary => true # This is where Rails migrations will run
#role :db, "your slave db-server here"
#
namespace :deploy do
desc "remove and destory this app"
task :destory, :roles => :app do
run "cd #{deploy_to}/../ && #{try_sudo} mv #{application} /tmp/#{application}_#{Time.now.strftime('%Y%d%m%H%M%S')}" #try_sudo 以sudo权限执行命令
end
# after "deploy:setup", "deploy:setting_link"
# desc "symlink for settings.py"
# task :setting_link do
# run "cd #{deploy_to}; #{try_sudo} touch current; #{try_sudo} ln -s current releases/#{application}"
# end
after "deploy:update", "deploy:shared:setup" #after, before 表示在特定操作之后或之前执行其他任务
namespace :shared do
desc "setup shared folder symblink"
task :setup do
run "cd #{deploy_to}/current; ln -s #{shared_path} x"
run "cd #{deploy_to}/current; rm -rf log; ln -s #{shared_path}/log log"
run "cd #{deploy_to}/releases; rm -f #{application} && __realversion__=`realpath ../current` && ln -s $__realversion__ #{application}"
end
end
after "deploy:setup", "deploy:setup_chown"
desc "change owner from root to user1"
task :setup_chown do
run "cd #{deploy_to}/../ && #{try_sudo} chown -R #{user}:#{user} #{application}"
end
task :default do
transaction do
update_code
symlink
end
end
task :update_code, :except => { :no_release => true } do
on_rollback { run "rm -rf #{release_path}; true" }
strategy.deploy!
end
before "deploy:rollback", "deploy:clean_adaptive"
task :clean_adaptive do
run "cd #{deploy_to}/releases; rm -f #{application}"
end
after "deploy:rollback", "deploy:rollback_set"
task :rollback_set do
run "cd #{deploy_to}/releases; rm -f #{application} && __realversion__=`realpath ../current` && ln -s $__realversion__ #{application}"
end
task :start do
run "cd #{deploy_to}/current && ./adaptive_pool.sh start"
run "cd #{deploy_to}/current && ./adaptive_exam.sh start"
end
task :stop do
run "cd #{deploy_to}/current && ./adaptive_pool.sh stop"
run "cd #{deploy_to}/current && ./adaptive_exam.sh stop"
end
task :restart do
run "cd #{deploy_to}/current && ./adaptive_pool.sh restart"
run "cd #{deploy_to}/current && ./adaptive_exam.sh restart"
end
end
分享到:
相关推荐
在IT行业中,自动化部署是提高效率的关键之一,而Ansistrano就是这样一个工具,它借鉴了Ruby的Capistrano工具的风格,为Ansible提供了一种简单、高效的部署解决方案。尤其适用于Python、PHP、Ruby等应用的部署场景。...
Capistrano 3 是一个流行的自动化部署工具,它可以帮助开发者将 Web 应用部署到生产环境中。 一、先决条件 在使用 Capistrano 3 之前,需要满足以下几个条件: * Ruby >= 1.9:Capistrano 3 的运行环境,需要 ...
使用 Capistrano 和 Composer 的 WordPress 部署机制将 repo 克隆到本地机器更改 config/deploy/production.rb 和 config/deploy/staging.rb 文件以匹配您的服务器凭据(IP 地址、用户、角色、路径) 调整 composer....
使用Laravel应用的零停机部署脚本。 免责声明:我不是Capistrano专家,也不是服务器管理员。 我确实了解足够多,可以采取以下策略对我有效。 如果遇到问题,请随时提出问题。 我会尽力帮助您,但不能做出任何承诺:)...
Craft.io部署由 Bluegg 使用 Capistrano 3 部署 Craft 网站的框架。 特征 使用 Capistrano 从您选择的 Git 服务器(例如 Bitbucket 或 Github)...Craft Deploy 包含一个执行初始设置的 bash 脚本: 从 Pixel & Ton
Ansistrano ansistrano...Ansistrano历史记录项目名称Ansistrano匿名使用统计谁在使用Ansistrano? 需求安装更新功能主要工作流程角色变量部署回滚钩:自定义任务自定义任务中的变量修剪旧版本示例Playbook示例项目它们
安装完成后,Capistrano为您提供了一个cap工具,可从命令行轻松地执行部署。 $ cd my-capistrano-enabled-project$ cap production deploy当您运行cap ,Capistrano通过SSH忠实地连接到您的服务器,并执行部署项目...
使用的部署脚本实现基于 yii php 的应用程序的简单构建自动化。 卡皮斯特拉诺 用 Ruby 编写的远程服务器自动化和部署工具。 特征 • 将构建直接从git 部署到您的服务器。 • 定义您自己的git 分支进行部署,默认为...
例如,一个Ansible role可能负责设置服务器环境,另一个处理代码部署,还有一个可能用于数据库迁移。 在Ansible YAML剧本中,我们可以定义任务列表(tasks)、 handlers(在某些事件触发时运行)和预/后置钩子...
如文件名所示`capistrano-capistrano-80aa0a1`,这个版本号可能是Capistrano的一个特定提交,表示特定的特性和修复。 总结来说,Capistrano是通过Ruby和Rake实现的高效、可扩展的部署解决方案,结合SSH确保了远程...
LISSA 部署使用 Capistrano 3 部署 您可以使用它来部署服务器或配备的 Vagrant box。 要求 Ruby 1.9.3 或更新版本 1.6 或更新版本 安装 克隆存储库后执行: bundle install --path=vendor 用法 您可以通过复制 ...
即使文件仅由人工管理,仍然有几个好处,包括将阶段/角色配置集中在一个文件中,不鼓励每个阶段的逻辑,以在回调之前/之后正确挂钩,以及简化配置重用。 有关多阶段部署的总体思路的更多信息,请参阅的。安装...
Ansible-deploy.zip,在Capistrano Styleansistrano中部署脚本应用程序(如php、python、ruby等)的Ansible角色,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
受到Capistrano常规的启发。 该脚本仍处于测试阶段! 请非常小心地使用它!用法将文件复制到服务器上的项目文件夹中。 运行chmod +x deploy.sh setup.sh来设置执行权限。 运行./setup.sh创建初始文件夹和文件。 将....
Capistrano是一个强大的自动化部署工具,主要被Ruby社区广泛使用,尤其在Rails应用的部署过程中。这个名为"capistrano-recipes"的项目提供了一套自定义的Capistrano任务和配置,帮助开发者更高效、更顺畅地进行远程...
5. **版本管理**:`deploy`命令允许你在每次部署时创建一个新版本,这有助于跟踪代码更改并便于问题排查。如果发现新版本存在问题,可以轻松地回滚到前一稳定版本。 6. **错误处理和日志**:在部署过程中,务必确保...
创建一个shell脚本,包含所有必要的Post-Deploy Actions,然后在部署后执行这个脚本。 4. Laravel Forge: Laravel官方推荐的托管和部署平台Forge,提供了丰富的预设操作,可以轻松定制部署流程,包括Post-Deploy...
卡皮斯特拉诺神Capistrano3 神这是一个 capistrano v3 插件,用于部署和编译您的 .god.erb 文件。 它将在 config/god/#{role} 中寻找脚本,编译它们并将它们部署到 God_deploy_dir公约您可以通过set :god_roles, [:...
建造gem build capistrano-s3copy-awscli.gemspecgem install --local capistrano-s3copy-awscli-[version].gem用法在您的deploy.rb文件中,我们需要告诉Capistrano采用我们的新策略: require 'capistrano-s3copy-...
部署脚本概述deploy-scripts是Shell脚本的集合,可自动执行项目的打包和部署。 它的工作原理与capistrano类似,但依赖性较小。 除了您要部署的项目的构建依赖项之外,它仅需要以下依赖项: - git # Currently only ...