Vagrant + Chef Solo で Movable Type が動く LAMP 環境を作ってみた 準備編

既に「入門Chef Solo - Infrastructure as Code」は購入していて、肩は温まっていたものの。
正直「じゃぁ、何をどうすればいいのか?」がイマイチ理解できず、はや数ヶ月。。。

vagrant + berkshelf + chefで環境をつくってみたら鼻血が出た - リア充爆発日記:http://d.hatena.ne.jp/ria10/20130520/1369057214

この記事を見かけて「BUN も鼻血出さなきゃ!!!」と再度チャレンジしてみましたが、幾度となく vagrant destroy を繰り返し、別な意味で鼻血が出そうでした w

それなりに形になったと思うので、備忘録をかねてまとめてみます。
今回は Vagrant の VM を Chef で管理できるようにするまでの「準備編」です。

update 2014.06.19
Vagrant + Chef Solo で Movable Type が動く LAMP 環境を作ってみた レシピ篇を書きました。

イメージしたら、なんとなく理解できた

そもそも、Chef Solo や Knife Solo を導入する場合、どこにインストールするのか?
恥ずかしながら、そこから誤解していました。

例示されているターミナルコマンドの対象が、ホスト(Mac)なのかゲスト(VM)なのかを勘違いしていたようで、なるほど前途多難な訳です。

そこで、改めて全体の流れをニュアンスで妄想してみました。

イメージ図 イラスト素材:いらすとや

  1. 自宅を店舗に料理人として独立(Mac へ Chef Solo をインストール)
  2. 多目的に使える万能ナイフをとある筋から入手(Mac へ Knife Sofo をインストール)
  3. 支店にどんなメニューも再現してくれる凄腕料理人を雇う(Vagrant へ Chef をインストール)
  4. レシピを書きとめるひな形(たぶん、木の皮)をナイフで削りだし(Cookbook の作成)
  5. 新しいメニューを開発(apache や php など、必要とするレシピの作成)
  6. ナイフでレシピを放り投げて、凄腕料理人に料理してもらう(Knife Solo の実行)

いきなり独立とは無謀だな・・・とか、人にお願いするときナイフを投げるって・・・などなど。ツッコミどころは多々ありますが、理解できればよしとします。

あとは、この流れにそって諸々インストールや設定を進めていきます。

なお、Berkshelf なる敏腕エージェントに仲介を依頼するとオンラインで公開済みの Cookbook を導入できますが、どんなレシピを実行するのか把握しておきたいため、現時点では取引を見送りました。

Vagrant の準備

Vagrant をインストールしていない場合は、下記などを参考に。

今すぐVagrantを始めよう | 株式会社シンメトリック公式ブログ:
http://www.symmetric.co.jp/blog/archives/533

テストで利用した CentOS 6.5 の Box はミニマムな構成だったので、Development Tools をインストール。
ついでに、yum もアップデートしておきます。

$ vagrant ssh
[vagrant@localhost ~]$ sudo yum groupinstall 'Development Tools'
[vagrant@localhost ~]$ sudo yum update

あわせて、ホスト名で ssh できるよう調整。

$ vagrant ssh-config --host localhost >> ~/.ssh/config

カレントディレクトリに関わらず、下記のコマンドで vagrant ssh と同じ状態になります。

$ ssh localhost

Mac に Chef Solo と Knife Solo をインストール

gem の管理は Bundler で行っているため、Gemfile に追記します。

gem "chef"
gem "knife-solo"

これらをインストールして、反映させます。

$ sudo bundle install
$ rbenv rehash

Vagrant に Chef をインストール

Vagrant の VM へ Chef をインストールするためのプラグインを導入します。

$ vagrant plugin install vagrant-omnibus

Vagrantfile にも一行追加し、次の起動から常に最新版にアップデートされるよう設定しておきます。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # vagrant-omnibus プラグイン用の記述
  config.omnibus.chef_version = :latest
end

Knife の初期化

Knife Solo インストール後、初期化のコマンドを実行します。

$ knife configure

ワラワラと質問されますが、デフォルトでも先に進めるので割愛。

リポジトリと Cookbook の作成

任意のディレクトリへ移動し Chef のリポジトリを作成します。

$ cd ~/LocalHost
$ knife solo init chef_repo

作成したリポジトリ内に移動後、Cookbook を作成。

$ cd chef_repo
$ knife cookbook create apache -o cookbooks

サンプルでは ~/LocalHost/chef_repo/apache 配下へ作成されたひな形をベースに、あとは煮るなり焼くなりお好みで w

SSL 関連の警告が出たら...

「SSL validation of HTTPS requests is disabled.」といった警告を消すには、次に挙げるいずれか(もしくは両方)の調整が必要です。

knife solo コマンド実行時の警告は、 ~/LocalHost/.chef/knife.rb に一行追記します。
~/.chef/knife.rb にも同名ファイルがあるため、間違わないように注意します。

ssl_verify_mode  :verify_peer

vagrant up や vagrant provision した際の警告は、Vagrantfile を修正します。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provision :chef_solo do |chef|
    # ssl_verify_mode の設定
    chef.custom_config_path = "Vagrantfile.chef"
  end
end

指定したパスに Vagrantfile.chef を作成し、設定を記述しておきます。

Chef::Config.ssl_verify_mode = :verify_peer

準備完了

ここまでで、ひと通り準備できました。
あとはレシピを作って、ナイフを投げるだけです w

しかし、終わってみれば思いのほか単純だった・・・ということは、ままありますよね(。-_-。)

comments powered by Disqus