takatoshi blog

メモ帳

[Chef][serverspec]ChefSoloを使ってnginx+mysql+rubyサーバー(VPS)を30分で作る

何かアプリを書いた時にVPSなんかで公開しようとすると
「パッケージをインストールしてアプリ書いてサーバーの設定変更してデプロイ環境を作って…etc」
と色々作業しないといけないので非常にめんどくさい。
昨今heroku/sqale/engineyardなんかのPaasもあるけれど、やっぱり自由度の高い環境を安価に欲しい場面ありますよね

ってことで

  • サーバーの基本設定(ユーザーの作成やファイアウォールの設定,リモートログイン環境の整備,パッケージインストールなど)
  • アプリケーションの稼働環境の整備/環境のテスト,稼働

この範囲を自動化してサクッとサーバー作ります。
サンプルコードを置いているので、使ってもらえればサクッとサーバー作れます。

サーバーの基本設定

サーバーのプロビジョニングはChef-Soloでやります。
Cookbookはこれ
https://github.com/TakatoshiMaeda/webserver-cookbooks

このcookbookとknife-soloを使えば

1
  bundle exec knife solo bootstrap foo@bar.com -N bar.com

この1コマンドでChefのセットアップと各種インストール/設定が走ってサーバーできあがります。簡単!!!

CookbookのREADMEに手順を書いておきました、確認してみてください。
READMEの手順通りにやればサーバーが簡単に出来上がります。

内容をもっと詳しく見たい場合にはこの本がおすすめです。
入門Chef Solo - Infrastructure as Code
この本ひと通り読めばChefの概要をつかめますし、自力でcookbook書けます。

さくらのVPSサーバー(CentOS6.3)に対して実行してみると、まっさらなOSの状態から20〜30分くらいでサーバーを作れます。
他のOS/ベンダーさんでも同様のはずですが、テストしていないのでわかりません。

アプリケーション稼働環境

さて次はアプリのデプロイです。
サンプルはこちら https://github.com/TakatoshiMaeda/testapp

サーバーに対してアプリを追加しようとすると

  • アプリを書く
  • デプロイ
  • Webサーバーの設定書き換え

をやらないといけない。

この中でWebサーバーの設定書き換えがちょっと面倒。
chefでサーバーの管理してるとアプリケーション固有のWebサーバー設定がcookbookの中に散らばってしまう。
こうなってしまうと、アプリのWebサーバーの設定をしたいときにいちいちchefのリポジトリ行って設定書き換えてpushしてchef-solo走らせて…としなければならず面倒。
んで、Webサーバーの設定はアプリに属する情報なのでアプリのリポジトリで管理すればいいのではと思ったらありました。

[capistrano-nginx]https://github.com/TakatoshiMaeda/capistrano-nginx
※本家が開発滞り気味みたいなのでforkリポジトリにリンクを貼ってます。
 あとでプルリク送る。

capタスクでnginxの設定ファイルをデプロイしてくれるgem。

config/deploy/nginx_conf.erbを書いてれば、デプロイ時にリモートサーバーのnginx設定にプロキシ設定を追加してくれます。
べんり!!!!

  • アプリとサーバーのconfigを書いて
  • デプロイ

これだけで稼働するようになりました。

サーバーのテスト

設定のデプロイまで自動化しましたが、確認のためにサーバーにログインして手で確認するのはせっかく自動化したのにカッコ悪いので、
アプリケーションの稼働要件を満たしているかはserverspecで確認してます。
こういった構成を組むときにserverspecのシンプルさが非常に便利でいいです。
アプリの動作に必要な設定がしっかり反映されているかをアプリリポジトリのテストで完結させることができるので、
情報があちこちに散らばったりすることなく、cookbookとアプリの依存を低くできます。
cookbookはサーバーの構成/設定のみ、アプリが必要なサーバーの設定などは全てアプリリポジトリで完結って感じです。

リポジトリ内のconfigとspecディレクトリを見てもらえれば雰囲気はつかめるかと思います。
簡単な解説をREADMEにも書いておきました。

これだけ簡単にサーバー構築できるのであれば、PaaSよりもVPS借りて済ませたほうがお手軽に安く済みますね。 けど、スケーリングが面倒くさそうなのが難点なので、そこも自動化できたらすごく幸せ。
knife ec2やAWSのオートスケーリング,RDS使えば割と簡単にいきそうだけど個人使用だとPaaSよりはマシかもですが料金がネックですね。。。
改めてAWSすごい。

時間があったらknife-soloのコマンド内で何をやってるのかとcookbookの構成内容についてのメモを書こう。

Comments