RedashをGoogle Compute Engineに立てる手順をまとめました。
#環境
- Google Compute Engine
- Redash.2.0.0
- Let's Encrypt
#前提条件
- GCPプロジェクトが作成できていること
- ドメインが取得できていること
#ゴール
- RedashへGoogle認証でログインできる
- HTTPS化する
#手順
##Redashの仮想マシンイメージから仮想マシンを立てる
GCEの仮想マシンイメージを作成。
gcloud compute images create "redash-2-0-0" --source-uri gs://redash-images/redash.2.0.0.b2990.tar.gz
GCEの仮想マシンを起動。推奨は、n1-standard-1だが、g1-smallで始める。
リソースが足りなければ、後でスケールアップする。
gcloud compute instances create redash \
--image redash-2-0-0 --scopes storage-ro,bigquery \
--machine-type g1-small --zone asia-east1-a
GCPのコンソールでファイヤーウォールの設定で、HTTPとHTTPSのトラフィックを許可する。
特定のIPからのみ接続したい場合は、事前に固定IPのみを許容するネットワークタグを作成し、設定する。
外部IPアドレス設定からタイプを"静的"に設定する。
Cloud DNSでドメインと静的IPをマッピングする。
##Let's EncryptでHTTPS化する
Let's Encryptのクライアントcertbotをインストールする。
wget https://dl.eff.org/certbot-auto
一時的に、nginxの設定をデフォルトに戻す。
sudo rm /etc/nginx/sites-enabled/redash
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-available/
certbotで証明書を作成する。
./certbot-auto certonly --webroot -w /var/www/html -d {自身のドメイン}
nginxの設定を変更する。
upstream redash_servers {
server 127.0.0.1:5000;
}
server {
listen 80;
# Allow accessing /ping without https. Useful when placing behind load balancer.
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_pass http://redash_servers;
}
location / {
# Enforce SSL.
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
# Make sure to set paths to your certificate .pem and .key files.
ssl on;
ssl_certificate /etc/letsencrypt/live/{自身のドメイン}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{自身のドメイン}/privkey.pem;
# Specifies that we don't want to use SSLv2 (insecure) or SSLv3 (exploitable)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Uses the server's ciphers rather than the client's
ssl_prefer_server_ciphers on;
# Specifies which ciphers are okay and which are not okay. List taken from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
access_log /var/log/nginx/redash.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
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_servers;
proxy_redirect off;
}
}
nginxの設定をもとに戻す。
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/redash /etc/nginx/sites-available/
nginxを再起動する。
##Google認証を有効化する
GoogleのクライアントIDとクライアントシークレットを環境変数に設定する。
/opt/redash/.env に設定すればよい。
export REDASH_GOOGLE_CLIENT_ID=""
export REDASH_GOOGLE_CLIENT_SECRET=""
ドメインを設定する。
cd /opt/redash/current
sudo -u redash bin/run ./manage.py org set_google_apps_domains {自身のドメイン}
#参考