CloudGarage Release Tourに参加してからなんかやってみようと考えていたところで、本でDockerの勉強をしていたら、Dokkuの存在を知りました。
Dokkuとは?
Dokkuとは、自分でPaaSを作ることができるツールです。Dockerコンテナべースで組める他、Herokuのようにgit pushでのデプロイに対応しています。また、Herokuのbuildpackを使ったコンテナ作成が行われるので、動作環境としては本当にHerokuに近いんじゃないかなと思います。
Dokku - The smallest PaaS implementation you've ever seen
動作環境
UbuntuやDebianがオススメで、メモリは最低でも1GB以上必要です。CloudGarageのお試しプランでは、メモリが1GBなのでギリギリ試すことができました。
やってみる
とりあえずやってみます。まず、CloudGarageのアカウント登録を済ませました。無料で14日試せます!
インスタンスを立てる
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にアクセスしてみましょう。
はい、現在時刻を表示するアプリがちゃんとデプロイされました。よし、チュートリアル終わり!
まとめ
まとめというか、感想というか。
Dokkuを使っての感想
まだ使いこなしているわけではないのですが、Herokuみたいな感じで扱えるのは日々Herokuを使っている身としては便利でした。ただ、heroku cliのように見えるdokkuコマンド群ですが、これ全部サーバー側での作業なのでheroku cliのほうが圧倒的に便利です。ローカル側からdokkuが操作できるのはgit push(デプロイ)くらいなもんです。
postgresプラグインはAWSへの定期バックアップ設定とかもできるみたいだし、Dockerなのでバージョンも融通ききそうだし、ちゃんと設定すれば問題はなさそうに思います。プラグインは豊富で、redisやelasticsearchもあったので、それらも今後試していきたいところです。
CloudGarageを使っての感想
起動めっちゃ速い。これに尽きます。3台あるうちの1台しか使ってないので、またネタ考え付いたらいろいろ試してみたいですねぇ。当分はDokkuの検証環境として使わせてもらいます!