読者です 読者をやめる 読者になる 読者になる

Itamaeレシピ集 - Ruby/nginx/MySQL/Redis/etc

Itamaeを使ってみる。 

選定基準は、

  • Rubyの内部DSLで書きたい
  • Ansibleだとそのご期待に添えない
  • でもchefはフルスタックすぎて学習コストが高い...
  • ということでItamae :+1: :+1:

みたいな感じです。基本的にRails使うような想定をしております!

構成

以下の構成を目標にがんばります。

Capistrano

Railsのデプロイ先のサーバーの設定をしたいので、先にCapistranoの設定をしておきました。

Capistranoの設定は割愛。以下の記事を参考にしてくださると助かります。

totutotu.hatenablog.com

itamae

itamaeをインストールします。

$ gem install itamae

以下に、この記事の順番でitamaeのrecipeたちを作っていきます。

https://github.com/totzyuta/itamae-sample

base

recipes以下にレシピをこれからどんどん突っ込んでいって、recipes/base.rbで全部読み込んでしまうって感じの構成にしようと思っております。

なんかActiveRecordっぽくてかっこいいじゃん笑

baseはこんな感じにしてみる。

%w(yum_update ruby_build mysql_for65 nginx redis).each do |resource|
  include_recipe "./#{resource}.rb"
end

Ruby by rbenv

バージョン管理ツールとしてrbenvを、Ruby 2.2.3をインストールしてglobalな設定にするところまで。

以下の記事を参考にさせていただきました。

http://qiita.com/fukuiretu/items/337e6ae15c1f01e93ec3

長いのでソースコードはここでは掲載やめときますー。Rubyをbuildするためのrecipeの差分はこんな感じ。

https://github.com/totzyuta/itamae-sample/commit/1fd3f77a6a6b768eaf99fed18a79e06067849527

MySQL

MySQLのレシピは、こんな感じになりました。

# recipes/mysql_for65.rb
execute "yum -y remove mysql*"

package "http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm"

%w(mysql-community-server mysql-community-devel).each do |pkg|
  package pkg
end

service "mysqld" do
  action :start
end

差分は以下。

https://github.com/totzyuta/itamae-sample/commit/dc53aabd968fb5915bba42470d46b3ba27e52d39

nginx

続いて、nginxのレシピ。インストールしてから、confファイルをサーバーに配置して、serviceをstart。

package 'nginx' do
  action :install
end

remote_file "/etc/nginx/nginx.conf" do
  source "../remote_files/nginx.conf"
end

remote_file "/etc/nginx/conf.d/app.conf" do
  source "../remote_files/app.conf"
end

service 'nginx' do
  action [:enable, :start]
end

リモートに実際に配置したいリソースは、/remote_files以下に突っ込んでいくことにしてます。

redis

redisうまく入らなかったので、以下を参考にさせていただきました。

https://github.com/ysk1031/itamae-recipe/blob/master/recipes/redis.rb

# recipes/redis.rb
package "redis" do
  options "--enablerepo=epel"
  action :install
end

service "redis" do
  action %i(enable start)
end

https://github.com/totzyuta/itamae-sample/commit/1fc9f2dfe9af1c63d90ecf93752cc5e2086a76a6

yum update

先ほどのリポジトリでyumのupdateも自動で走るようにしていたのでこれも入れようということでレシピ作っておきます。

# recipes/yum_update.rb
execute "yum clean all" do
  user "root"
end

execute "yum update -y" do
  user "root"
end

https://github.com/totzyuta/itamae-sample/commit/fe47e164dd39aa92a5ff8e7b0f784c9d8eaa6b5f

まとめ

ということで、よく使う構成でプロビジョニングできるようにしてみました。

itamaeさわるの初めてでしたが、chefほどいろいろ勉強することもなくて非常にとっつきやすい印象で楽しかったです。

参考サイト