(Dokku v0.3.26の話)
Herokuで1日6時間止めたくないし、30分でスリーブしたくないアプリがあるとき、VPS on Dokkuは最高のソリューションかもしれないです。
プロダクションには無理がありそうですが、社内とか個人用途には良さそうですね、nginxとかのセットアップをやってくれますし、Herokuのbuildpackを使えるので便利便利です。
VPSにはIDCFクラウドの一番安いのを使います。Dokkuを入れる前に、
にあるようなセットアップが済んでいるものとします。
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のサンプルをデプロイしてみる。
ローカル環境に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レコードがちゃんと設定されていれば、ブラウザでも見れます。
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を運用しいています)
参考資料
- progrium/dokku
- dokku
- DigitalOceanでUbuntu 12.04 + dokkuを構築した際のメモ - Qiita
- 橋本商会 » DockerとdokkuをMacにインストールして自分をHeroku化した
- DockerでミニHeroku!「Dokku」をさくらのクラウドで試す - さくらのナレッジ
- dokkuのつらいところとつかいどころ
- docker - Vagrantでdokkuを動かす - Qiita
- MacのVagrant上にDocker&Dokku環境入れてローカルmini-Heroku環境構築してみる - Qiita
- Setting up Dokku with DigitalOcean and Namecheap
Show comments