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

(Dokku v0.3.26の話)

Herokuで1日6時間止めたくないし、30分でスリーブしたくないアプリがあるとき、VPS on Dokkuは最高のソリューションかもしれないです。

プロダクションには無理がありそうですが、社内とか個人用途には良さそうですね、nginxとかのセットアップをやってくれますし、Herokuのbuildpackを使えるので便利便利です。

VPSにはIDCFクラウドの一番安いのを使います。Dokkuを入れる前に、

IDCFクラウド借りました

にあるようなセットアップが済んでいるものとします。

Dokkuのインストール

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

続いてサーバにログインしている状態で、ホスト名の設定。(root権限で実行)

VHOSTとHOSTNAMEに、持っているDNSの名前を設定する。(サブドメインでも良い)

(仮に、foo.barを設定したとする。)

# echo "foo.bar" > /home/dokku/VHOST
# echo "foo.bar" > /home/dokku/HOSTNAME

("http://foo.bar"にアクセスしてもdokkuの初期設定画面が出てきたので、そちらで設定できるみたい)

次に、git pushできるようにするために、SSHの公開鍵を設定する。公開鍵のある場所で以下のコマンドを実行する。

(ローカル) $ cat ~/.ssh/id_rsa.pub | ssh root@<your_ip> "sudo sshcommand acl-add dokku <name>"
(サーバ内) $ cat ~/.ssh/id_rsa.pub | sudo sshcommand acl-add dokku <name>

Dokkuの下準備はこれだけ、次にドメインの設定する。

ドメインの設定(お名前.com)

Dokkuはnginxを使ってサブドメインにデプロイしてくれるので、ワイルドカードを設定してみる。

お名前.comでは、サブドメインにワイルドカードが使えないので、*.とするしかないみたいです。

しょうがないので、DNSレコード設定で以下のようにAレコードを設定する。

A record IP TTL
foo.bar 3600
*.foo.bar 3600

これで、例えば"dokku@foo.bar:sample"にpushしたとき、"http://sample.foo.bar"にデプロイされる。

Dokkuにサンプルアプリをデプロイ

Pythonのサンプルをデプロイしてみる。

heroku/python-sample

ローカル環境にgit cloneして、remoteにdokkuを追加。

$ git clone https://github.com/heroku/python-sample.git
$ cd python-sample
$ git remote add dokku dokku@foo.bar:python-sample
$ 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...
-----> Python app detected
-----> Installing runtime (python-2.7.10)
-----> Installing dependencies with pip
       Collecting Flask==0.9 (from -r requirements.txt (line 1))
       Downloading Flask-0.9.tar.gz (481kB)
       Collecting Jinja2==2.6 (from -r requirements.txt (line 2))
       Downloading Jinja2-2.6.tar.gz (389kB)
       Collecting Werkzeug==0.8.3 (from -r requirements.txt (line 3))
       Downloading Werkzeug-0.8.3.tar.gz (1.1MB)
       Installing collected packages: Werkzeug, Jinja2, Flask
       Running setup.py install for Werkzeug
       Running setup.py install for Jinja2
       Running setup.py install for Flask
       Successfully installed Flask-0.9 Jinja2-2.6 Werkzeug-0.8.3
remote: You are using pip version 7.0.3, however version 7.1.2 is available.
remote: You should consider upgrading via the 'pip install --upgrade pip' command.

-----> Discovering process types
       Procfile declares types -> web
-----> Releasing python-sample...
-----> Deploying python-sample...
-----> 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!
=====> python-sample container output:
        * Running on http://0.0.0.0:5000/
=====> end python-sample container output
-----> Running post-deploy
-----> Creating new /home/dokku/python-sample/VHOST...
-----> Configuring python-sample.muuny-blue.info...
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
       Reloading nginx
=====> Application deployed:
       http://python-sample.foo.bar

To dokku@foo.bar:python-sample
 * [new branch]      master -> master

初回はDockerのイメージとかを色々落としてくるので時間がかかるが、いい感じにデプロイされている様子を見れる。

Aレコードがちゃんと設定されていれば、ブラウザでも見れます。

Hello Dokku

Dokkuの様子を、サーバにSSHして確認。

$ dokku apps
=====> My Apps
python-sample
$ dokku ps python-sample
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   6064  1632 ?        Ssl  00:11   0:00 /start web
root        10  0.0  0.0   1484   920 ?        S    00:11   0:00 /root/.basher/bash -c main 'web'
u3135      136  0.0  1.4 179520 14716 ?        S    00:11   0:00 python app.py
root       137  0.0  0.0   4440   652 ?        Ss+  00:21   0:00 /bin/sh -c ps auxwww
root       143  0.0  0.1  15564  1156 ?        R+   00:21   0:00 ps auxwww
$ ls -la /home/dokku | grep python-sample
drwxrwxr-x  8 dokku dokku 4096 XXX XX XX:XX python-sample

Dockerの様子も確認。

$ sudo docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS               NAMES
a63daf76bcb3        dokku/python-sample:latest   "/start web"        4 minutes ago       Up 4 minutes                            insane_leakey
$ sudo docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
dokku/python-sample    latest              d8025105f0c0        4 minutes ago       1.421 GB
gliderlabs/herokuish   latest              359e311e765f        6 weeks ago         1.263 GB

okぽい。

アプリに対して、操作するときはdokkuコマンドから操作する。詳しくはdokku --help。

まとめ

IDCFフロンティアの一番安いのにもDokkuちゃんとのせられたし、ちゃんと動いた。個人用途には申し分なさそう。

メモリ使用量の様子。

メモリ使用量

アプリ1つしかデブロイしてないけど、あまり無茶させなければ大丈夫そうな気配。

入れたあとにDokkuAlternativeってのがあることを知った、こっちは、メジャーどころのDB連携がデフォルトでついていたりWebコンソールがあるみたい、こっちのほうがなにかとよさそう。

dokku-altに関しては日本語で丁寧にまとまってる記事があったのでそちらを見るといいかもしれない。

Dokku Alternative触ってみる。

(今のところ不便はないので素のdokkuを運用しいています)

参考資料

Show comments

Adsense

Share

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

About

趣味でプログラミングをしています。仕事では致し方なくC言語のようなC++を書いています。

Recently

Tags

Pages