ConoHa + DokkuでプライベートPaaS構築


今まではHerokuのFreeプランでWebアプリやHubotを運用していました.
しかし,6月からの新料金では,24時間稼動が出来なくなりました.
Hubotは研究室やアルバイト先で使っているので,死活問題です.

そこで,Hobbyプランに移行するのではなく,VPSを借りてプライベートPaaSを構築することにしました.
Open PaaSはDeisFlynnを検討しましたが,以下の理由でDokkuにしました.

  • 各アプリは1 dynoで運用
  • PaaSは1 node(VPS 1台)で運用
  • Dockerベースでシンプルな構成

Open PaaSについては,PaaS勉強会@jacopenさんのスライドが参考になります.

ConoHaとお名前.comの契約

VPSはさくらインターネットConoHaで悩みました.
ただ,料金もほぼ同じなので キャラクターが可愛い という理由でConoHaにしました.
こちら から登録すると,1000円分のクーポンが貰えます.
イメージOSは「Ubuntu 14.04(64bit)」,接続許可ポートは「SSH」と「Web」を選択します.

合わせて,同じGMOが運営するお名前.comでドメインをします.
今回はhiconyan.comを680円/年で契約しました.
このとき,無料のWhois公開情報代行を申し込むのを忘れずに.
取得できたら,以下の記事を参考に,名前解決時にVPSのIPアドレスを返すようにします.

また,Dokkuでは app.hiconyan.com のように,Virtualhostを利用します.
そのため, *.hiconyan.com も名前解決できるようにしておきます.

Dokkuのインストール

DokkuはHerokuインスパイアのOpen PaaSです.
機能は限定されますが,Dockerと200行のBashスクリプトというシンプルな構成です.
(v0.3からはDockerfileのデプロイアプリのスケールも可能になりました.)
Buildpack対応なので, git push するだけで使えます.

インストールは公式に従って,以下のコマンドをコピペするだけ.
(DokkuやDockerのパッケージ,herokuishがインストールされます.)

$ wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh
$ sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh

完了したら,VPSの80番ポートにアクセスして,Webで初期設定を行います.

  • Public Key : Gitで使う公開鍵 ( https://github.com/username.keys など)
  • Hostname : 取得したドメイン ( hiconyan.com など)
  • Use virtualhost naming for apps : チェック

おすすめプラグイン&ツール

よりHeroku的に使うために,おすすめのプラグインとツールを紹介します.

HerokuのMaintenance Mode的なプラグインです.
dokku maintenance:on <app> で,メンテナンス中画面に切り替えられます.

HerokuのDeploy Hooks的なプラグインです.
dokku slack:set <app> <webhook_url> で設定しておくと,デプロイ時にSlackに通知してくれます.

DokkuはHerokuと違って, apps:createconfig:set をPaaS(サーバ)上で叩く必要があります.
docklandを使うと,それをクライアント(開発機)から実行でき,非常に便利です.

アプリのデプロイ

ここからは,docklandを導入した前提で,Dokkuにデプロイしていきます.
サンプルは,僕が作ったGo言語製のWebアプリ「kakuzuke」を使います.
ポイントは,docklandを実行する為に,先に git remote を登録しておくことです.

$ git clone git://github.com/hico-horiuchi/kakuzuke.git
$ cd kakuzuke
$ git remote add dokku [email protected]:kakuzuke
$ dockland apps:create kakuzuke
$ dockland config:set GITHUB_ACCESS_TOKEN=your_access_token
$ git push dokku master

これでBuildpackを使ってコンテナがビルドされ,NginxのVirtualhostが設定されます.
Dokkuにアクセスすると,アプリが実行されているはずです.

監視について

Sensu Deep Talksの主催者としてはSensuを使いたいですが,監視サーバが必要になってしまいます.

そこで,VPSの監視にはMackerelを使っています.
単純にCPUやメモリの使用率を監視し,アラートを通知するようにしています.

また,外形監視(HTTP)はUptime Robotを使っています.
各アプリのURLに定期的にアクセスし,落ちていないかチェックさせます.
(本当はMackerelにしたいのですが,Freeプランでは無理なので….)

まとめ

今回は「ConoHa + お名前.com + Dokku」という構成で,プライベートPaaSを構築しました.
PaaSの構築も,アプリのデプロイも簡単なので,ぜひお試し下さい.

他にも,Railsなどでデータベースを使うには,公式プラグインを使うと良さそうです.
所属するプログラミングサークルではRails開発もしているので,PaaSを活用できればと思っています.

参考文献