読者です 読者をやめる 読者になる 読者になる

Capistranoを使ってDjangoのプロジェクトをデプロイする

Ubuntu Django Ruby Capistrano

Djangoのプロジェクトのデプロイを楽にしたくて、Capistranoを使おうと思った。
サーバはUbuntu
リモートでデプロイを実行するなら、サーバにはCapistranoがいらないっぽい。
まあ、サーバで作業することもあるのでとりあえずインストールしておく。
デプロイ先のサーバにはsshが必須で、SVNリポジトリからチェックアウトさせるならsubversionもクライアント、サーバ共に必須かな。
RubyとRDocはaptでインストールしました。Railsのことを考えてRubyのバージョンは1.8にしておいた。

$ sudo apt-get install ruby1.8
$ sudo apt-get install rdoc

ここで少しはまった。rubyのコマンドが通らないのはなんでかなーと思ったら/usr/binにruby1.8はあるけどエイリアスが作成されてなかった。lnでエイリアスを作成。
RubyGemsは自身がアップデート機能を持っているので、ソースからインストールした。
ソースアーカイブRubyForgeから入手できる。
http://rubyforge.org/projects/rubygems/

$ tar xzvf rubygems-1.0.1.tgz
$ cd rubygems-1.0.1
$ sudo ruby setup.rb

gemも/usr/bin/gem1.8はあったのだけど、/usr/bin/gemへのエイリアスが作成されてなかったので作成。
gemでCapistranoをインストール。

$ sudo gem install capistrano

capがcapistranoのコマンドらしい。
手元のWindowsにもCapistranoをインストールしておいた。
Windowsの場合はOne-Click Ruby Installerを利用すればgemまでインストールされるので楽かな。
Djangoのプロジェクトのための設定については参考ページがあった。
http://cyberdelia.tryphon.org/blog/2007/10/27/django-capistrano/
Capistranoの設定ファイルはRubyのコードになっている。
"Capfile"という名前でCapistranoの設定ファイルを作成すると、capコマンドでファイル名指定をしなくてもいいらしい。
taskを定義してcapコマンドで実行、というような形になる。
試しにApacheを再起動するためのtaskを書いてみる

set :user, "hogehoge" # sshでログインに使うユーザ名
role :app, "example.com" # サーバを定義(appは別の名前でも良い)
desc "Restarts your application"
task :restart, :roles => :app, :except => { :no_release => true } do
  sudo "/etc/init.d/apache2 restart"
end

ファイル名を"Capfile"で保存後、コマンドから

$ cap restart

とすると定義したrestartのタスクが実行され、パスワードを聞かれる。
パスワードを入力するとApacheが再起動される。
後で追記予定。

まあいろいろありまして追記

デフォルトで定義されているタスクはrailsディレクトリを想定しているようなので、そのままでは使えない。
ちなみに私の場合はサイト規模が小さく、バックアップなどを作る必要もなかったので単にサーバ側でsvn upを掛けるだけのタスクを定義して使用している。

set :user, "サーバ側のユーザ名"
set :ssh_options, :port => "SSHポート番号"

role :app, "tokibito.orz.hm"

namespace :deploy do
  desc "Restarts your application"
  task :restart, :roles => :app do
    sudo "/etc/init.d/apache2 reload"
  end

  desc "Update"
  task :update, :roles => :app do
    sudo "svn up デプロイ先のディレクトリ"
    restart
  end
end