re:dash on docker on vagrant

タイトル通りで、vagrant上でdockerを動かしてみます。

こちらを参考にdokcer、docker-composeをセットアップします。 re:dashのバージョンによっては./setup/docker/create_database.shがいらない(ファイルがそもそも存在しない)みたいです。

enomotodev.hatenablog.com

その代わり、docker-compose run --rm server create_dbを実行する必要があります。ここを参考にしました。 qiita.com

あとはdocker-compose up -dを実行してコンテナを起動させます。以下のコマンドを実行して結果が帰ってくれば起動はOKです。

[vagrant@localhost redash]$ curl http://localhost:28080
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="/login?next=http%3A%2F%2Flocalhost%3A28080%2F">/login?next=http%3A%2F%2Flocalhost%3A28080%2F</a>.  If not click the link.[vagrant@localhost redash]$ 

コピーするdocker-compose.ymlは今回はdocker-compose.production.yml を使いました。ただ、vagrant上で80ポートをポートフォワーディングしたくなかったので以下のように書き換えました。

[vagrant@localhost redash]$ diff docker-compose.yml docker-compose.production.yml 
43c43
<       - "28080:80"
---
>       - "80:80"
[vagrant@localhost redash]$

合わせて、Vagrantfileにポートフォワーディングの設定を追加します。

config.vm.network :forwarded_port, host: 28080, guest: 28080

今回の環境は、接続するDBは別のvagrant仮想マシンです。接続にはプライベートネットワークの設定を行います。vagrantのネットワーク周りの基礎知識と設定はこちらを参考にしました。

labs.septeni.co.jp

config.vm.network "private_network", ip: "192.168.33.10", virtualbox__intnet: "dev_net"

もう一個の仮想マシンも同じ設定(virtualbox__intnet: "dev_net")をします。vagrantを再起動して設定を反映させたら再度、docker-compose up -d を行います。 ホストOS側のブラウザで http://localhost:28080/を実行するとログイン画面に遷移したら完了です。たまに「Internal Server Error」が発生します。そのときは、dockerサービスを再起動すると直ります。

service docker restart

f:id:katsu68:20171007202437p:plain バージョンによってこの辺は違うようです。ログイン情報を登録するとトップページが表示されます。お疲れ様でした。 f:id:katsu68:20171007202550p:plain

プライベートネットワーク設定が完了している場合はデータソースを登録するとき、もう一つの仮想マシンIPアドレスを指定すれば接続可能です。接続できない場合は、dockerサービスを再起動すると直ったりします。うちの環境は接続先がMySQLなので接続先に192.168.33.%(仮想マシンIPアドレス)からの接続を許可する必要があります。

mysql> grant all privileges on [データベース名].* to [ユーザ名]@"192.168.33.%" identified by '[パスワード]' with grant option;