AMIで建てたRedash(v8)を自前で作る環境のRedash(v10)に乗り換える
事前に分かってること
AMIで建てた環境はDockerが敷かれていてこんな感じらしい
postgresqlのデータを抜き出す
まずpostgresqlの中のデータを抜き出す
docker ps
で覗くと postgres:9.6-alpine
があったのでこいつをdumpしていく
$ sudo docker ps
$ sudo docker exec {container_id} pg_dump -U postgres > dump.sql
サーバーの外に持ってきておく
$ scp {...}:/home/ubuntu/dump.sql .
新環境にDockerを入れる
今回はec2でubuntuを建てました
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
Docker入れていく
sudoなしでも実行できるようにする
$ sudo gpasswd -a ubuntu docker
$ sudo systemctl restart docker
$ exit
docker-compose.ymlとenvを書く
/opt
の下に redash
ディレクトリを作ってここに置いておきます
$ cd/opt
$ sudo mkdir redash
$ sudo vim docker-compose.yml
$ sudo vim env
$ sudo chmod 755 -R redash
v8の時と似たようなyml置いておけば良さそうですが、今回はDB(※)をインスタンス外に繋ぎに行きたかったので、そこだけ変えています
※ 分析データが入っているデータではなく、redashのユーザーデータやクエリーデータを保存するDB
公式が指示するv8→v10のマイグレーション作業にも従いました
docker-compose.yml
version: "3.9"
x-redash-service: &redash-service
image: redash/redash:10.0.0.b50363
depends_on:
- redis
env_file: ./env
restart: always
services:
server:
<<: *redash-service
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
worker:
<<: *redash-service
command: worker
environment:
QUEUES: "periodic emails default"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
redis:
image: redis:5.0-alpine
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
env
PYTHONUNBUFFERED=0
REDASH_LOG_LEVEL=INFO
REDASH_REDIS_URL=redis://redis:6379/0
REDASH_COOKIE_SECRET={ランダムな値}
REDASH_SECRET_KEY={ランダムな値}
REDASH_DATABASE_URL=postgresql://{ユーザー名}:{パスワード}@{ホスト}/{DB名}
ちなみに、REDASH_COOKIE_SECRETとかで使っているランダムな値は
$ python -c 'import secrets; print(secrets.token_hex())'
で取ると良いらしい。 参照: https://redash.io/help/open-source/admin-guide/secrets
⚠ DBを外部に建てたのでPostgreSQL関連の記述を全て消しています
起動してみる
先程のdump.sqlは一旦スルーして、起動してみます
$ docker compose run --rm server create_db
$ docker compose up -d
$ open {host}:80
出てきた 🎉
バックアップを復元
DBに繋いで一旦試しに動かしてみた時のデータを葬ります
$ psql -h {ホスト名} -U {ユーザー名} -d postgres --password
=> DROP DATABASE {DB名};
=> CREATE DATABASE {DB名};
dump.sqlを新しい環境に持っていく
$ scp ./dump.sql {...}:/home/ubuntu/
そしてdump.sqlを流し込む
$ psql -h {ホスト名} -U {ユーザー名} -d {DB名} --password -f ./dump.sql
このままだと、データの暗号化周りでエラーが出て使い物にならないので、まず/opt/redash/env
のREDASH_COOKIE_SECRET
と REDASH_SECRET_KEY
を前環境で使っていた値に戻し、以下を実行
$ docker compose run --rm server manage database reencrypt {古いREDASH_SECRET_KEY} {新しいREDASH_SECRET_KEY}
これで再度REDASH_COOKIE_SECRET
と REDASH_SECRET_KEY
を新しいものに差し替え、 docker compose up -d
すると正常にアクセスが出来る
SSL化
redash公式から案内がある以下gistに従う
Googleログインを有効化
まずGoogle cloudでプロジェクト作成します。
OAuth同意画面
次に画面のサイドバーから「OAuth同意画面」の設定をします
User Type は「内部」
同意画面はお好みで入力 (Googleログインの際に確認画面に出てくる情報です」
スコープは何も編集せず進む
認証情報の設定
「認証情報」→「認証情報を作成」→「OAuthクライアントID」
アプリケーションの種類: ウェブアプリケーション
名前: お好み (今回は redash
にしました )
承認済みリダイレクトURI: https://{redashがホストされているホスト名}/oauth/google_callback
これでクライアントID と クライアントシークレット が有効になります
各情報をenvにセット
/opt/redash/env
に以下を追記します
REDASH_GOOGLE_CLIENT_ID={クライアントID}
REDASH_GOOGLE_CLIENT_SECRET={クライアントシークレット}
再起動
$ docker compose down
$ docker compose up -d
Discussion