DockerでミニHeroku!「Dokku」をさくらのクラウドで試す
シンプルなPaaSで知られるHerokuは使っていますか?ちょっとしたWebアプリを作って試すには便利ですが、もっとマシンパワーが必要になったり、もっと自由に使ってみたいと思うこともあるでしょう。
そんな要望を叶えるためのソフトウェアがDokkuです。DockerをベースにしたHerokuクローンになります。Dockerなので任意のクラウド、VPSサーバ上に立てることができます。今回はさくらのクラウドを使ってDokkuを実行する手順を紹介します。
さくらのクラウドでUbuntuサーバを立てる
DokkuはUbuntu 12.04 x64または14.04 x64をサポートしています。LTSとは言え、ここは14.04を選択することとします。アーカイブにUbuntu Server 14.04 LTS 64bit(基本セット)が登録されていますので、ここから選ぶだけでOKです。
後は公開鍵を登録して、サーバを起動します。数分でサーバが立ち上がるはずです。
Dokkuをインストール
サーバが立ち上がったらSSHでログインします。公開鍵を登録してあるので、
$ ssh ubuntu@server_ip_address
でログインできます。server_ip_addressは適宜読み替えてください。サーバにログインしたら以下のコマンドを実行します。
$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | sudo DOKKU_TAG=v0.2.3 bash
なお、なぜか1回ではうまくいかず、2回実行するとセットアップが完了しました。
アドレスを決める
Dokkuではapp1というアプリをデプロイすると、http://app1.example.com といった感じでサブドメインで動くようになります。そのため、予めドメインを決めておく必要があります。設定は、 /home/dokku/VHOST を書き換えれば良いので、例えば dokku.moongift.jp を使うとすれば、
# echo "dokku.moongift.jp" > /home/dokku/VHOST
のように設定します。
公開鍵を設定する
リポジトリへアクセスするための公開鍵を設定します。GitHubでアカウントを持っているのであれば、docker - Dokku 入れた && モリモリ使える感じにした - Qiitaで紹介されている方法を使うのが便利です。
# curl https://github.com/GITHUB_USERNAME.keys | sudo sshcommand acl-add dokku DESC
GITHUB_USERNAMEは自分のユーザ名を、DESCは適当な説明を指定します。
ここまでで準備は完了です。
nodeアプリをデプロイしてみる
ではデモをしましょう。ここではheroku/node-js-sampleを使ってみます。以下は自分のローカルでの操作です。
$ git clone git@github.com:heroku/node-js-sample.git $ cd node-js-sample $ git remote add progrium dokku@server_address:node-js-app $ git push progrium master
server_address は先ほど VHOST に指定したアドレスを指定してください。pushすると自動的に /home/dokku 以下にGitリポジトリが作られ、デプロイされます。ログは以下のようになります。
$ git push progrium master Counting objects: 378, done. Delta compression using up to 4 threads. Compressing objects: 100% (304/304), done. Writing objects: 100% (378/378), 209.77 KiB | 0 bytes/s, done. Total 378 (delta 45), reused 378 (delta 45) -----> Cleaning up ... remote: Cloning into '/tmp/tmp.NO73c0jCC6'... -----> Building node-js-app ... remote: warning: You appear to have cloned an empty repository. remote: done. remote: HEAD is now at 97a7c5c... wording Node.js app detected -----> Requested node range: 0.10.x -----> Resolved node version: 0.10.30 -----> Downloading and installing node -----> Writing a custom .npmrc to circumvent npm bugs -----> Installing dependencies express@4.8.3 node_modules/express ├── utils-merge@1.0.0 : └── send@0.8.1 (ms@0.6.2, mime@1.2.11, finished@1.2.2) -----> 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 node-js-app ... -----> Deploying node-js-app ... =====> Application deployed: http://node-js-app.dokku.moongift.jp To dokku@dokku.moongift.jp:node-js-app * [new branch] master -> master
デプロイしたら、表示されているURLにアクセスできるようになります。
Docker
アプリがデプロイされているのはdockerコマンドで確認できます。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1cdd1502e87 dokku/node-js-app:latest /bin/bash -c '/start 2 hours ago Up 2 hours 0.0.0.0:49153->5000/tcp suspicious_nobel
イメージも確認できます。
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE dokku/node-js-app latest 780d7dcbbb19 2 hours ago 885.3 MB progrium/buildstep latest 47f25c200541 2 hours ago 866.4 MB
デプロイするアプリ単位でDockerコンテナが立ち上がる形になっているのが分かります。これによりセキュアでリソースが適切に管理された状態で運用ができるようになっているのが分かりますね。
まとめ
現在のところ、Node/Ruby/Pythonを基本としつつ、Heokuのbuildpackに対応しているのでJava/Scala/Clojure/Gradle/Grails/PHP/Go/Meteor/Perl/Dartなど多彩な言語をデプロイできるようになっています。Heroku向けに作ったWebアプリケーションがそのまま使えるのも利点です。
GitリポジトリをpushするだけでデプロイしてWebサーバが立ち上がるところまでできてしまうのが良いです。さらにHerokuと違ってサブドメインが分かりやすいので管理がしやすいかと思います。ただし管理画面などはありませんので注意してください。
自由に使えるPaaS(Platform as a Service)が簡単に実現できてしまうDokku、ぜひさくらのクラウドと一緒に試してみてください。