DigitalOcean で dokku を動かす
dokku は Docker をベースにした、Heroku のような環境をかんたんに実現するためのソフトウェアとのこと。
DigitalOcean は、1時間あたり1円から使える安価なクラウド IaaS です。
DigitalOcean には dokku インストール済みの Image があるので、かんたんに dokku 環境を構築することができます。
…というわけで、やってみました。 そもそも DigitalOcean に登録すらしていなかったので、そこからやりました。
1. DigitalOcean にサインアップ
- メールアドレスを登録
- クレジットカード情報を追加
2. dokku インストール済みの Droplet 作成
DigitalOcean では OS 実行環境(AWS でいうところの EC2 インスタンス)は Droplet と呼ばれるようです。 "Create Droplet" から Droplet を作成します。
- 名前は "dokku" としておきます。
- Size はミニマムでもいいですが、今回はデフォルトの $0.015/hour, mem 1GB を選びました。
- Region は日本から比較的近い Singapore を選択
- Image として、"Applications" タブから "Dokku v0.2.3 on 14.04" を選びました。
- まだ SSH 鍵を登録していなかったので、"Add SSH Keys" から公開鍵を登録しました。
3. dokku の初期設定
Droplet が作成されたら管理画面でIPアドレスを確認し、http://<IPアドレス>
にアクセスします。
dokku の初期設定画面が表示されます。
- "Public Key" には先ほど自分で登録したものが表示されているはずです。
- Hostname にはアクセスしたいドメイン名を設定します。今回、DNSサービスは使いませんが、"dokku" としておきます。
- "Use virtualhost naming for apps" にチェックを入れます。"app.dokku" のようなドメイン名でアプリケーションにアクセスできるようになります。
- "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 を動かすこともできそうです。