ニフティクラウド上のスタンダードイメージ Ubuntu 14.04 から作ったサーバーで dokku (セルフホストできるミニ heroku みたいなやつ) を少し試したメモ。
インストール
Getting Started with Dokku を参考にしながら。基本的にはこの 2 行で済む。
# wget https://raw.githubusercontent.com/dokku/dokku/v0.8.0/bootstrap.sh
# sudo DOKKU_TAG=v0.8.0 bash bootstrap.sh
が、なぜか名前解決できないエラーがでたので、DNS の設定を Google のやつに変更したらうまく行った。
# cp /etc/resolv.conf{,.org}
# sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
インストールスクリプトが完了すると、docker が使えるようになっていて、
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
http://${サーバーのグローバルIP}:80
で初期設定を行うことができるようになっている。
が、ufw が有効になっていてそのままだとアクセスできないので、無効化しておく。
# ufw disable
Firewall stopped and disabled on system startup
これで設定画面にアクセスできるようになった。
Public Key
にはデフォルトで root の公開鍵が入力されているので、git push のときにもこのサーバーにログインした秘密鍵を使いたい場合にはそのままでよい。git push のときにちがうキーを使いたい場合には書き換える必要がある。
(ちなみに Adding SSH Keys にあるように公開鍵はあとから dokku ssh-keys:add KEY_NAME path/to/id_rsa.pub
というコマンドで追加することもできる。といっても /root/.ssh/authorized_keys に公開鍵の中身が追記されるだけだけど。)
Hostname
にはサーバーの IP アドレスが表示されているので、とりあえずそのままにした。IP にドメインを振っている場合にはドメイン名を入力すればいいと思う。
Finish Setup
ボタンをクリックすると Deploying to Dokku にリダイレクトされた。
アプリをデプロイしてみる
Deploying to Dokku を見ながらアプリをデプロイしてみる。
まず、dokku をインストールしたサーバー上での作業。アプリの作成。
# dokku apps:create ruby-rails-sample
Creating ruby-rails-sample... done
# dokku apps
=====> My Apps
ruby-rails-sample
postgres プラグインのインストール。
# sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
(略)
データベースの作成。
# dokku postgres:create rails-database
Waiting for container to be ready
Creating container database
Securing connection to database
=====> Postgres container created: rails-database
=====> Container Information
Config dir: /var/lib/dokku/services/postgres/rails-database/config
Data dir: /var/lib/dokku/services/postgres/rails-database/data
Dsn: postgres://postgres:bb8bcc55f2e195f7bfcc3c8c3cc9688a@dokku-postgres-rails-database:5432/rails_database
Exposed ports: -
Id: c3f315cc999ce770422ae664ba905c88d7377f8233c76d0449a22a800a4c63f2
Internal ip: 172.17.0.2
Links: -
Service root: /var/lib/dokku/services/postgres/rails-database
Status: running
Version: postgres:9.6.1
アプリとデータベースを link しておく。
# dokku postgres:link rails-database ruby-rails-sample
次に、手元の PC 側での作業。サンプルアプリを clone する。
$ git clone https://github.com/heroku/ruby-rails-sample.git
Cloning into 'ruby-rails-sample'...
remote: Counting objects: 239, done.
e: Total 239 (delta 0), reused 0 (delta 0), pack-reused 239
Receiving objects: 100% (239/239), 42.78 KiB | 0 bytes/s, done.
Resolving deltas: 100% (86/86), done.
Checking connectivity... done.
dokku のリポジトリを remote に登録して、アプリを push する。
$ cd ruby-rails-sample/
$ git remote add dokku dokku@${サーバーの IP アドレス}:ruby-rails-sample
$ git push dokku master
(heroku と同じようなログがずらずら表示されて、)
-----> Attempting to run scripts.dokku.postdeploy from app.json (if defined)
=====> Application deployed:
http://${サーバーの IP アドレス}:5307
To dokku@${サーバーの IP アドレス}:ruby-rails-sample
* [new branch] master -> master
ブラウザで http://${サーバーの IP アドレス}:5307
にアクセスすると、下記が正常に表示された。
まとめ
ニフティクラウド上で dokku をインストールしてアプリをデプロイしてみたりすることができた。
簡単にインストールできるのはいいけど、API がなくて dokku をインストールしたサーバーの中でないとアプリの作成等、各種管理操作ができないのが微妙な感じ…。
次は API もあるっぽい Deis や Flynn を試してみよう。
参考資料
- Getting Started with Dokku
- Deploying to Dokku
- Dokku - The smallest PaaS implementation you've ever seen
- dokkuのつらいところとつかいどころ
- docker - Scaling out Dokku infrastructure - Server Fault
- Deis, Inc. | The Kubernetes Company
- Flynn ? The product that ops provides to developers
- flynn/flynn: A next generation open source platform as a service (PaaS)