ChefやらVagrantやらで開発+Web+DBサーバをごにょっとたてるCookbooks

タイトル通り。開発サーバ、Webサーバ、DBサーバをごにょっとたてるChef SoloのCookbooksをざっくり書いてみた。

後述の通り実際に流すのは勇気が要る感じだが、情報的に何かの足しになることがあるかもしれないということで公開。

https://github.com/t-yamo/app-server-cookbook
(当エントリ記載時点のバージョン→ https://github.com/t-yamo/app-server-cookbook/tree/v0.0.2

※注意:rootのssh禁止処理が入っています。リスキーなので大事なサーバに流す前に手元のVagrant環境などで流して具合を見てください。rootのssh禁止後はdevuserで公開鍵認証でログインする形になります(chefもdevuserで流すことになる)。事前にrootでsshログインしたままにしておくとdevuserの設定中に停止した場合などに少し救出しやすくなります。

基本的にはnginx+MySQL+gitリポジトリという構成なのだけれど以下のものを盛り込んでいる(他にも細々やってるけど)。

  • 全サーバにruby/rbenv/bundlerを導入。
  • 全サーバにremi/epelリポジトリを登録。
  • 全サーバにdevuser:staffというsudoersユーザを追加。公開鍵認証。
  • 全サーバでrootのsshを禁止。
  • 全サーバでiptablesを設定(さくらVPSベース。各サーバ毎に開けているポートが異なる)。
  • DBサーバの/exportsをNFSで公開してWebサーバから/mnt/shareでautofsマウント。
  • 開発サーバにgitoliteを導入。
  • 全サーバにmunin-nodeを導入して開発サーバにmunin本体とコンソールを追加(nginxの情報入ってないけど)。
  • DBサーバのMySQLと/exportsをアーカイブして開発サーバにバックアップ。
  • 開発サーバのMySQLリポジトリアーカイブしてDBサーバにバックアップ。

基本的にはREADME.mdの「Step」を上からなぞっていくとCentOS 6ベースのVagrantとかさくらVPSで3サーバ環境が出来上がる(「Note」も必読)。

「折角nginxとmunin入れてるのにmuninでnginxの情報取ってない」とか「Web/DBサーバ構成でphp入れてるならphp-fpmとかも入れておけよ」とか「冪等性イマイチじゃね?」とか「この甘さでrootのssh禁止を盛り込んでるのでどこかでしくじると詰む可能性あり」とか「既存Cookbookのカスタマイズのやりかたおかしくね?」とか改善のしどころがいろいろありそうだけど、急激に更新する気力がなくなってしまったので、このまま晒すなど。