dokku + VirtualBoxで自分のHerokuを作る

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事は2013年8月10日にatsuyaによってCoiney Developer Blogに書かれた記事の転載です。

少し前に、dotCloudが自身のPaaSのサービスで使っているdeployment engineをDockerとして公開しました。そのDockerを使ったものにdokkuというものがあり、これがREADMEにある通り、まさにmini-Herokuを作るためのツールなのです。そこで今回の記事では、dokkuを使って自分のmini-Herokuを作る手順を紹介します。

つまり、Herokuにデプロイするのと同様に、特定のremoteにgit pushすると、自動でデプロイが行われる環境を作ります。

この記事を書くにあたって、こちらの記事を参考にしました。

Docker

Dockerは、先程書いた通り、dotCloudが自身のサービスを提供するのに使っているコンテナーです。コンテナーの中でなんらかしらのappを走らせるのですが、そのappが必要とする環境をそのコンテナーの中で構築する事で、appをそのコンテナーの中だけで、他の環境から独立した形で実行させられるようになります。

そうする事で、沢山のappをデプロイするのには、単純にそのデプロイしたいappの数だけコンテナーを用意すれば良いというようになり、appの管理が簡潔になる、というものです。というものの、私はこの辺はあんまり詳しくないので、間違っているかもしれませんが、概念としてはそんな感じのものです。

Dockerは、仮想化にlxcを使っていて、そこが今までの仮想化とアプローチが少し違うところです。lxcのページを見て頂けると詳しく書いてあるのですが、要するに、KVMやXenを使った仮想化は完全な仮想化を目的としていたためにオーバーヘッドが大きい、lxcはそこを少し妥協する代わりに (chrootの凄い版みたいな感じ) スケールしやすいように仮想化を実現しているそうです。

たぶん、KVMやXenよりお手軽なのでしょう!

dokku

Dockerが公開されて以来、Dockerを使った面白いものがちょこちょこ出てきていて、その中でもdokkuというものが注目を浴びました。なんといっても、自分のmini-Herokuが作れるのは面白そうです。しかも、100行以下のbashスクリプトで実装されているとなれば、お手軽さは半端ありません。

mini-Herokuを作成する

それでは早速、自分のmini-Herokuを作ってみましょう。

VirtualBoxをインストールする

dokkuはDockerを使っていますが、Dockerが使っているlxcはその名の通り、Linuxしかサポートしていません!なので、まずLinuxが動いている環境をVirtualBoxを使って準備します。

VirtualBoxを使ってLinuxをインストールする方法はここでは割愛しますが、dokkuのREADMEにもある通り、64bit版のUbuntu 13を使って下さい。私は64bit版のUbuntu Server 13.04を使用しました。

インストールしたUbuntuには10.0.1.201というIPアドレスが振られていて、localおよびUbuntuにdeployというユーザが存在している事を前提に説明していきます。

ssh keyをコピーする

後々便利なので、まずdeployユーザでログインする場合に、パスワードでではなくkeyでログイン出来るように、localのユーザのssh keyをUbuntuにコピーしておきましょう。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub deploy@deploy.10.0.1.201.xip.io

OS Xの場合はssh-copy-idがデフォルトでは入っていないので、homebrewでインストール出来ます。

$ brew install ssh-copy-id

お気づきかと思いますが、sshでログインする時に、deploy@10.0.1.201ではなくdeploy@deploy.10.0.1.201.xip.ioを使いました。これは、後々dokkuが使っているgitreceiveというソフトウェアが、IPアドレスではなくドメインが使われることを前提とするので、xip.ioを使ったドメインを使ってログインしました (xip.ioは、xip.ioのサブドメインで指定されたIPアドレスに名前解決するサービスです) 。

dokkuをインストールする

準備は整ったので、dokkuをインストールしましょう。Ubuntuで以下のコマンドを実行するとインストールが始まります。

$ wget -qO- https://raw.github.com/progrium/dokku/master/bootstrap.sh | sudo bash

READMEによると、インストールが終わるまで5分程掛かります。

dokkuを設定する

dokkuの設定というよりも、dokkuの使っているgitreceiveの設定なのですが、dokkuをインストールした後に二つ設定する事があります。

まずは、Ubuntuの/home/git/VHOSTに、Ubuntuにアクセスするのに使われるドメインを設定します。

$ sudo su
# echo "deploy.10.0.1.201.xip.io" > /home/git/VHOST

続いて、git pushでdeploy出来るようにするために、gitreceiveにもssh keyを設定します。Ubuntuで以下のコマンドを実行します。

$ cat ~/.ssh/authorized_keys | sudo gitreceive upload-key deploy

ここでは端折って~/.ssh/authorized_keysを使っていますが、使いたいのはlocalのdeployユーザのsshのpublic keyです。

最後に、これはこの記事を書いている段階で確認されているDockerのバグによるものなので、もう直っているかもしれませんが、Ubuntuで以下のファイルのパーミッションを変更する必要があるかもしれません。

$ sudo chmod 777 /var/run/docker.sock

デプロイしてみる

以上でdokkuの設定は終わりましたので、実際にデプロイしてみましょう!ここでは、Herokuが用意しているnode.jsのサンプルのプロジェクトをデプロイしてみます。

$ git clone https://github.com/heroku/node-js-sample.git
$ cd node-js-sample
$ git remote add my-heroku git@deploy.10.0.1.201.xip.io:node-js-sample
$ git push my-heroku master
...
remote: =====> Application deployed:
remote:        http://node-js-sample.deploy.10.0.1.201.xip.io
...

Herokuにデプロイしている時と同じ様な出力が表示される中、最後にデプロイされたappのurl (http://node-js-sample.deploy.10.0.1.201.xip.io) が得られます。そこにアクセスすると、デプロイされたappにアクセス出来ているはずです。

my-heroku.png

これで自分のmini-Herokuが完成しました!

結論

Herokuは非常に便利ですが、そんな便利なHerokuと同様のものが自分で比較的簡単に作れてしまいました。試しに、staging環境などでCapistranoから移行してみる、というのも良いかもしれません。