patorashのブログ

方向性はまだない

CloudGarageにオレオレHerokuを立ててみた

CloudGarage Release Tourに参加してからなんかやってみようと考えていたところで、本でDockerの勉強をしていたら、Dokkuの存在を知りました。

Dokkuとは?

Dokkuとは、自分でPaaSを作ることができるツールです。Dockerコンテナべースで組める他、Herokuのようにgit pushでのデプロイに対応しています。また、Herokuのbuildpackを使ったコンテナ作成が行われるので、動作環境としては本当にHerokuに近いんじゃないかなと思います。

Dokku - The smallest PaaS implementation you've ever seen

動作環境

UbuntuDebianがオススメで、メモリは最低でも1GB以上必要です。CloudGarageのお試しプランでは、メモリが1GBなのでギリギリ試すことができました。

やってみる

とりあえずやってみます。まず、CloudGarageのアカウント登録を済ませました。無料で14日試せます!

cloudgarage.jp

インスタンスを立てる

DokkuのサポートOSの、Ubuntu 16.04 64bitで立てました。噂通り、めちゃくちゃ起動が速いです。

Dokkuのインストール

SSHで立てたサーバにログインします。 今回はdokkuを試したいだけなのでrootでのログインを許可したままやってます。

ローカル側
ssh root@[サーバのグローバルIP]

そして、http://dokku.viewdocs.io/dokku/getting-started/installation/に従い、現時点の最新である、v0.10.4をインストールします。

サーバー側
wget https://raw.githubusercontent.com/dokku/dokku/v0.10.4/bootstrap.sh
sudo DOKKU_TAG=v0.10.4 bash bootstrap.sh

Dokkuのインストールは数分かかりますので適当に眺めながら待ちます。Dockerとか諸々のツールがこれでインストールされます。

Dokkuの初期設定を行う

ブラウザで、http://[サーバのグローバルIP]にアクセスすると、DokkuのSSHの公開鍵やVirtualHostの設定画面が出ます(1度しか表示されなかったのでスクショ取れず…)。とりあえず何も考えず設定完了に。

Dokkuを入れると、サーバのユーザーとしてdokkuが作られます。dokkuユーザーでgit pushするときにSSHの公開鍵登録をしておかないといけないので、まずはそれを行います(これが最初わからなくてハマった)。

ローカル側

サーバのグローバルIPとKEY_NAMEは適当に変えてください。KEY_NAMEは私はmbp_homeとか適当にしました。

cat ~/.ssh/id_rsa.pub | ssh root@[サーバのグローバルIP] dokku ssh-keys:add [KEY_NAME]
# その後、rootのパスワードを求められるのでパスワードを入力

アプリケーションのデプロイを行う

以下のチュートリアルに従って、Herokuのruby-rails-sampleというリポジトリをまずはデプロイしてみます。 http://dokku.viewdocs.io/dokku/deployment/application-deployment/

git clone

まずはデプロイするプロジェクトをgit clone。

ローカル側
git clone git@github.com:heroku/ruby-rails-sample.git

アプリケーションの作成

次に、Dokku側でアプリケーションを作っておきます。heroku apps:createに該当します。

サーバ側
dokku apps:create ruby-rails-sample

そして、postgresqlを使うので、それの設定も行います。Dokkuでは、ミドルウェアの導入方法はプラグインで提供されているので、それに従います。そして、rails-databaseというデータベースを作ります。Postgresは現時点では9.6.4が入りますが、環境変数を設定することで、異なるバージョンを入れることもできます。基本的にはDockerHubにあるオフィシャルのpostgresのタグを指定するべきなようです(もしくはオフィシャルをFROMに設定しているもの)。とりあえずバージョン変更せず。

dokku plugin:install https://github.com/dokku/dokku-postgres.git
dokku postgres:create rails-database

postgresとアプリをリンクさせます。

dokku postgres:link rails-database ruby-rails-sample

デプロイ

さて、ではいよいよデプロイです。デプロイはローカル側から行います。

ローカル側

まずはgit remoteにdokkuを登録します。

cd ruby-rails-sample
git remote add dokku dokku@[サーバのグローバルIP]:ruby-rails-sample

次に、git pushでデプロイします。

git push dokku master

すると、スルスルとHerokuのようにデプロイスクリプトが流れていきます。特に指定していないとHerokuのbuildpackを使うので本当にHerokuのように動きます。

そして、最終的に適当なポートで公開されました。DNS設定とか一切していないからでしょう。その辺りはまだ深堀していませんが、とりあえずそのURLにアクセスしてみましょう。URLを忘れても大丈夫!表示するコマンドがあります。

サーバ側
dokku urls ruby-rails-sample

ではそのURLにアクセスしてみましょう。

f:id:patorash:20170914000701p:plain
デプロイしたruby-rails-sampleにアクセスしたところ

はい、現在時刻を表示するアプリがちゃんとデプロイされました。よし、チュートリアル終わり!

まとめ

まとめというか、感想というか。

Dokkuを使っての感想

まだ使いこなしているわけではないのですが、Herokuみたいな感じで扱えるのは日々Herokuを使っている身としては便利でした。ただ、heroku cliのように見えるdokkuコマンド群ですが、これ全部サーバー側での作業なのでheroku cliのほうが圧倒的に便利です。ローカル側からdokkuが操作できるのはgit push(デプロイ)くらいなもんです。

postgresプラグインAWSへの定期バックアップ設定とかもできるみたいだし、Dockerなのでバージョンも融通ききそうだし、ちゃんと設定すれば問題はなさそうに思います。プラグインは豊富で、redisやelasticsearchもあったので、それらも今後試していきたいところです。

CloudGarageを使っての感想

起動めっちゃ速い。これに尽きます。3台あるうちの1台しか使ってないので、またネタ考え付いたらいろいろ試してみたいですねぇ。当分はDokkuの検証環境として使わせてもらいます!