docker
dokku

Dokku 入れた && モリモリ使える感じにした

More than 3 years have passed since last update.


Dokku のインストール

公式 の通り、 Ubuntu 14.04 であればなにも考えなくても入る。

$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | sudo DOKKU_TAG=v0.2.3 bash

例えば、 dokku.example.local というドメ因で解決できるようなサーバにDokkuをインストールしておけば、勝手に /home/dokku/VHOST の中身が dokku.example.local になる(大事な部分)。アプリをデプロイしたら foobar.dokku.example.local というところにホストされる。

で、そのあと、Heroku並みに簡単にデプロイできるようにするまでが若干めんどいので詳しく書いておく。


公開鍵を登録する。

このままではプッシュできないので登録。dokku.example.localにログインしてこんな感じで良いのでは。

curl https://github.com/udzura.keys | sudo sshcommand acl-add dokku udzura

dokku@dokku.example.local にSSHログインできるようにする。

研修とかで使う場合、めんど~なので社内Dokku専用の公開鍵を登録して秘密鍵を配っても良いかも。


プッシュしてみる

適当なSinatraプロジェクト:


app.rb

require 'sinatra'

get '/' do
"Hello, from dokku!!"
end


Gemfile

source "https://rubygems.org"

ruby '2.1.1'

gem 'sinatra'



Procfile

web: bundle exec ruby app.rb -p $PORT


まるっきりherokuと同じもの。このGitプロジェクトを、こんな感じでプッシュ。sinatra-sample は任意。そこの名前がそのままサブドメ院になる

$ git remote add dokku dokku@dokku.example.local:sinatra-sample

$ git push dokku master

するとなんかHerokuっぽい表示が出てくる。

Counting objects: 5, done.

Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 323 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
-----> Cleaning up ...
remote: Cloning into '/tmp/tmp.5eBkCHIIsz'...
-----> Building sinatra-sample ...
remote: done.
remote: HEAD is now at 2c0f55f... Fix typo ooooo
Ruby app detected
-----> Compiling Ruby/Rack
-----> Using Ruby version: ruby-2.1.1
-----> Installing dependencies using 1.5.2
Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
Using rack (1.5.2)
Using tilt (1.4.1)
Using bundler (1.5.2)
...
=====> Application deployed:
http://sinatra-sample.dokku.example.local

Herokuと同じbuildpackを使っているので、当然と言えば当然...。

で、この sinatra-sample.dokku.example.local を我々がこのまま解決できる訳も無いので、全部エトセホスツにエントリを書いていっても良いけど、少しだけ楽な方法にする。


dnsmasq で *.dokku.example.local を全部 dokku.example.local と同じとこに向ける

xip.io を使う人も多いみたいだけど、ちょっと... と思ったのでdnsmasqを使いたい。

まずはおもむろにインストール。みなさんもちろん、Mac.....ですよね...

$ brew install dnsmasq

$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
$ sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons

おもむろに設定、ぼくは http://tell-k.hatenablog.com/entry/2014/04/28/002437 を見た。 dokku.example.local192.168.0.123 に向いている前提で。


dnsmasq.conf

bind-interfaces

address=/dokku.example.local/192.168.0.123

/etc/resolver/dokku.example.local というファイルを作る。


dokku.example.local

nameserver 127.0.0.1


起動。

sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

ここまでしたら、ネットワークの設定で一番目のDNSを 127.0.0.1 にする必要があるかも。要出典である...。


確認

$ dig @127.0.0.1 hogehoge.dokku.example.local                                 

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 hogehoge.dokku.example.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20679
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;hogehoge.dokku.example.local. IN A

;; ANSWER SECTION:
hogehoge.dokku.example.local. 0 IN A 192.168.0.123
...

$ ping -c 1 sinatra-sample.dokku.example.local
PING sinatra-sample.dokku.example.local (192.168.0.123): 56 data bytes
64 bytes from 192.168.0.123: icmp_seq=0 ttl=59 time=23.631 ms

さて、おもむろに http://sinatra-sample.dokku.example.local を開くと「Hello, from dokku!!」って出てくるはず。出てくると良いですね(Herokuっぽく初回アクセスに時間が掛かる。こんなとこまでHerokuクローンなの...)。


Troubleshoot: なんか起動しない

ログを見るにはログインしないといけないぞう:

$ ssh -t dokku@dokku.example.local logs sinatra-sample

その他コマンドが色々あるので help すると良さそう。エイリアスを貼ればherokuコマンドのように使える...