使用Capistrano向EC2部署Django代码
2012-07-19 17:46
441 查看
Capistrano是一种在多台服务器上运行脚本的开源工具,它能自动完成多台服务器上新版本代码的同步更新,包括数据库的改变,主要用于部署web应用。Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用Django开发的。
Capistrano的安装
为项目使用Capistrano
接下来就是配置deploy.rb文件。(目前capistrano只支持SSH访问远端服务器,不支持Telnet和FTP方式)
* 这里使用了multistage功能,配置development,staging和production三个场景。各个场景的具体设置放在config/deploy/下面的development.rb, staging.rb, production.rb里面
* deploy.rb
* deploy.rb
* production.rb
配置完了,可以一步一步做部署测试,这样方便查错。直到所有的测试通过,就可以启动整个部署流程。cap deploy
为了更好的使用capistrano提供的after,before来定制自己部署task,需要了解执行cap deploy之后都有按顺序执行了哪几个具体task。
然后就是定制task了,比如可以对Django的manage.py的很多常用参数,或者其他需要的admin操作封装成task,从而可以在指定的多个server上执行同样的管理命令。
比如:migrate, update_cache_all, initialize_db等.
到此为止,整个部署的配置过程结束。
ps: Capistrano高级用法
Capistrano的安装
sudo gem install capistrano
为项目使用Capistrano
#进入项目的根目录 $ cd sample #capification $ capify . #这个命令执行完会在当前目录下产生两个文件。 #Capfile:这个是capistrano需要的一个主文件,就像make命令自动加载Makefile一样,capistrano默认自动寻找和加载该文件,该文件主要用于加载config/deploy.rb,一般不用修改该文件 # $ cat Capfile load 'deploy' # Uncomment if you are using Rails' asset pipeline # load 'deploy/assets' Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } load 'config/deploy' # remove this line to skip loading any of the default tasks #config/deploy.rb:这个是主要的配置文件,所有的跟部署相关的信息都在该文件里进行定制
接下来就是配置deploy.rb文件。(目前capistrano只支持SSH访问远端服务器,不支持Telnet和FTP方式)
* 这里使用了multistage功能,配置development,staging和production三个场景。各个场景的具体设置放在config/deploy/下面的development.rb, staging.rb, production.rb里面
* deploy.rb
# multi stage set :stages, %w(development staging production) set :default_stage, "development" require "capistrano/ext/multistage"
* deploy.rb
set :application, "xxxxxx" set :scm, :git # 需要事先确认部署服务器上安装了git set :repository, "git@github.com:xxx.git" set :git_enable_submodules, 1 set :user, "webapp" # 需要事先确认该用户对后面定义的[deploy_to]具有读写的权利 set :use_sudo, false default_run_options[:pty] = true #访问git时候确认fingerprint和password的时候必须设置 set :deploy_via, :remote_cache after :deploy, "deploy:cleanup"
* production.rb
set :deploy_to, "/var/webapps/#{application}" # 需要确认服务器上有该目录 set :settings_name, "production" ssh_options[:forward_agent] = true ssh_options[:port] = 22 set :copy_exclude, ['.git'] role :app, "xxxx", :primary => true role :app, "xxxx" role :web, "xxx" role :db, "xxx", :primary => true role :db, "xxx" namespace :deploy do task :finalize_update, :except => { :no_release => true } do # do nothing end task :finalize_update, :roles => :db, :except => { :no_release => true } do # do nothing end task :restart, :roles => :app, :except => { :no_release => true } do run "touch #{deploy_to}/current/scripts/production.wsgi" end end
配置完了,可以一步一步做部署测试,这样方便查错。直到所有的测试通过,就可以启动整个部署流程。cap deploy
$ cap deploy:setup #准备目录结构,执行一系列mkdir,如下 [deploy_to] [deploy_to]/releases [deploy_to]/releases/20080819001122 [deploy_to]/releases/... [deploy_to]/shared [deploy_to]/shared/log [deploy_to]/shared/pids [deploy_to]/shared/system [deploy_to]/current -> [deploy_to]/releases/20100819001122 其中,current和release下面的目录是在部署代码后才有的。 $ cap deploy:check #确认目录读写权限和需要的软件,比如git,rsync $ cap deploy:update #部署代码 $ cap deploy:restart $ cap deploy # 启动整个部署流程
为了更好的使用capistrano提供的after,before来定制自己部署task,需要了解执行cap deploy之后都有按顺序执行了哪几个具体task。
$ cap deploy 1: deploy:setup 2: deploy:default 2.1: deploy:update 2.1.1: deploy:update_code 2.1.2: deploy:finalize_update 2.2: deploy:create_symlink 3: deploy:restart
然后就是定制task了,比如可以对Django的manage.py的很多常用参数,或者其他需要的admin操作封装成task,从而可以在指定的多个server上执行同样的管理命令。
比如:migrate, update_cache_all, initialize_db等.
到此为止,整个部署的配置过程结束。
ps: Capistrano高级用法
相关文章推荐
- 使用Capistrano向EC2部署Django代码--关于SSH相关的配置
- 使用Capistrano向EC2部署Django代码--关于SSH相关的配置
- 使用Capistrano向EC2部署Django代码
- 使用PHP自动部署GIT代码
- 使用Django进行web开发(1) ----环境的搭建与部署
- 从开发到部署,使用django创建一个简单可用的个人博客
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- 使用Tornado+Nginx部署Django的一种尝试
- 使用Git在VPS上部署代码
- Django--使用Apach2部署网站
- Terraform: 使用基础结构作为代码来自动化 VMware 部署
- 使用uwsgi+django,修改代码后不起作用
- 使用APACHE部署DJANGO程序的时候如何配置静态文件支持?
- Ubuntu系统使用apache部署多个django项目(python4.3)
- 基于ubuntu使用nginx+uwsgi部署django,并使用supervisor管理(不坑人)
- apache服务器使用wsgi部署django站点
- B站视频开源代码flv.js的使用部署心得(代码案例应用)
- 使用Docker搭建Django,Nginx,R,Python部署环境
- 手把手教你用Tortoises SVN 部署Eclipse编辑的Django代码到SAE 上
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目