https://redash.io/help/open-source/admin-guide/how-to-upgrade
今までv7.0.0までは /opt/redash/current/bin/upgrade
のように簡単にバージョンアップが可能でしたが、v8.0.0からDockerマストになってしまったので、だいぶ前にVPS上(Ubuntu)にdocker-composeをインストールして構築、HTTPS化(Let’s Encrypt)、ベーシック認証まで設定してみました。
余談
以下3年前に構築方法ブログしてたけど、ほとんど忘れてるな…なつい。AWSだとRedash用のAMIがあるのでそれで構築したほうが早いですが、時代遅れなので、新規で構築するならDockerを使いましょう!!
■getredash/setup
https://github.com/getredash/setup
https://github.com/getredash/setup/blob/master/setup.sh
Redashの公式にDocker用のシェルスクリプトがあるのでこいつを使って構築します。OSはUbuntu推奨で、メモリー4GB以上じゃないと動作しません。以下がコンテナの役割となります。
- Server: WebUIを提供するサービス
- Scheduled Worker: スケジューリングされたクエリを処理する
- Adhoc Worker: 都度実行されるクエリを処理する
- Scheduler: Redisにjobをキューイングする
■Install Redash
- OS
1 2 3 4 5 6 7 8 9 10 11 12 |
NAME="Ubuntu" VERSION="18.04.4 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.4 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic |
- run setup.sh
1 2 3 4 5 |
$ sudo su - # git clone https://github.com/getredash/setup.git # chmod 755 setup/setup.sh # mkdir /opt/redash # sh setup/setup.sh |
- エラーが出たら
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# cd /opt/redash # docker-compose up -d # docker-compose run --rm server create_db # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0fe49f5ce7d5 redash/nginx:latest "nginx -g 'daemon of…" 13 hours ago Up 13 hours 0.0.0.0:80->80/tcp,443/tcp redash_nginx_1 0b98d9728de5 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 13 hours ago Up 13 hours 0.0.0.0:5000->5000/tcp redash_server_1 5f2ca36d8012 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 13 hours ago Up 13 hours 5000/tcp redash_scheduler_1 b92c5c66dbd3 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 13 hours ago Up 13 hours 5000/tcp redash_scheduled_worker_1 acc90b8806c6 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 13 hours ago Up 13 hours 5000/tcp redash_adhoc_worker_1 75a83b6f662c postgres:9.6-alpine "docker-entrypoint.s…" 13 hours ago Up 13 hours 5432/tcp redash_postgres_1 7c283e965a81 redis:5.0-alpine "docker-entrypoint.s…" 13 hours ago Up 13 hours 6379/tcp redash_redis_1 |
■Make https
https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e
- make directory certs
1 |
# mkdir -p /opt/redash/nginx/certs && mkdir -p /opt/redash/nginx/certs-data |
- /opt/redash/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
upstream redash { server redash:5000; } server { listen 80; listen [::]:80; server_name redash.adachin.me; location ^~ /ping { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_pass http://redash; } location / { rewrite ^ https://$host$request_uri? permanent; } location ^~ /.well-known { allow all; root /data/letsencrypt/; } } |
- fix /opt/redash/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
nginx: image: nginx:latest ports: - "80:80" - "443:443" #追加 depends_on: - server links: - server:redash volumes: #追加 - /opt/redash/nginx/nginx.conf:/etc/nginx/conf.d/default.conf #追加 - /opt/redash/nginx/certs:/etc/letsencrypt #追加 - /opt/redash/nginx/certs-data:/data/letsencrypt #追加 restart: always |
- docker-compose down
1 |
# docker-compose down |
- make certs
1 2 3 4 5 6 7 |
docker run -it --rm \ -v /opt/redash/nginx/certs:/etc/letsencrypt \ -v /opt/redash/nginx/certs-data:/data/letsencrypt \ deliverous/certbot \ certonly \ --webroot --webroot-path=/data/letsencrypt \ -d redash.adachin.me #変更 |
- fix /opt/redash/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
upstream redash { server redash:5000; } server { listen 80; listen [::]:80; server_name redash.adachin.me; location ^~ /ping { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://redash; } location / { rewrite ^ https://$host$request_uri? permanent; } location ^~ /.well-known { allow all; root /data/letsencrypt/; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name redash.adachin.me; add_header Strict-Transport-Security "max-age=31536000" always; ssl_session_cache shared:SSL:20m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDH+AESGCM:ECDH+AES256:ECDH+AES128:!ADH:!AECDH:!MD5;"; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4; ssl_certificate /etc/letsencrypt/live/redash.adachin.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/redash.adachin.me/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/redash.adachin.me/chain.pem; access_log /dev/stdout; error_log /dev/stderr info; # other configs location / { auth_basic "Basic Authentication"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_pass http://redash; } } |
- make htpasswd
1 2 3 4 5 |
# apt install apache2-utils # cd /opt/redash/nginx # htpasswd -c .htpasswd adachindayo # docker-compose down # docker-compose up -d |
- reload nginx
1 |
# docker-compose restart nginx |
■ How to update cert of Let’s Encrypt
- update certs
1 2 |
# docker run -t --rm -v /opt/redash/nginx/certs:/etc/letsencrypt -v /opt/redash/nginx/certs-data:/data/letsencrypt deliverous/certbot renew --webroot --webroot-path=/data/letsencrypt # docker-compose restart nginx |
- update cert shellscripts
1 2 3 4 5 6 7 |
# cat update-ssl.sh #/bin/bash cd /opt/redash && docker run -t --rm -v /opt/redash/nginx/certs:/etc/letsencrypt -v /opt/redash/nginx/certs-data:/data/letsencrypt deliverous/certbot renew --webroot --webroot-path=/data/letsencrypt docker-compose restart nginx # crontab -l 0 5 * * * /home/hoge/update-ssl.sh |
上記のようにシェルスクリプトで毎日renewしたほうが良き。
- Access
■まとめ
結構手順が多いので、これ見れば一発で構築できるので参考にしてみてください。ベーシック認証にしてしまったけど、ダイジェスト認証のほうがよりセキュアですね。EC2であればHTTP化などALBで行うので、設定が必要ないのと、DBはRDSに移行マストですね。次はECS/Fargateで動かせるように模索中。Dockerに移行大変だな…
uploadした証明書が使えるpull reqがmergeされたようなので、次期バージョンではワイルドカードの証明書とかでも使いまわせそうですね!https://t.co/8JXUUX595r
— Sumito.Tsukada (@19840209) June 10, 2020
※追記
0件のコメント