好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用Capistrano向EC2部署Django代码

使用Capistrano向EC2部署Django代码

使用Capistrano向EC2部署Django代码

Capistrano是一种在多台服务器上运行脚本的开源工具,它能自动完成多台服务器上新版本代码的同步更新,包括数据库的改变,主要用于部署web应用。Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用Django开发的。  

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文件。

* 这里使用了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等.

到此为止,整个部署的配置过程结束。

 

分类:  AWS ,  Python

标签:  Capistrano

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于使用Capistrano向EC2部署Django代码的详细内容...

  阅读:39次