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プロジェクト:
require 'sinatra'
get '/' do
"Hello, from dokku!!"
end
source "https://rubygems.org"
ruby '2.1.1'
gem 'sinatra'
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.local
が 192.168.0.123
に向いている前提で。
bind-interfaces
address=/dokku.example.local/192.168.0.123
/etc/resolver/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
コマンドのように使える...