12FF5B8

hico_horiuchiの技術系な覚え書き.

AnsibleでRailsをデプロイ

インターンシップで構成管理ツールansibleを使う機会があり,それから愛用するようになった.
ansibleではyaml形式でplaybookと呼ばれるレシピを書き,それをssh経由で実行する.
(操作を抽象化するモジュールが標準で多く準備されている.ドキュメント参照.)
chefのようにクライアント側の用意が必要なく,シンプルなのが良い.

今回は,学生プロジェクトで開発中のrailsアプリをデプロイするplaybookを作成してみた.
f:id:hico_horiuchi:20141007175919p:plain

前提条件

デプロイ先となる本番サーバには,nginxとDB(postgreなど)はインストール済とする.

作成したplaybook

hostsにデプロイするrailsのgitリポジトリとプロジェクト名,本番DBのパスワードを書く.
ansible-playbook -i hosts deploy.ymlを実行すると,以下の順で処理が走る.

  1. git.ymlリポジトリをホーム直下にclone
  2. bundle.ymlbundle install
  3. nginx.ymlunicornリバースプロキシ用のnginx設定ファイルをコピー・パスを設定
  4. unicorn.ymlunicorn実行用shellscriptをコピー・パスを設定
  5. database.ymlrailsのDBを設定(パスワード設定,db:setupまたはdb:migration)
  6. assets.ymlassets:precompile
  7. service.ymlunicornとnginxを再起動

デプロイ用Rakeタスク

rake deploy:ansibleで実行できるようにRakeタスクも作成した.

  • lib/tasks/deploy.rake
namespace :deploy do
  desc 'Deploy using Ansible'

  task :ansible do
    hosts = "#{Rails.root}/playbook/hosts"
    playbook = "#{Rails.root}/playbook/deploy.yml"
    system "ansible-playbook -i #{hosts} #{playbook}"
  end
end

まとめ

ちまちま開発して頻繁にデプロイするので,自動化で便利になった.
あと,ヒューマンエラーが無くなるのも良いかな.
これからもansibleを使ってガンガン自動化を推し進めていきたい.