はじめに
この記事は「Gunosy Advent Calendar 2014」の7日目の記事です。
おまだれ
Gunosyの小出と申します。主にプロビジョニングとかデプロイを担当してます。
たまにapiとかのコードを書いてます。
GunosyにおけるGoサーバのデプロイ
※2014/12現在の状況です(今後良い方法があれば変更していくと思います)
デプロイ全体
Gunosyでは、サーバプロビジョニング・デプロイに、Chefレシピ + AWSのOpsworksを利用しています。
ざっくりデプロイ手順としては、
- テストが通ればビルド
- バイナリとその他ファイルをtar.gzに固めてS3にupload
- OpsworksでS3からサーバに展開&プロセスマネージャを再起動
といった手順でやっています。
プロセスマネージャと周辺レシピ
GunosyのGoプロダクトはいくつかありますが、プロセスマネージャとしては、基本的にeinhorn(または状況に応じて一部supervisor)を利用しています。
いずれの場合も、共通化できるところはなるべく共通化し、ちょいと実行レシピをすげかえればOKみたいな感じにしています。
下記2つのパターンとも、ConfigureとDeployで利用しているCookbook/Recipeは全く一緒のものです。
このへんを参考にconfigファイルを作ったり、このへんを参考にして、起動/停止スクリプトの配備をしたりしています。
einhornを利用したサーバの一例
supervisorを利用したサーバの一例
まとめ
共通化できるところはなるべく共通化
と、一言で書きましたが、再利用性を高めるために、共通の設定/プロダクト固有の設定の分離や、configファイルの書式・構造の統一、など、結構苦戦しています。
その話はまた別の機会にできたら、と思います。