仮想環境で dokku 0.4.1 の新規インストールを試しました。

検証環境

dokku のインストール

Installing の手順通りにインストールしました。

wget https://raw.githubusercontent.com/progrium/dokku/v0.4.1/bootstrap.sh
sudo DOKKU_TAG=v0.4.1 bash bootstrap.sh

herokuishpostinst で時間がかかります。

Web UI で初期設定

debconf での設定は出てこなかったので Web ブラウザで http://localhost を開いて初期設定します。

Public Key には ~/.ssh/id_rsa.pub の内容をコピペしました。 まだ鍵がなければ ssh-keygen で作成します。

Hostname はインターネットに接続しているグローバル IP アドレスが入っていたので、 dokku.me に変更して、 Use virtualhost naming for apps にチェックを入れました。

最後に Finish Setup を押して初期設定完了です。

この設定で http://アプリ名.dokku.me のような URL で各アプリにアクセスできるようになります。(dokku.medokku のドキュメントに書いてあるドメインで、すべてのサブドメインでも 127.0.0.1 を返してくれるドメインのようです。) (2016-04-20 追記: 現在は 127.0.0.1 ではなく 10.0.0.2 に変わっています。)

初期設定終了後はアプリをデプロイするまで http://localhost には繋がらなくなります。

node のサンプルアプリのデプロイ

Deploy an App に書いてあるように node のサンプルアプリをデプロイしてみます。

ssh server が入っていなければ sudo apt-get install openssh-server でインストールしておきます。

git clone https://github.com/heroku/node-js-sample
cd node-js-sample
git remote add dokku dokku@dokku.me:node-js-app
git push dokku master

push が成功したら http://node-js-app.dokku.me をブラウザで開きます。 「Hello World!」と表示されれば成功です。

dokku の内部の実体としては /home/dokku/node-js-app に入っています。

デプロイ前の状態に戻すには

dokku apps:destroy node-js-app

で削除します。

dokku コマンドについて

実行例はサーバー上でのものを示していますが、 sudo dokku で実行しているもの以外はサーバー上で dokku サブコマンド で実行しても、リモートから ssh dokku@dokku.me サブコマンド で実行しても、基本的には同じ意味になります。

グローバル設定の変更

初期設定だと curl のタイムアウトが短すぎて、後の ruby のダウンロードのところでエラーになってしまうため、 dokku config:set --global CURL_TIMEOUT=120 でタイムアウト時間を延ばします。

$ dokku config --global
====> --global config vars
CURL_CONNECT_TIMEOUT: 5
CURL_TIMEOUT:         30
$ dokku config:set --global CURL_TIMEOUT=120
-----> Setting config vars
       CURL_TIMEOUT: 120
$ dokku config --global
====> --global config vars
CURL_CONNECT_TIMEOUT: 5
CURL_TIMEOUT:         120

dokku-psql-single-container プラグインのインストール

sudo dokku plugin:install https://github.com/Flink/dokku-psql-single-container

でプラグインをインストールします。 postgres の docker イメージをダウンロードするため、ある程度時間がかかります。

アンインストールは

sudo dokku plugin:uninstall psql-single-container

です。(dokku- はつかない。)

sshcommand の変更

sshcommand createdokku-psql-single-container プラグインが使っている /home/dokku/.psql-sc/dataowner が変わってしまう問題があるため、

sudoedit /usr/local/bin/sshcommand

    chown -R $USER $USERHOME

    chown $USER $USERHOME
    chown -R $USER $USERHOME/.ssh*

に変更しました。

公式の postgres plugin だとこの変更は必要ありません。

Rails のサンプルアプリのデプロイの準備

プラグインを使うため、 git push 前に準備しておきます。 (今回試したアプリの場合は git push 後に psql:create しても大丈夫でした。)

dokku apps:create ruby-rails-app
dokku psql:create ruby-rails-app

まず apps:create/home/dokku/ruby-rails-app を作成してから、そのアプリと連携するデータベースを psql:create で作成します。

Rails のサンプルアプリのデプロイ

Rails のサンプルアプリをデプロイします。

git clone https://github.com/heroku/ruby-rails-sample
cd ruby-rails-sample
git remote add dokku dokku@dokku.me:ruby-rails-app
git push dokku master
dokku run ruby-rails-app rake db:migrate

push が成功したら http://ruby-rails-app.dokku.me を開きます。 Hello World と現在時刻が表示されていたら成功です。

後から psql:create した場合は 500 エラーになるので、 dokku ps:restart ruby-rails-app で再起動すると環境変数の追加が反映されてなおります。

デプロイ前に戻す方法

dokku apps:destroy ruby-rails-app で戻せるはずですが、データベースに接続中でデータベースの削除に失敗することがあります。

失敗した場合は dokku psql:admin_console で接続して \l で削除できていないのを確認して、 ` DROP DATABASE db_ruby_rails_app;` で削除できました。

タイムゾーン変更

タイムゾーンが UTC になっているので日本時間に変更しました。

dokku config:set ruby-rails-app TZ=Asia/Tokyo

初期設定した以外の Virtualhost を使う方法

node-js-sample を再利用して、別ドメインでも見えるようにしてみました。

cd node-js-sample
git remote add xip dokku@dokku.me:node-js-app.127.0.0.1.xip.io
git push xip master

http://node-js-app.127.0.0.1.xip.io でも「Hello World!」が見えれば成功ですが、デフォルトホストとして見えているだけかもしれないので、 index.js'Hello World!' 部分を変更して区別できるようにすると良いかもしれません。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published