weblog of key_amb

主にIT関連の技術メモ

DigitalOcean で dokku を動かす

dokku は Docker をベースにした、Heroku のような環境をかんたんに実現するためのソフトウェアとのこと。

DigitalOcean は、1時間あたり1円から使える安価なクラウド IaaS です。

DigitalOcean には dokku インストール済みの Image があるので、かんたんに dokku 環境を構築することができます。

…というわけで、やってみました。 そもそも DigitalOcean に登録すらしていなかったので、そこからやりました。

1. DigitalOcean にサインアップ

  1. メールアドレスを登録
  2. クレジットカード情報を追加

2. dokku インストール済みの Droplet 作成

DigitalOcean では OS 実行環境(AWS でいうところの EC2 インスタンス)は Droplet と呼ばれるようです。 "Create Droplet" から Droplet を作成します。

  1. 名前は "dokku" としておきます。
  2. Size はミニマムでもいいですが、今回はデフォルトの $0.015/hour, mem 1GB を選びました。
  3. Region は日本から比較的近い Singapore を選択
  4. Image として、"Applications" タブから "Dokku v0.2.3 on 14.04" を選びました。
  5. まだ SSH 鍵を登録していなかったので、"Add SSH Keys" から公開鍵を登録しました。

3. dokku の初期設定

Droplet が作成されたら管理画面でIPアドレスを確認し、http://<IPアドレス> にアクセスします。

dokku の初期設定画面が表示されます。

  1. "Public Key" には先ほど自分で登録したものが表示されているはずです。
  2. Hostname にはアクセスしたいドメイン名を設定します。今回、DNSサービスは使いませんが、"dokku" としておきます。
  3. "Use virtualhost naming for apps" にチェックを入れます。"app.dokku" のようなドメイン名でアプリケーションにアクセスできるようになります。
  4. "Finish Setup" で設定を完了します。

4. /etc/hosts の設定

DNSサービスを使っていないので、今回は /etc/hosts に下記のように書いて代替します。

<IPアドレス> dokku test.dokku

5. ~/.ssh/config の設定

先ほど登録した ssh 鍵を使うように設定しておきましょう。

Host dokku
  IdentityFile ~/.ssh/id_dsa.dokku

5. サンプルアプリケーションを動かす

試しに Heroku のサンプルアプリケーションを dokku に Deploy してみます。

$ git clone https://github.com/heroku/node-js-sample.git
$ cd node-js-sample
$ git remote add dokku dokku@dokku:test
$ git push dokku master
Counting objects: 378, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (305/305), done.
Writing objects: 100% (378/378), 210.37 KiB | 0 bytes/s, done.
Total 378 (delta 44), reused 378 (delta 44)
remote: Cloning into '/tmp/tmp.f30SN2xsPB'...
-----> Cleaning up ...
remote: warning: You appear to have cloned an empty repository.
remote: done.
-----> Building test ...
remote: HEAD is now at 97a7c5c... wording
-----> Node.js app detected
-----> Requested node range: 0.10.x
-----> Resolved node version: 0.10.35
-----> Downloading and installing node
-----> Exporting config vars to environment
-----> Installing dependencies
       express@4.10.7 node_modules/express
       ├── merge-descriptors@0.0.2
       ├── utils-merge@1.0.0
       ├── methods@1.1.1
       ├── fresh@0.2.4
       ├── cookie@0.1.2
       ├── escape-html@1.0.1
       ├── range-parser@1.0.2
       ├── cookie-signature@1.0.5
       ├── finalhandler@0.3.3
       ├── vary@1.0.0
       ├── media-typer@0.3.0
       ├── parseurl@1.3.0
       ├── serve-static@1.7.2
       ├── content-disposition@0.5.0
       ├── path-to-regexp@0.1.3
       ├── depd@1.0.0
       ├── qs@2.3.3
       ├── on-finished@2.2.0 (ee-first@1.1.0)
       ├── debug@2.1.1 (ms@0.6.2)
       ├── etag@1.5.1 (crc@3.2.1)
       ├── send@0.10.1 (destroy@1.0.3, ms@0.6.2, on-finished@2.1.1, mime@1.2.11)
       ├── proxy-addr@1.0.5 (forwarded@0.1.0, ipaddr.js@0.1.6)
       ├── type-is@1.5.5 (mime-types@2.0.7)
       └── accepts@1.1.4 (negotiator@0.4.9, mime-types@2.0.7)
-----> Caching node_modules directory for future builds
-----> Cleaning up node-gyp and npm artifacts
-----> No Procfile found; Adding npm start to new Procfile
-----> Building runtime environment
-----> Discovering process types
       Procfile declares types -> web
-----> Releasing test ...
-----> Deploying test ...
=====> Application deployed:
       http://test.dokku

To dokku@dokku:test
 * [new branch]      master -> master
$

http://test.dokku にアクセスすると、"Hello, World!" の画面が表示されました。

後始末

DigitalOcean では Droplet を停止していても課金されるようです。 使い終わったら管理画面から Snapshot を取って、Droplet を削除しておくとよさそうです。

今後やってみたいこと

  • xip.io を使えば hosts を書かなくてもよくなるようです。
  • vagrant-digitalocean を使うと Droplet 作成や ssh ログインが vagrant で出来るようになるので、便利そうです。
  • 今回は dokku インストール済みのイメージを使いましたが、素の Ubuntu イメージを使って、dokku-alt を動かすこともできそうです。

参考