IDCFクラウドで自分だけのHerokuを構築する
  • Date:2015-11-15 日 (午前 06:11:54)
  • Updated:2015-11-15 日 (午前 06:43:38)
  • Tags:IDCF Dokku
  • Category:Programming

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

embed.ly

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で見たことあるような出力が返ってきます。

$ git push dokku master
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 1.81 KiB | 0 bytes/s, done.
Total 21 (delta 6), reused 0 (delta 0)
-----> Cleaning up...
-----> Building python-sample from herokuish...
remote: Unable to find image 'gliderlabs/herokuish:latest' locally
remote: latest: Pulling from gliderlabs/herokuish
remote: 835c565d00e2: Pulling fs layer
remote: c5c659229e15: Pulling fs layer
(中略)
remote: 359e311e765f: Pull complete
remote: 359e311e765f: Already exists
remote: Digest: sha256:7aaa5dd65a7f90a47f2bb1266375b27d4f273ff94495527949536c9e944a871a
remote: Status: Downloaded newer image for gliderlabs/herokuish:latest
-----> Adding BUILD_ENV to build environment...
(中略)
-----> DOKKU_SCALE file not found in app image. Defaulting to a single web process
-----> New DOKKU_SCALE file generated
-----> Running pre-flight checks
       For more efficient zero downtime deployments, create a file CHECKS.
       See http://progrium.viewdocs.io/dokku/checks-examples.md for examples
       CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
=====> <project> container output:
        * Running on http://0.0.0.0:5000/
=====> end <project> container output
-----> Running post-deploy
-----> Creating new /home/dokku/<project>/VHOST...
-----> Configuring <project>.foo.bar...
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
       Reloading nginx
=====> Application deployed:
       http://<project>.foo.bar

To dokku@foo.bar:<project>
 * [new branch]      master -> master

さらに詳しくは

以前にブログにまとめたものがあります。

IDCFクラウドの一番安いのでDokkuを使う

IDCF + お名前.com + Dokkuの構成を作っています。

あと、Dokkuを構築する際にDockerを使っているのでSwap領域を作っておいたほうがいいです、そのへんの基本的な設定も以前にブログにまとめたので参考にどうぞ。

IDCFクラウド借りました

まとめ

HerokuからIDCF+Dokkuにいくつかのアプリをのせ替えて使っていますが、今のところ快適に動いていますのでおすすめできるかなと思います。

しかし、HerokuのAddonをガッツリ使っていたりなど、Dokkuではどうしようもない部分もあるので、Herokuを捨てられる銀の弾丸ではないのでご注意を。

Show comments

Adsense

Share

  • このエントリーをはてなブックマークに追加

About

どこにでもいる平凡なプログラムを書く人間のログ。

Recently

Tags

Pages

-->