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なども環境に合わせて修正が必要になると思いますが、すみません。現時点では割愛させていただきます。