IDCFクラウド1周年めでたいですね。
この間からIDCFクラウドの最小インスタンスを借りて日々便利しています。
個人用途で使っていたHerokuに乗せていたアプリをことごとくIDCFクラウドにのせ替えたので紹介します。個人用途なら最小インスタンスでも割りと快適です。
その前に私の感じるIDCFの良さを紹介します。
IDCFの良さ
選んだ理由
子供のお小遣いで済みそうなくらい安いVPSを探していて最終的に、DigitalOceanとIDCFで迷っていました。
- | IDCF | DigitalOcean |
---|---|---|
料金/month | 500円 | $5 |
CPU | 1 | 1 |
RAM | 1G | 1G |
Storage | 20G | 20G |
root | あり | あり |
最小インスタンスの基本的なスペックの比較ですが、気のせいかもしれないですがDigitalOceanをメタっているふうに見えます。両者ともインスタンスを登録後すぐに起動できる点でも似てる..
DigitalOceanのデメリットは為替の影響を受けるので大体700円くらいになってしまうのと、一番近いサーバでもシンガポールなのでアクセスが遅いことです。(あと、管理コンソールが英語)
逆にDigitalOceanのメリットは選べるOSが充実しているところで、CoreOSを使えるのは面白いと思いました。
結局IDCFにしたのですが、決め手はサーバが日本あるのでアクセスが速いことでした。
用途が個人利用のアプリの運用や試運転なのでSSHでログインして作業することが多いのでコマンド1つ1つにいちいち遅延があるとすごくストレスなので、そういう場合サーバが日本にあるのはかなりメリットだと思いました。
使ってて良さを感じる点
- インスタンスが速攻で立ち上がる
- 管理コンソールがわかりやすい
- グローバルIPに対して、ローカルIPからポートフォワーディングする仕組みが良い
- ロードバランサが使える
- Mackerelに公式対応
自分だけのHeroku構築
DokkuというOSSを使えば、IDCFでHerokuライクなPaaSを構築することができ、デプロイ先をHerokuからDokkuに変えるだけで手軽に移行できます。
Dokku
Dokkuはmini-herokuと書いてある通り、HerokuライクなPaaSエンジンです。
Dockerを使っていて、アプリのビルドにはherokuishを使っているのでHerokuで動かしていたアプリは割りとすんなり動きます。
しかし、miniというだけあってできないこともあるので、用法用量を守るのが大事です。
準備
IDCFの最小インスタンスでUbuntu14.04を立てます。
インストール
$ wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh$ sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh
これで必要なパッケージ(dockerやnginxなど)も一緒にインストールされます。
設定
ホスト名とSSH公開鍵の設定をします。foo.barと
# echo "foo.bar" > /home/dokku/VHOST
# echo "foo.bar" > /home/dokku/HOSTNAME
# cat ~/.ssh/id_rsa.pub | sudo sshcommand acl-add dokku <name>
ホスト名は使っているDNSサーバ側でAレコードの設定が必要です。
IDCFクラウドの管理コンソールでファイアウォールとポートフォワーディングで22portを開けておきます。(22portをフルで開けるのは怖いのでファイアウォールでIPを制限すると良いです。)
使い方
Herokuにデプロイしていたアプリのgitリポジトリのremoteにdokkuを追加します。foo.barと
$ git remote add dokku dokku@foo.bar:<project>
"git push dokku"するとdokkuにデプロイが始まり、Herokuで見たことあるような出力が返ってきます。
$gitpushdokkumasterCountingobjects:21,done.Deltacompressionusingupto8threads.Compressingobjects:100%(17/17),done.Writingobjects:100%(21/21),1.81KiB|0bytes/s,done.Total21(delta6),reused0(delta0)----->Cleaningup...----->Buildingpython-samplefromherokuish...remote:Unabletofindimage'gliderlabs/herokuish:latest'locallyremote:latest:Pullingfromgliderlabs/herokuishremote:835c565d00e2:Pullingfslayerremote:c5c659229e15:Pullingfslayer(中略)remote:359e311e765f:Pullcompleteremote:359e311e765f:Alreadyexistsremote:Digest:sha256:7aaa5dd65a7f90a47f2bb1266375b27d4f273ff94495527949536c9e944a871aremote:Status:Downloadednewerimageforgliderlabs/herokuish:latest----->AddingBUILD_ENVtobuildenvironment...(中略)----->DOKKU_SCALEfilenotfoundinappimage.Defaultingtoasinglewebprocess----->NewDOKKU_SCALEfilegenerated----->Runningpre-flightchecksFormoreefficientzerodowntimedeployments,createafileCHECKS.Seehttp://progrium.viewdocs.io/dokku/checks-examples.md for examplesCHECKSfilenotfoundincontainer:Runningsimplecontainercheck...----->Waitingfor10seconds...----->Defaultcontainerchecksuccessful!=====><project>containeroutput:*Runningonhttp://0.0.0.0:5000/=====>end<project>containeroutput----->Runningpost-deploy----->Creatingnew/home/dokku/<project>/VHOST...----->Configuring<project>.foo.bar...----->Creatinghttpnginx.conf----->Runningnginx-pre-reloadReloadingnginx=====>Applicationdeployed:http://<project>.foo.barTodokku@foo.bar:<project>*[newbranch]master->master
さらに詳しくは
以前にブログにまとめたものがあります。
IDCF + お名前.com + Dokkuの構成を作っています。
あと、Dokkuを構築する際にDockerを使っているのでSwap領域を作っておいたほうがいいです、そのへんの基本的な設定も以前にブログにまとめたので参考にどうぞ。
まとめ
HerokuからIDCF+Dokkuにいくつかのアプリをのせ替えて使っていますが、今のところ快適に動いていますのでおすすめできるかなと思います。
しかし、HerokuのAddonをガッツリ使っていたりなど、Dokkuではどうしようもない部分もあるので、Herokuを捨てられる銀の弾丸ではないのでご注意を。