最近PrePANのcarton 1.0化を進めていたのですが、その過程でvagrantでローカル開発環境をちゃんと作れるようになったので手順を書いていきます。結果として簡単なperlのwebアプリを動かすための、小規模なchefのrecipeの例の一つが出来たと思うので参考にどうぞ。
必要なrepositoryをclone
まずGitHub - metacpan/prepan-cookbooksとGitHub - metacpan/prepanの両方が必要なのでcloneします。
$ git clone https://github.com/CPAN-API/prepan.git $ git clone https://github.com/CPAN-API/prepan-cookbooks.git
利用するライブラリのインストールと設定
詳しくはREADME.mdに書いてありますが、vagrantでのローカル開発環境だけであれば以下の手順です。
まず必要なものをインストール。
$ cd prepan-cookbooks $ gem install bundler $ bundle install --path vendor/bundle $ bundle exec librarian-chef install
あとvagrantが必要なので、http://docs.vagrantup.com/v2/installation/index.html あたりから最新を入れます。
便宜的に~/.ssh/configや/etc/hostsにlocalのPrePAN用の設定を追記。
~/.ssh/config
Host local.prepan.org HostName 127.0.0.1 User vagrant Port 2222 IdentityFile ~/.vagrant.d/insecure_private_key
/etc/hosts
127.0.0.1 local.prepan.org
ここまででとりあえず利用するもののセットアップは終わりです。
vagrantのVMにchefを適用
次にVMを立ちあげてchefの適用をします。
まずVM起動。多分初回は時間かかります。
$ vagrant up
それでchef適用。
$ bundle exec knife solo prepare local.prepan.org $ bundle exec knife solo cook local.prepan.org
これでサーバ構築は終わりです。
PrePANをvagrantのVMにデプロイ
この部分がまだ結構面倒な感じなんですが、とりあえずデプロイしたらPrePANが動きます。ここからはprepanのrepositoryで作業します。
$ cd prepan
まずlocalの設定ファイルを作ってあげます。local/development.eg.plに例があるので、コピーし、必要なところだけ編集します。
$ cp local/development.eg.pl local/development.pl
local/development.plのTwitterやGithubのconsumer_key辺りは適宜自分でTwitterやGithubでアプリケーション登録して設定を埋めてください。
あとはcinnamonを使ってデプロイしたらとりあえずlocalで動きます。
# 初回のみ $ cpanm Cinnamon $ cinnamon development deploy:setup:dir deploy:config deploy:update deploy:setup:db $ cinnamon development web:start worker:start # その後の反映 $ cinnamon development deploy:update web:restart worker:restart
この状態でhttp://localhost:5000/にアクセスするとPrePANが見えると思います。この辺りかなり煩雑なのでもしかしたらもうちょっと調整するかもしれません。
技術的Tips
簡単なperl webアプリ用chef recipe
今回はvagrantとchefを使って、まっさらなVMからPrePANを動かすまでをやってみました。そのため簡単なperlのwebアプリを動かすためのchefのサンプルが一つ出来たような気がしています。
この過程で最終的に出来たchefのレシピはhttps://github.com/CPAN-API/prepan-cookbooks に公開してあります。local用のnodeの設定はnodes/local.prepan.org.jsonに置かれていて、その中では例えば以下の様なサーバのセットアップをしています。
- 必要なpackageのinstall(gcc, daemontools, gitなど)
- userのセットアップ
- mysqlのセットアップ
- nginxのセットアップ
- redisのセットアップ
- xbuildによるperlのインストール
vagrantを使ったchef recipeのテスト
vagrantを使えばchef recipeの適用と確認が簡単に出来ます。今回であれば以下のコマンドだけ使えば確認と修正が出来ました。
# chef適用 $ vagrant up $ bundle exec knife solo prepare local.prepan.org $ bundle exec knife solo cook local.prepan.org # うまく行かなかったら修正 $ bundle exec knife solo cook local.prepan.org # 修正しながら適用を繰り返す # 最初からやり直したかったらdestroyすればまっさらなVMに戻る $ vagrant destroy $ vagrant up $ bundle exec knife solo prepare local.prepan.org $ bundle exec knife solo cook local.prepan.org
またもう少しちゃんとするのであれば、vagrantで立てたVMに対してserverspecのようなものを使って、テストを作っておくと良さそうです。
vagrantのsynced folderという仕組みを使う
今回はlocalで開発するのに、cinnamonでデプロイしなければ確認できないという状態になってしまっていました。それだと煩雑なので、vagrantのsynced folderという仕組みを今後使ってみたいと思っています。