Ruby on Railsなどの環境構築を自動化するために、Chef Soloをインストールしてみました。
Chefを動かすにはRubyのインストールが必要なので、まず先にやっておきます。
※なお、Chef 11.12系をインストールして「knife configure」を実行したところ、下記のエラーで失敗したため、Chefとknife-soloはバージョンを指定してインストールしました。
$ knife configure ERROR: Ohai::Exceptions::DependencyNotFound: Can not find a plugin for dependency os
Chefとknife-soloをインストールします。
$ gem install chef -v 11.10 # Chefをインストール $ knife configure # 初期設定 $ gem install knife-solo -v 0.4.1 # knife-soloをインストール
Chefのリポジトリを作成します。
$ knife solo init chef-repo
cookbookを作成します。
$ cd chef-repo/ $ knife cookbook create httpd -o site-cookbooks $ vi site-cookbooks/httpd/recipes/default.rb # Apacheをインストール # sudo yum install -y httpd package "httpd" do action :install end
サーバにChefをインストールします。
$ knife solo prepare <ユーザ名>@<サーバのIPアドレス>
サーバのIPアドレス.jsonのファイルが作成されるため、実行したいcookbookを指定します。
$ vi nodes/<サーバのIPアドレス>.json { "run_list":[ "recipe[httpd]" ] }
この状態でもchef-soloを実行できますが、サーバへのログイン時とサーバでのsudoの実行時に何度がパスワードが聞かれるため、パスワードなしで実行できるように設定を行います。
サーバにパスワードなしで接続できるように、公開鍵認証の設定を行います。
ssh-keygenコマンドで認証用の鍵を作成し、対象サーバへ転送します。
$ ssh-keygen $ scp ~/.ssh/id_rsa.pub <ユーザ名>@<サーバのIPアドレス>: $ ssh <ユーザ名>@<サーバのIPアドレス> # サーバへログイン $ mkdir ~/.ssh $ mv id_rsa.pub ~/.ssh/authorized_keys
パスワードなしでsudoを実行する設定を行います。
$ sudo visudo <ユーザ名> ALL=(ALL) NOPASSWD: ALL # ←最終行に追加 $ exit
環境が整ったため、最後にchef-soloを実行します。
$ knife solo cook <ユーザ名>@<サーバのIPアドレス>
後は、設定ごとにcookbookを作成し、default.rbやnodoファイルを編集することで様々な環境構築を自動化できます。