zoukankan      html  css  js  c++  java
  • 使用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等.

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

     
    分类: AWSPython
    标签: Capistrano
  • 相关阅读:
    QTP最小化代码
    开源Web自动化测试框架
    翟志刚系电脑游戏高手
    Java开源框架集[转载]
    Windows xp 控制台命令一览表〔转载〕
    三大措施将SQL注入攻击的危害最小化
    Zee书评:对于涌的《软件性能测试与Load Runner实战》的个人看法
    藏獒遭主人打骂后咬舌自尽
    IDS\IPS相关知识〔搜集〕
    lr之RTE脚本(telnet方式访问水木清华)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2599956.html
Copyright © 2011-2022 走看看