今まではHerokuのFreeプランでWebアプリやHubotを運用していました.
しかし,6月からの新料金では,24時間稼動が出来なくなりました.
Hubotは研究室やアルバイト先で使っているので,死活問題です.
- Herokuの新しいプライシングがついに公開。Freeは1日6時間以上Sleepする必要あり - SideCI Blog - SideCIの継続的インテグレーションブログ
- Herokuの新料金はお得なのか - フレクトのHeroku Lab
そこで,Hobbyプランに移行するのではなく,VPSを借りてプライベートPaaSを構築することにしました.
Open PaaSはDeisやFlynnを検討しましたが,以下の理由で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:create
や config: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 dokku@hiconyan.com: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を活用できればと思っています.