デプロイツール mina を使ってみる

ruby 製デプロイツールといえば定番の capistrano (とvLad? こっちはよくわかりません…) ですが、mina というのを知ったので、とりあえず簡単に使ってみました。

サイトによると、「マジで早いデプロイとサーバの自動化ツール」とのことで、bash スクリプトを生成して、それを送り込んで実行するので SSH セッションも一度で済み高速だということです(多分)

やること

今回は、適当なディレクトリを作り、そこに index.html を配置、コレを一つのプロジェクトとして扱い、自前のサーバにデプロイが可能なようにセットアップしてみます。

準備

mkdir demo-mina
cd demo-mina
echo 'hello' > index.html
git init
git add . && git commit -m'init'
git push hoge fuga # github など

index.html の内容は手抜きです。適宜お好きなようにしてください。

git リポジトリは github や自前のサーバなどに push してください。そこからデプロイ時にチェックアウトしてきます。

# Gemfile
source :rubygems
gem 'mina'

以上の Gemfile を作って bundle install –path=bundle しました。グローバルに入れたくなかっただけですので、普通に gem i mina でも良いと思います。

ここから先は、公式のセットアップにだいたい習うだけです。

初期化

初期設定のスクリプトを mina init で生成します。

bundle exec mina init

config/deploy.rb が生成されます。capify . みたいなもんですね。

サーバ設定

とりあえず最低限の接続先のサーバの設定を行います。

# config/deploy.rb
set :domain, 'hoge.net' # デプロイ先のサーバドメイン
set :deploy_to, '/home/user1/apps/demo-mina' # デプロイ先のディレクトリ
set :repository, '/var/repos/git/demo-mina.git' # リポジトリの場所
set :branch, 'master' # デプロイするブランチ名
set :user, 'user1' # サーバに接続するsshユーザ名

以上の項目について設定します。すでに記述されているので、書き換えたり。コメントアウトを外してください。

今回リポジトリはデプロイ先のサーバ上にあるものとしました。

ついでに以下をコメントアウトしてください。

# to :launch do
#   queue 'touch tmp/restart.txt'
# end

passenger 用の再起動ファイルですが、今回 tmp/ が無いので失敗してしまいます。

deploy_to で指定したディレクトリは setup で生成されます。

(余談ですが、capistrano は未設定の場合、デフォルトで /u/apps/ になりますが、mina は必須でした。)

デプロイサーバに接続して、必要なディレクトリをセットアップします。

bundle exec mina setup -v -t # オプションは詳細を出力させてる

deploy_to にセットしたパスに releases, shared と capistrano のようなディレクトリが生成されます。

さらに出力をみると log/ や database.yml も生成されたりします。設定が rails のままなので作成されてしまいました。

今回は必要ないですが、rails アプリの場合は必須でしょうし、デフォでやってくれるのは助かりますね。

デプロイ

後はデプロイするだけです。

bundle exec mina deploy -v -t

サーバ上に、リポジトリの master ブランチがデプロイされました。

デプロイ先のディレクトリはこんな感じです。

current -> releases/1/
last_version
releases/
scm/
shared/

Capistrano 風ですがちょっと違うのは releases に入るディレクトリ名が連番ということ。

そして最終バージョンが last_version に記述されます(中身は 1 とかかれたテキスト)

git だからでしょうか、bare なリポジトリが scm にクローンされてます。

初期化してそのままの deploy.rb は rails に特化しているようなので、すこし見直すだけでカスタムは簡単そうです。

まだ上記の操作しかしていませんが、svn でできるのか、capistrano みたいな tarボールの展開デプロイができるのかを調査してみたいと思います。

追記:ドキュメントをながし見た感じ、tarボールとかはできなさそうです。svn も用意はされてませんでしたが、スクリプトを作ったら対応できそうな感じがします(誰かお願い。もしくは探したらもうあるかも)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする