Vagrant + Chef solo + Berkshelfを試してみたのでまとめ

xv6ソースコードの読解とテキスト翻訳はどうした、と言われそうですが、
なかなかまとまった時間じゃないと作業進まなくて、ちょっとしたスキマ時間
では、溜まってた試してみたいことなんかをやっています。

今回はVargrant + chef solo + Berkshelfという構成に関してです
(本筋のxv6に関してもちゃんと進めてます、ゆっくりですが・・・)

目的

例えばチームで開発を行うときに、開発されているソースコードを
実行する環境は、プログラマ、デザイナー、テスターでそれぞれ
ローカルに用意することが多いですが

その場合、往々にして発生する問題が「僕のところでは動いているのに、
他の人の環境になると動かない・・・」という問題。プログラマはUbuntu、デザイナーは
Mac、テスターはwindowsなんてよくありそう。

その原因はOSだったりインストールされている他のモジュールのバージョンが
違っていたりと、挙げるとキリがないほどあります。並行作業してる
他のプロジェクトで行った設定が原因で動かない、なんてことがあると、
どうしようもなくなります。

それらを解決してくれるのが今回のVagrantと、併せて利用する
ツール群

「ある目的を実現するための環境や設定を専用に用意し、
チーム(または個人)共通のものとして構築する」などの目的で利用すると便利
です。

WEB開発を複数プロジェクト進めていくとVirtualHost設定がどんどん膨れ上がったりしていく
のは僕にも経験があります。いちいちVirtualHost設定じゃなくて、専用の環境があったら
(しかも簡単に構築できたら)ありがたいですよね。

概要

この記事ではopscodeからcookbookのひな形を
ダウンロードし、仮想環境でそれらをそのまま実行するまでを
紹介します。(とりあえず使ってみたい人向け)

それぞれのソフトウェアやOSの細かい設定などは取り扱ってません。
僕が必要になれば別途記事にまとめるかもしれません。

1. Vagrant

異なる環境に簡単に以降できる開発環境を構築・管理して配布したり
することができる環境構築ツール。

環境に関する設定ファイル(VagrantFile)を
ヴァージョン管理すれば、環境が変わっても、コマンド一発で環境を消して
また再構築するだけで済みます。デフォルトでフォルダ共有設定も行ってくれます。

2. Chef solo

サーバ構成を管理するためのツール。本来はサーバとクライアントを用意して
サーバをクライアントから確認することで、サーバ構成を共通にするツール(Chef serverとChef client)
ですが、それをCookbookと呼ばれる構築手順が記述されたファイルに添って
クライアント/サーバモデルでなく、1台でも構成を管理できるようにしたものが
chef solo(であってますよね・・・?)

こちらもchef soloに関する専用のディレクトリをチーム間でバージョン管理すれば
すぐに、サーバに設定変更を反映させることができます。

イメージ的には

  • VagrantはVMそのものを作成するためのツール
  • Chef soloはVagrantで作成したVM(仮想環境)に指定したツールのインストールや設定を自動で行うツール

という感じです。

3. Berkshelf

Vagrant + Chef Soloでも1から仮想環境を構築(設定も含む)することに比べたら、
かなり自動化が進むのですが、さらにBerkshelfを利用することで、
Chef soloで用いるcookbook(インストールしたいソフトウェアと、
その設定などが記述されたファイル)のひな形を自動で取得・生成することが可能になります。

ここまで来ると、手作業でするのは、いよいよ環境独自に必要な細かい設定だけになります。
インストールするだけならひな形だけでも問題ないので、コマンド入力以外の手作業を、
ほぼ全部省略して環境構築が終わります。


今回利用するツールは以上3つです。

インストール

僕はMacOSC 10.9 Mervericks上で動作を確認しています。

Vagrantのインストール

Vagrant公式サイトから.dmgファイルをダウンロードして
インストールするだけ。

インストールができているかの確認は

で表示されればOKです。僕の環境では1.3.5です。

Chef solo, Berkshelfのインストール

※gemコマンドにはrubyが必要です。まずはgemがインストールされているかチェックしてください

超ざっくり使い方手順

※インストールまでは終わってる状態です。

1. [Vagrant編] ひな形のOSイメージをインストールする

URLはboxファイルが存在するパスかURLを指定してあげます。

ここ(Vagrant.es)
に有志で配布されている様々な環境のboxが公開されています。
※あくまで有志なのでリンクが切れていたり、チュートリアルがスムーズに
進まない場合があるboxも含まれているので注意してください。

チュートリアルではhttp://files.vagrantup.com/precise32.box
が利用されている場合が多いです。

2. [Vagrant編] VMを作成する

カレントディレクトリに設定ファイルが作成されるため
可能であれば、専用のディレクトリを作成することをオススメします。

これを終えた段階でカレントディレクトリにVagrantFileという
環境設定のためのファイルが作成されます。

必要があれば、こちらを編集することでVMの設定を変更することができます。

例えば、コメントアウトされている上記の行をアンコメントすることで
仮想環境に固定IPアドレスが割り当てられます。

