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