RedashをGoogle Compute Engineに立てる

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のみを許容するネットワークタグを作成し、設定する。

![スクリーンショット 2018-09-04 20.51.56.png](https://qiita-image-store.s3.amazonaws.com/0/250540/a1ea0648-d869-654f-abce-53c808c2f132.png)

外部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 {自身のドメイン}
```

#参考

- https://redash.io/help/open-source/setup#google-compute-engine