Chefを今更ですが利用してみました

Railsのアプリケーションを構築する環境は、弊社ではWindows上に仮想環境を構築しCentOSをゲストOSとして利用することが多いです。
個人的には仮想環境を構築するが面倒ということもありOSXで学習していますが。

仕事でRailsのサーバを構築することになりそうなので、今更ですがChefを利用して環境構築にトライしてみたいと思います。

  • クライアント:ContOS6.4(Windowsの仮想環境)
  • サーバ:CentOS6.4
  • データベース:PostgreSQL9.2

で試すことにしました。

クライアントは現在利用しているRailsの開発環境です。
そのため、クライアントにはRuby、bundleの利用できる環境が整っています。

kife-soloの導入

適当な作業用のディレクトリを作成し(今回単純にknife-soloとしてしまいました)、以下のようなGemfileを作成しました。
berksfileは、Rubyのgemを管理するbundlerのようなものでしょうか。Chefの公開されているコミュニティcookbookを管理をしてくれるツールになります。

# Gemfile


source 'https://rubygems.org'

gem 'knife-solo'
gem 'berkshelf'

次のコマンドを実行しインストールします。

$ bundle install

続いて、カレントディレクトリにリポジトリを作成します。

$ bundle exec knife solo init .

リモート側にChefをインストール

サーバ(リモート)にchef-soloをインストールするため、次のコマンドを実行します。

$ bundle exec knife solo prepare <hostname of IP Address>

pgdgリポジトリの追加

PosgreSQLをyumをつかってインストールすると、バージョン8.4となってしまいます。バージョン9.xをインストールするにはpgdgリポジトリを追加してからインストールしなければなりません。
pgdgリポジトリを追加するためのcookbookが公開されていますので、まずはpgdgリポジトリの追加をしてみます。

Berksfileを編集します。

# Berksfile


source "https://supermarket.chef.io"

cookbook 'yum-pgdg'

また、nodeファイルのrun_listも編集します。

// node file


{
  "run_list": [
    "recipe[yum-pgdg]"
  ]
}

続いて次のコマンドを実行します。

$ bundle exec knife solo cook <hostname of IP Address>

また

$ ls -l /etc/yum.repos.d

でpgdgのリポジトリが追加されていることも確認できると思います。

PostgreSQLのインストール

今回は弊社でも長期に運用実績のあるバージョン9.2を導入してみます。
コミュニティのcookbookではエラーが発生してしまったので、最終的にはダウンロード後、cookbookを一部修正しました。

Berksfileに cookbook 'postgres'を追加します。

その後、自作用のディレクトリsite-cookbookディレクトリにコピーしてフォルダ名をpostgresからpostgres.opscodeに変更しました。

レシピの変更箇所は以下の箇所です。
バージョンの指定はnodeファイルでもできるのでしょうが、今回はとりあえず直接default.rbを変更してしまいました。

default['postgresql']['enable_pgdg_yum'] = true

default['postgresql']['version'] = "9.2"

default['postgresql']['pgdg']['repo_rpm_url'] = {
        :
        :
  "9.2" => {
    "centos" => {
      "6" => {
        "i386" => "http://yum.postgresql.org/9.2/redhat/rhel-6-i386/pgdg-centos92-9.2-6.noarch.rpm",
        "i686" => "http://yum.postgresql.org/9.2/redhat/rhel-6-i386/pgdg-centos92-9.2-6.noarch.rpm", # ここ追加

        "x86_64" => "http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm"

Berksfileを再度編集します。

# Berksfile


source "https://supermarket.chef.io"

cookbook 'yum-pgdg'

cookbook "postgresql", path: "./site-cookbooks/postgresql.opscode" # 追加

nodeファイルのrun_listも編集します。

// node file


{
  "run_list": [
    "recipe[yum-pgdg]",
    "recipe[postgresql]" // 追加

  ]
}

続いて次のコマンドを実行します。

$ bundle exec knife solo cook <hostname of IP Address>

今回は時間の関係で、data_bagは試していません。パスワードはnodeファイルに記載して対応しました。
あるべき形で確認できましたら、再度本投稿を更新したいと思います。 その他、pg_hba.confなども環境に合わせて修正が必要になると思いますが、すみません。現時点では割愛させていただきます。