capistrano
ヒマ潰しと現実逃避を兼ねて capistrano を触ってみました。環境は下記の通り。
- 開発環境は Windows XP
- 運用環境は Ubuntu 8.10
- アプリケーションは ruby on rails 製
- バージョン管理システムは git
- アプリケーションは passenger で動作
rails も git も ssh もよく分かっていないため、なにか起こっても何が悪いのかさっぱり分からず、限りある時間をまたもや盛大に無駄遣いしてしまったので、例えゴミだ駄文だと罵られようとも、せめてこの世に足掻いた証のひとつやふたつ、ひっそりと残して散りたいのです。
capistrano のインストール
まずは capistrano のインストール。開発環境で gem install を叩くだけ。
% gem install capistrano Successfully installed net-ssh-2.0.11 Successfully installed net-sftp-2.0.2 Successfully installed net-scp-1.0.2 Successfully installed net-ssh-gateway-1.0.1 Successfully installed highline-1.5.0 Successfully installed capistrano-2.5.5 6 gems installed (snip) % cap --version Capistrano v2.5.5
cap -T でコマンドの一覧を確認できます。
% cap -T cap deploy # Deploys your project. cap deploy:check # Test deployment dependencies. cap deploy:cleanup # Clean up old releases. cap deploy:cold # Deploys and starts a `cold' application. cap deploy:migrate # Run the migrate rake task. cap deploy:migrations # Deploy and run pending migrations. cap deploy:pending # Displays the commits since your last deploy. cap deploy:pending:diff # Displays the `diff' since your last deploy. cap deploy:restart # Restarts your application. cap deploy:rollback # Rolls back to a previous version and restarts. cap deploy:rollback:code # Rolls back to the previously deployed version. cap deploy:setup # Prepares one or more servers for deployment. cap deploy:start # Start the application servers. cap deploy:stop # Stop the application servers. cap deploy:symlink # Updates the symlink to the most recently deployed ... cap deploy:update # Copies your project and updates the symlink. cap deploy:update_code # Copies your project to the remote servers. cap deploy:upload # Copy files to the currently deployed version. cap deploy:web:disable # Present a maintenance page to visitors. cap deploy:web:enable # Makes the application web-accessible again. cap invoke # Invoke a single command on the remote servers. cap shell # Begin an interactive Capistrano session. Some tasks were not listed, either because they have no description, or because they are only used internally by other tasks. To see all tasks, type `cap -vT'. Extended help may be available for these tasks. Type `cap -e taskname' to view it.
capistrano は「開発環境から運用環境に対していろいろがんばる」ツールなので、開発環境にインストールされていれば良く、サーバ側にはなにもいりません。
SSH 鍵ペアの作成
capistrano が「開発環境から運用環境に対していろいろがんばる」ためには、運用環境に安全にログインして操作するための仕組みが必要であり、これを公開鍵認証方式で行います。
Windows XP で公開鍵認証に使用する公開鍵/秘密鍵を作成するには、
- PuTTY
- UTF-8 TeraTerm Pro
- OpenSSH
あたりが使用できますが、普段からターミナルとして使用していて操作に慣れており、また teraterm menu が便利なため、今回は UTF-8 TeraTerm Pro を採用。*1 *2
公開鍵と秘密鍵を作成したら、秘密鍵は開発環境のホームディレクトリ配下に .ssh ディレクトリを作成して保存。
% mkdir ~/.ssh % mv /path/to/id_rsa ~/.ssh/
公開鍵は運用環境へ転送し、ログインユーザのホームディレクトリ配下に .ssh ディレクトリを作成して authorized_keys に追記。authorized_keys に書いたらファイルは捨てて構いません。
$ mkdir ~/.ssh $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys $ rm ~/id_rsa.pub
capify
rails アプリケーションは git で管理されているものとして、これを clone して
$ git clone git@gitserver:/var/git/sample.git Initialized empty Git repository in d:/work/sample/.git/ git@gitserver's password: remote: Counting objects: 112, done. remote: Compressing objects: 100% (98/98), done. Receiving objects: 65% (73/112) d 0 (delta 0)Receiving objects: 58% (65/112) Receiving objects: 100% (112/112), 85.21 KiB, done. Resolving deltas: 100% (29/29), done.
capistrano でデプロイ操作を行えるよう capify すると
$ cd sample/ $ capify . [add] writing `./Capfile' [add] writing `./config/deploy.rb' [done] capified!
こんな deploy.rb が作成される。
set :application, "set your application name here" set :repository, "set your repository location here" # If you aren't deploying to /u/apps/#{application} on the target # servers (which is the default), you can specify the actual location # via the :deploy_to variable: # set :deploy_to, "/var/www/#{application}" # If you aren't using Subversion to manage your source code, specify # your SCM below: # set :scm, :subversion role :app, "your app-server here" role :web, "your web-server here" role :db, "your db-server here", :primary => true
で、これを適当に編集すればいいわけなのですが、ssh でハマり過ぎ。permission denied を 300 回くらい見た気がします。
普段ならキレまくったあとに自分が悪い事に気付いて赤面したりするのが関の山なのですが、Windows XP + capistrano の組み合わせは難易度高過ぎ。
疲れ果ててキレる元気も残っていないので続きは明日。