はじめに
最近 Ansible 2.0 がリリースされました。ちょうどバイト先の方でも Rails の開発環境用のサーバを構築する機会があったので、毎回構築するのは面倒ということも有り、Ansible で自動化してみることにしました。コードはGithubに公開 してます。Ansible のスクリプトに加えて、Capistrano や Unicorn の設定ファイルもおいてある (このへん) ので、コピペすればすぐに Rails をデプロイできる環境が作れる。。。はず!
( 追記: 自動化せずに手でやる場合は Ruby on Rails を Capistrano を用いて Ubuntu サーバ (with MySQL, Nginx) にデプロイした時のメモ が参考になるとおもいます。ここに書いてあるようなことが今回は Ansible 化されています。 )
Ansible 力(?) がまだ未熟なのでコードはリファクタリング出来そうだなーと思ったりしつつ、ここでは作ったコードの使い方を書きます。サポートしている OS は さくらVPS の Ubuntu 14.04 のみで(笑)、以下のものに関する環境が構築されます。
- Ruby on Rails
- Unicorn
- MySQL
- Nginx
- Rbenv
あとは今後の必要に応じて追加すると思われる。ただ、あまり複雑怪奇なものにはしたくなくて、 staging 環境くらいのそんなに重要じゃない環境構築をサクッと作りたい時に使うくらいを意図しています。デプロイしたけど Unicorn が更新されない、Nginx が 502 エラーを返す、のような部分に今後時間を浪費をしないことが目標。
使い方
- コードのダウンロード
git clone https://github.com/travelist/ansible-rails.git
- Ansibleのインストール
pip install -r requirements.txt
-
デプロイ先のIPの指定
-
ansible/hosts
のなかにあるIPアドレスを編集する
-
[rails]
000.000.000.000 # ここを編集してください
[vagrant]
192.168.33.3 # こっちは Vagrant 使ってデモ用なので無視で。
-
設定ファイルの編集
-
ansible/group_vars/rails
を編集する
-
---
rails:
application: hello_world # アプリケーション名 (/var/www/hello_world ←)
ruby:
version: 2.2.3 # Rbenv で指定した Ruby をインストールします
nginx:
url: www.hello_world.com # URL 以外はテンプレートに書いてあります。
mysql:
root_password: 123456789 # MySQL のインストール時に root パスワード決めるので。
rails_username: rails # Rails 用にユーザ作ります
rails_password: 123456789
rails_database: rails_db # Rails 用にデータベース作ります
-
パスワードなしで sudo が可能か確認
- SSHでデプロイするサーバーにログイン。 sudo がパスワードなしで実行できない場合は以下のコマンド実行
echo "username ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
-
Ansible の実行
- 気長に待ちましょう。
ansible-playbook -i hosts rails.yml -u username
以上で Rails のデプロイができる最低限のサーバが構築されたとおもいます。(たぶん!)
裏では group_vars/rails
に書いた設定ファイルを元に、rbenv を用いて指定した Ruby のバージョンのものをインストール、Nginx の設定、MySQL の設定、各種Rails を実行するのに必要なパッケージをapt-get
しています。
この後は Capistrano や Unicorn の設定をすればデプロイができるはず。
rails_config
ディレクトリ以下に Unicorn や Capistrano のサンプル設定ファイルがあるので、コピペして少し編集すればいろいろ設定する時間も短縮できるはず。
まとめ
Ansible を用いて Rails 環境の構築を自動化しました。
これまで(そしてこれからも) Rails のサーバ設定をすることがあったので、ここで自動化したおかげで今後の作業時間を減らすことが出来たと思います。
今後は必要に応じて修正したり、サーバの設定を変えるようなタスクを追加していこうとおもいます。