いま複数あるPadrinoのアプリケーションのデプロイでmina を使ってみようと試した際のメモ。
仕事ではCapistrano(+ Webistrano)を利用していますが、RubyのプロジェクトなのとソースコードもGit管理されているので試してみました。
準備
- プロジェクトのGemfileに
gem 'mina'
を追加した後、bundle install
する - プロジェクトルートで以下のコマンド実行してデプロイ用の設定ファイルを生成します
- 中身にかなりコメント等も含めたテンプレートが出力されるので非常にわかりやすいです
$ bundle exec mina init -----> Created ./config/deploy.rb Edit this file, then run `mina setup` after.
- 上で作成されたdeploy.rbを編集する
- 作成例としては https://gist.github.com/hideack/7275901 の様な形…。
接続先側(リモート側)
- あとデプロイ先のホスト(リモート側)に公開鍵認証のSSH接続をできる様にしておく必要があります
- また、更にデプロイ対象のソースコード取得にGithubを利用するのであれば、その接続先ホストからcloneできる様にする必要があります。
- リモート先の公開鍵をgithubに登録しておく。
ssh-keygen -t rsa
で作成して https://github.com/settings/ssh で登録 - 登録したら、リモート側のホストで
ssh -T git@github.com
で接続チェックしてホスト登録。*1
実行
ここまでできれば、あとはminaからsetupコマンドを実行して、リモート側のディレクトリ構成等を準備します。
$ bundle exec mina setup -----> Setting up /home/hideack/sample total 16 drwxrwxr-x 4 hideack hideack 4096 Nov 2 05:03 . drwxr-xr-x 5 hideack hideack 4096 Nov 2 05:02 .. drwxrwxr-x 2 hideack hideack 4096 Nov 2 05:03 releases drwxrwxr-x 2 hideack hideack 4096 Nov 2 05:03 shared -----> Done. -----> Be sure to edit 'shared/config/database.yml'. Elapsed time: 0.00 seconds
引き続きデプロイしてみます。上に書いたタスクだと、
- githubからclone
- bundle install の実行
が順に行われます。
$ bundle exec mina deploy -----> Creating a temporary build path -----> Fetching new git commits -----> Using git branch 'master' Cloning into '.'... done. -----> Using this git commit -----> Symlinking shared paths -----> Installing gem dependencies using Bundler Fetching gem metadata from http://rubygems.org/....... Fetching gem metadata from http://rubygems.org/.. Using rake (10.0.4) (略) -----> Build finished -----> Moving build to releases/1 -----> Updating the current symlink -----> Launching -----> Done. Deployed v1 Elapsed time: 32.00 seconds
意外とあっさりとデプロイできてしまった。デフォルトでCapistranoで差分をデプロイする様になっている様で2回目以降のデプロイは相当スムーズです。(リポジトリの丸ごと clone は最初だけ、次回以降は差分のみ)
ほとんど引っかかることがなかったけど、使い始めたらいろいろ引っかかるかもしれないので、都度整理。
但し、ここまでではunicornが起動していない状態なので、タスクを更に追加していきます。(また今度)
参考
- Capistrano の対抗馬? Mina の導入方法
- http://qiita.com/ne_ko_/items/23d447a7aba6ac910fff
*1:これをしておかないと、デプロイタスクを繋いだ際にgit cloneできないエラーが出るので...。