3. [Vagrant編] VMを起動する

初回起動時のみ、boxからVMを構築するため若干時間がかかります。
プロビジョニング(chefなどで環境設定を行う処理)も初回起動時のみ
動作します(Vagrant 1.3.0以降)

あとは

で環境にsshログインができます。
ちなみに、sshログインは公開鍵暗号で行われており~/.vagrant.d/insecure_private_keyが
秘密鍵になっています。

ssh設定を確認したいときは

で表示することができるので

することで自分の環境から簡単にログインできるようになります。

番外 [Vagrant編] プラグインとコマンド補足

その他、よく使いそうなコマンド集

いろんな人がすすめてるプラグイン

これらの解説はこの記事ではしていません。
もし必要であればぐぐってみてください。(この記事でやってることは
多分なくてもできると思う)

1. [Chef solo + Berkshelf編] Chefの設定ファイルなどを格納する専用ディレクトリのひな形を作成する

VagrantFileが作成されたディレクトリで

を実行することで、ひな形が作成されます。chef-repoというディレクトリ名が
つけられるケースを、ぐぐった限りではよく見かけました。

2. [Chef solo + Berkshelf編] Berkshelfでダウンロードしたいcookbookのひな形を決定する

前述の手順でchef専用ディレクトリを作成すると、そのディレクトリの中に
BerksFileというファイルが作成されます。(chef-repoという名前をつけたことにします。)

このファイルで、どのひな形を入手するかを
記述します。(なければ自作してOKです。)

とりあえず上記がサンプル。

opscodeというcookbookを公開している場所からpythonとnginxとgitの
cookbookをダウンロードすることを意味しています。

ちなみにopscodeのcookbookはこちら

この中にあるものであれば、誰でも好きに利用できるようです。

編集が終わったら

とすることでcookbookをダウンロードし、chef-repo/cookbooks/ディレクトリの中に
関連するファイル群を保存してくれます。

この中で、それぞれのソフトウェアに対する設定なんかを記述できますが、今回は
省略(色々ありすぎるので)

とりあえず一連の流れを利用できることを目標にしています。

3. [Chef solo + Berkshelf編] 構築した仮想環境にchefをインストールする

chefを仮想環境上で動作させるためには、仮想環境自体にchefが入っていることが必要です。

そのため、仮想環境にchefをホストからインストールします。

でホストから仮想環境へchefのインストールができます。
もし、

というエラーが出たら、~/.ssh/known_hostsにVMのIPアドレスの情報が残っている可能性があるので、
その1行を消して下さい。~/.ssh/known_hostsをIPアドレスで検索すればすぐに見つかると思います。

していれば

でももちろん実行可能です(わざわざ書かなくてもいいか・・・)

ここまで実行するとchef-repo/nodes/
の中にjsonファイルが生成されます。(default.jsonとか、[host名].json)
いよいよもう少しです。

4. [Chef solo + Berkshelf編] VMにcookbookで指定したソフトウェアのインストールや設定を反映させる

chef-repo/node/の中に入っているjsonファイルに、実際に利用するcookbookを指定してあげます。

というひな形があるので、runlistの中に実際に実行するcookbookの名前を記述します。

これでOK。

最後に、実際に仮想環境にこれらをインストールすることを指示してあげます。
(※カレントディレクトリはchef-repoです)

するだけ。これで対象の仮想環境にpythonとnginxがインストールされました。
めでたしめでたし。


以上です。
とりあえずcookbookのひな形をもってきてインストールするだけ。までをやりました。
次回またまとまった内容があれば、プロビジョニングやアプリケーション、OSの細かい設定
などを行っていきたいと思います。
(この記事の内容だけだとnginxはインストールされただけで、実行されてないしw)

参考にさせていただいたリンク


追記

2013/11/18

  1. リンク先が違っているとご指摘いただいたので、修正いたしました。

  2. コメントにいただいているように、Vagrant-Berkshelfプラグインを導入すると更に手順を簡略化することもできそうなので
    後日手元で動作を確認後、文章がまとまればブログにしてみたいと思います。機会があれば読んでいただけると嬉しいです。

よろしくお願いします(・∀・)

Vagrant + Chef solo + Berkshelfを試してみたのでまとめ」への4件のフィードバック

  1. Vagrant-Berkshelfプラグインを使えば途中のBerksを使った作業などが不要になると思うのですが、あえてローカル側にもBerkshelfを入れる利点はなんでしょうか。

    • コメントありがとうございます!

      とりあえず僕が現状知る限りでは、特別なメリットがあるわけではないです。
      (敢えてあげるならVagrantなしでcookbookが管理できる、という点ですか・・・)

      ただVagrant + Chef solo + Berkshelfの構成で僕自身が初めてVagrantを触ったので
      このような内容でブログを書かせていただきました。
      この構成や手順がベストである、ということではありません。

    • おぉ…Vagrant単独でもそこまでできるものなのですか!?vagrant-Berkshelfプラグインの関して調べるのと一緒に、その辺りも確認してみます!コメントありがとうございます

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です