chefとかvagrantとかfabricとか
chefを使いそうなのでその辺素振りしてみる。
chefの前にまずvagrantとvirtualboxをそれぞれダウンロードしてインストール
- Boxファイルの追加
$ vagrant box add centos63 https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box $ vagrant init centos63 $ vagrant box list centos63 (virtualbox)
- saharaプラグインの追加
$ vagrant plugin install sahara $ vagrant plugin list sahara (0.0.16)
- sandbox on
$ vagrant sandbox on 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% $ vagrant sandbox status [default] Sandbox mode is on
- ゲストOSの起動
$ vagrant up
$ vagrant ssh [vagrant@localhost ~]$
- ~/.ssh/configへの追加
$ vagrant ssh-config --host host1 >> ~/.ssh/config $ ssh host1 [vagrant@localhost ~]$
これでvagrantの準備は整ったのでホストOS側でchef環境を整備する。
chefはrubyで出来ていてgemでインストール出来るんだけどsystem rubyを使うのもアレだしrbenvでも良いんだけどrbenv rehashとか忘れそうなのでxbuild使ってみる。
- xbuild install
$ git clone https://github.com/tagomoris/xbuild.git
- xbuildでruby-1.9.3-p448をinstall
$ xbuild/ruby-install 1.9.3-p448 ~/local/ruby-1.9.3-p448 $ export PATH=.../local/ruby-1.9.3-p448/bin:$PATH
- chefとknife-soloのinstall
$ gem install chef $ gem instll knife-solo
- knifeの初期設定
$ knife configure
- chefリポジトリの作成
$ knife solo init chef-repo $ cd chef-repo/ $ ls cookbooks data_bags environments nodes roles site-cookbooks
- knife soloの準備
$ knife solo prepare host1 Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 6790 101 6790 0 0 1137 0 0:00:05 0:00:05 --:--:-- 19738 Downloading Chef 11.8.0 for el... Installing Chef 11.8.0 警告: /tmp/tmp.i3lCsktz/chef-11.8.0.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY 準備中... ########################################### [100%]
これでゲストOSでchef-solo が実行できるようになる。
- phpをinstallするレシピを作成してみる
$ knife cookbook create php -o site-cookbooks ** Creating cookbook php ** Creating README for cookbook: php ** Creating CHANGELOG for cookbook: php ** Creating metadata for cookbook: php
- site-cookbooks/php/recipes/default.rb
package "php" do action :install end
- nodes/host1.json
{ "run_list": [ "recipe[php]" ] }
- レシピを実行してゲストOSにphpをinstallしてみます。
$ knife solo cook host1 Running Chef on host1... Checking Chef version... Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.8.0 Compiling Cookbooks... Converging 1 resources Recipe: php::default * package[php] action install - install version 5.3.3-23.el6_4 of package php Chef Client finished, 1 resources updated
再度実行しても冪等性があるのでもう1回installされることはありません。
$ knife solo cook host1 Running Chef on host1... Checking Chef version... Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.8.0 Compiling Cookbooks... Converging 1 resources Recipe: php::default * package[php] action install (up to date) Chef Client finished, 0 resources updated
そうすると
[vagrant@localhost ~]$ php -v -bash: php: コマンドが見つかりません
だったものが下記のようになります。
[vagrant@localhost ~]$ php -v PHP 5.3.3 (cli) (built: Jul 12 2013 20:35:47) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
- 変更をcommitしてみます。
$ vagrant sandbox commit 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
rollbackも試してみます。
ゲストOSの/tmpを削除してみます。
[vagrant@localhost ~]$ sudo rm -rf /tmp [vagrant@localhost ~]$ ls / bin boot cgroup dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys usr vagrant var
rollbackします。
$ vagrant sandbox rollback 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
/tmpが復活してますね。
[vagrant@localhost ~]$ ls / bin boot cgroup dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr vagrant var
ミドルウェアのインストールはchefで良いと思いますがアプリケーションのdeployなんかはchefじゃなくてデプロイツールを使うかもしれません。
なのでcapistranoを調べようかと思いましたが下記の理由からカジュアルに試すにはちょっとつらそうだったので以前触ったことあるpython製のfabricを試します。
- ちょっと重厚な気がした
- ver 3系とver 2系があってネットにはその辺の情報が混在している感じ
system python使うのもアレだしpythonbrewしてほげほげするのもアレなのでxbuildでpythonをインストールしてみる。
- xbuildでpythonをinstall
$ xbuild/python-install 2.7.5 ~/local/python-2.7.5 $ export PATH=.../local/python-2.7.5/bin:$PATH
- setuptoolsのinstall
$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py $ python ez_setup.py
- fabricのinstall
$ easy_install fabric
- fabfile.py
from fabric.api import run def host_type(): run("uname -s")
しかし実行するとエラー
$ fab -H host1 host_type [host1] Executing task 'host_type' [host1] run: uname -s Fatal error: Name lookup failed for host1 Underlying exception: nodename nor servname provided, or not known Aborting.
どうも~/.ssh/configを見れていないようでググってみると以下のようにすればいいらしい。
from fabric.api import env,run env.use_ssh_config = True def host_type(): run("uname -s")
実行するとできた。
$ fab -H host1 host_type [host1] Executing task 'host_type' [host1] run: uname -s [host1] out: Linux [host1] out: Done. Disconnecting from vagrant@127.0.0.1:2222... done.
ついでにfabricのwebフロント版auroraなるものを試そうとしたんだけどドキュメントがほとんどないしエラーが出たりとちょっと使うのは厳しい感じ。
https://github.com/ak3n/aurora
capistranoだとwebistranoなるものがあるようだけどこちらは更新が止まっている感じ
https://github.com/peritor/webistrano
参考にしたもの
- 作者: 新原雅司
- 出版社/メーカー: 技術評論社
- 発売日: 2013/09/12
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (19件) を見る