Help us understand the problem. What is going on with this article?

dokku + VirtualBoxで自分のHerokuを作る

More than 3 years have passed since last update.

この記事は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から移行してみる、というのも良いかもしれません。

yuyaohshimo
Coiney Inc. Software Engineer twitter: https://twitter.com/ohshimoshimo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした