$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

PrePANのローカル開発環境をchefとvagrantで整えられるようにしました

 最近PrePANのcarton 1.0化を進めていたのですが、その過程でvagrantでローカル開発環境をちゃんと作れるようになったので手順を書いていきます。結果として簡単なperlのwebアプリを動かすための、小規模なchefのrecipeの例の一つが出来たと思うので参考にどうぞ。

必要なrepositoryをclone

 まずGitHub - metacpan/prepan-cookbooksGitHub - 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

 ここまででとりあえず利用するもののセットアップは終わりです。

vagrantVMにchefを適用

 次にVMを立ちあげてchefの適用をします。

 まずVM起動。多分初回は時間かかります。

$ vagrant up

 それでchef適用。

$ bundle exec knife solo prepare local.prepan.org
$ bundle exec knife solo cook local.prepan.org

 これでサーバ構築は終わりです。

PrePANをvagrantVMにデプロイ

 この部分がまだ結構面倒な感じなんですが、とりあえずデプロイしたらPrePANが動きます。ここからはprepanのrepositoryで作業します。

$ cd prepan

 まずlocalの設定ファイルを作ってあげます。local/development.eg.plに例があるので、コピーし、必要なところだけ編集します。

$ cp local/development.eg.pl local/development.pl

 local/development.plのTwitterGithubのconsumer_key辺りは適宜自分でTwitterGithubでアプリケーション登録して設定を埋めてください。

 あとは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という仕組みを今後使ってみたいと思っています。

まとめ

 今回はlocalでPrePANのセットアップを紹介しました。結果としてchefを使って簡単なperlアプリが動くサーバ構築をするchef recipeが出来たので紹介をしました。あんまりまとまらなくなったので今日はこれで終わります。次回は多分ここで使ったchefのrecipeを使ってAWSで無停止デプロイする話をすると思います。