docker上に立てたredashとローカルのmysqlを連携させるのに少し苦労したので方法を残しておこうと思います
-
redashとは
-
OSSで提供されているダッシュボード作成ツール
-
データをredashに連携させる事でコードなどを書かずにデータをグラフ化することができます
-
今回の目的
-
docker上に立てたredashとMacpcのローカルで起動しているmysqlを連携させる
-
mysqlのデータをredashでグラフ化させる
(redash自体の開発は行わない想定です)
git clone
git clone https://github.com/GitSumito/redash-v7.git
*バージョン8が最も最新ですがバグが多く出たため、バージョン7をクローンしています
またdockerのbuild時にエラーが多く発生したためbuild済みのものをクローンしています
環境変数の設定(postgresに認証なしにアクセスできるようにする)
redash.envファイルに
POSTGRES_HOST_AUTH_METHOD=trust
を加筆することでpostgresアクセス時に出てしまうauthのエラーが出なくなりますが用途によって使い分けてください
コンテナの起動
docker-compose run --rm server create_db
dbにddlを流し込む
docker-compose up -d
コンテナを起動
*ログが見たい場合はdocker-compose up
でコマンド実行してください
redashへのアクセス
http://localhost指定したport
にアクセス
redashの登録画面が表示されたら情報を入力して[Setup]で登録
データベースとの連携
Setupが完了すると下記画面に遷移します
データベース連携に使用するのは真ん中のこの部分です
*画像には斜線が引いてありますが初期状態では引いていない状態で正しいです
1.Connect a Data Source
を押下
mysqlをリソースとして指定した画面の後でこのような画面が表示されると思います
ここでHost
にhost.docker.internal
と入力
User
とPassword
のところにはmysqlの情報を入力
保存
[save]ボタンを押下
dashboardに戻り2.Create your first query
を押してデータが連携されていれば完了です
補足
なぜHostがhost.docker.internal
のような文字列になるのでしょうか?
それはdockerとMacは友達ですが、dockerとmysqlは友達の友達
つまり、他人なのでdockerから直にmysqlを連携することが出来ないからです
×docker→mysql
○docker→Macポート→mysql
そこで一度Macのポートを経由する必要があります
そこでMacのポートに当たるのがhost.docker.internal
です
*ちなみにhost.docker.internal
はdockerだけが知っているポート、向き先のためMacからアクセスしようとしてもアクセスはできないので下のような画面になってしまいます
これからもhost.docker.internal
に助けられることが多そうです!
誤り等あればコメントお願いします!
おしまい!