盆栽日記……のはずが。
この記事はKMCアドベントカレンダーの23日目の記事です。昨日の記事は、hideya先輩の
八ツ橋シューティングについて(後編) 【KMCアドベントカレンダー22日目】 - KMC活動ブログ
でした。 みなさん、こんにちは。最近KMC平部員に昇格したlastcatです。実家にある盆栽(かつてサーバーのことをそう例えた先輩がいて僕はそのたとえがすごく気に入ったのでそう呼んでます)のお世話をした日記を淡々とつづろうと思ったのですが、祖母がLANルーターの電源を「フン!」と抜いてしまったせいでまったくお世話が出来ずに、この計画は頓挫しました。それもこれも現実に存在する盆栽(サーバー)に頼っているからこんなことになるんだ、というわけで仮想盆栽(マシン)、vagrantについて少し調べたのでお話をします。qiitaあたりで調べると1000件くらい出てきそうなただのチュートリアル記事になってしまいましたが、どうか暖かい目でお見守りください。
vagrant is
vagrantとはコマンドラインで利用するVM(仮想マシン)です。何らかの開発環境を用意するときなどにいちいちサーバーを構築するわけにもいかず、また、普通にvirtualboxで仮想マシンを使うにも、色々と無駄が多いですよね。そういう時に使うと思います。
導入するにはVirtualBoxとvagrantをインストールする必要があります。僕は以下の記事を参考にしましたが、
Ubuntu13.04にVirtualBox+Vagrantをインストールする - Qiita
vagrantとVirtualBoxのverがかみ合わないというエラーが出たので、以下の記事を参考にしました。
Vagrant 1.3.4 が Virtualbox 4.3 に対応してないので Virtualbox公式のコマンドから対応する方法 - Qiita
これで、導入は終わりです。次に、実際にOSをインストールしてみます。
導入、セッティング
vagrant用のOSイメージはboxといって、
vagrant box add <label_name> <imagefile_url>
というコマンドで取得します。URLは上記の記事のやつをそのまま使えばいいと思います(僕が違うところから取りましたからもしかしたら動作が異なるかもしれません、ごめんなさい。一応OSの種類は同じ(CentOS)だから大丈夫だとはと思いますけど……)。
無事にvagrantをインストールして、boxを追加できたら、一度仮想マシンを作ってみましょう。適当なディレクトリを作って、
vagrant init <label_name> vagrant up
とすると、ログがバーッと出て、仮想マシンが起動します。マシンに入りたいときは、
ssh vagrant
とすれば、 vagrantにsshログインできます。めでたい。ちなみに停止、破棄はそれぞれ、
vagrant halt vagrant destroy
というコマンドを使います。
これで終わりだとちょっとボリュームがあんまりなので、もうちょっと書きますね。と言っても僕が試せたところまでなんですけど。
chefを使う
chefはコードによってサーバーの構成を管理するツールです。詳しくはググってください。もちろんvagrantにも適用することができるので最後にそのステップを簡単に紹介して終わろうと思います。
vagrantにsshにしてchefをインストールするのは僕的になんだか嫌だったので("chefをインストールする"ということがレシピに含まれていないのが気持ちわるい……)、knife-soloを使いたいと思います。knife-soloはホスト側からリモートサーバーの構成を設定できるツールです。
gem install knife-solo
でインストールします。bundlerを使ってもいいでしょう。
次にchefレポジトリを作ります。先のvagrant initをしたディレクトリに移動して(Vagrantfileとかいうファイルとかがあるところです)、
knife solo init .
とします。すると、関係ファイルが生成されます。これをそのままGitレポジトリにすると、パッケージ内容をバージョン管理できていいと思います。その際Vagrantfileは.gitignoreするといいでしょう。
次に
knife solo prepare 127.0.0.1
とすると、勝手にsshログインして設定を整えてくれます。なお、ipをホスト名にしたい人は一度
vagrant ssh-config --host <hostname> >> ~/.ssh/config
とすると、設定できます。そうすると、
knife solo prepare <hostname>
という風に書けます。 あとは一つ一つ設定を書いていけばいいはずです。一つの設定を追加、適用するまでのステップを書いて終わろうと思います。
knife cookbook create <setting_name> -o site-cookbooks
適当なエディタで、レシピを編集します。
vim site-cookbooks/<setting_name>/recipes/default.rb
たとえば<package_name>をインストールするとすれば、
package <package_name> do action :install end
みたいに書きます。最後に設定をデプロイするのに、
knife solo cook <host_name> -o <setting_name>
とすれば、デプロイされるはずです。お疲れ様でした。
本当は、この後serverspecを使ってテストした挙句、やっぱり最後はDockerだよね、みたいな話に持っていきたかったのですが、付け焼刃すら間に合いませんでした……(前日に怪しいアドベントカレンダー書いてる場合じゃなかったんだ)。