Redashのバージョンを7から8へアップグレードしました。
バージョン8からはDockerベースのみサポートされるので、バックアップを取得してDockerベースに移行しました。
旧環境のバックアップ
データベースのバックアップ
RedashのサーバーにSSH接続して、PostgreSQLのpg_dumpコマンドでデータベースのダンプを取得します。
$ sudo -u redash pg_dump -Fc redash > old_redeash.dump
環境変数のバックアップ
移行先の環境で「REDASH_COOKIE_SECRET」の値が必要になるので控えておきます。
$ cd /opt/redash
$ vim .env
export REDASH_LOG_LEVEL="INFO"
export REDASH_REDIS_URL=redis://localhost:6379/0
export REDASH_DATABASE_URL="postgresql:///redash"
export REDASH_COOKIE_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
新しいEC2インスタンスを起動
下記のリンク先にあるAWSのAMIからバージョン8のEC2インスタンスを起動します。
Setting up a Redash Instance
インスタンスが起動してからブラウザでパブリックIPにアクセスすると、セットアップページが表示されました。ホストサーバーにSSH接続してRedashのインストール状況を確認しました。
コンテナの確認
$ cd /opt/redash
$ sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d13ae964a37c redash/nginx:latest "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp redash_nginx_1
862598628ff5 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" About a minute ago Up About a minute 5000/tcp redash_adhoc_worker_1
d84be218adfc redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" About a minute ago Up About a minute 5000/tcp redash_scheduler_1
9d680af57dbb redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" About a minute ago Up About a minute 5000/tcp redash_scheduled_worker_1
88dacea3c333 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp redash_server_1
1587a6649920 postgres:9.6-alpine "docker-entrypoint.s…" About a minute ago Up About a minute 5432/tcp redash_postgres_1
bc73e56ac9a2 redis:5.0-alpine "docker-entrypoint.s…" 3 months ago Up About a minute 6379/tcp redash_redis_1
データベースの確認
$ sudo docker exec redash_postgres_1 psql -U postgres -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
データベースの移行
以下root権限で実行していきます。
$ sudo su
Dockerコンテナの停止
$ docker-compose stop server scheduler scheduled_worker adhoc_worker nginx redis
redashユーザーの作成
$ docker exec -it redash_postgres_1 psql -U postgres
CREATE USER redash;
CREATE DATABASE redash OWNER redash;
\q
バックアップファイルのコピー
取得しておいたデータベースのバックアップファイルをホストサーバーのtmpディレクトリにコピーしておき、そこからさらにpostgresコンテナのtmpディレクトリにコピーします。
$ docker cp /tmp/old_redeash.dump redash_postgres_1:/tmp/old_redeash.dump
データベースのリストア
$ docker exec redash_postgres_1 pg_restore -U postgres -d postgres /tmp/old_redeash.dump
データベースの置き換え
$ docker exec -it redash_postgres_1 psql -U postgres template1
ALTER DATABASE redash OWNER TO postgres;
DROP DATABASE postgres;
ALTER DATABASE redash RENAME TO postgres;
\q
環境変数の設定
旧環境で控えておいた「REDASH_COOKIE_SECRET」の値を「REDASH_COOKIE_SECRET」と「REDASH_SECRET_KEY」に設定します。
$ vim env
REDASH_COOKIE_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REDASH_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
データベースのマイグレーション
下記のコマンドでRedashのバージョン7から8へのデータベースの移行内容が反映します。
$ docker-compose run --rm server manage db upgrade
Dockerコンテナの開始
$ docker-compose up -d
これでDockerベースのRedashに移行完了です。