redash v10.1をGCP上で新規構築してみた(2022/06版)

数あるBIツールの中でも、OSSかつ機能が豊富な[redash](https://redash.io "redash")。
ベンチャーから大企業までカバーできる、素晴らしいツールだと思います。
今回久々に新規構築するタイミングがありましたので、備忘録として手順を残しておきます。
基本的には公式HPの案内通りに実施すればよいのですが、多少行間を読む必要があり、わかりやすく書いたつもりです。

# 作るもの 
- GCE上で動くredash  
  - redashはv8.0→v10.1(2022/6時点での最新版) にver upする
  - SSL(HTTPS)対応 

# 準備するもの
 - GCP  
 - Aレコードが追加できる自前ドメイン(例:example.com)
 - redashにアクセスする際のホスト名を考えておく(例:redash.example.com)
# 構築手順
## インスタンス作成
[公式の手順](https://redash.io/help/open-source/setup#gce "GCE構築手順")のとおり、クラウドコンソール上でイメージ作成→インスタンスを起動します。
執筆している2022/6月現在では、redashのversion8をまずは作成・起動し、その後v10.1に上げることになります。
公式にはメモリが最低4GBあればOKと記載がありますが、マシンタイプやリージョンはお好みでどうぞ。

```
$ gcloud compute images create "redash-8-0-0" --source-uri gs://redash-images/redash.8.0.0-b32245-1.tar.gz
$ gcloud compute instances create redash --image redash-8-0-0 --machine-type e2-standard-2 --zone asia-northeast1-a
```
これだけでredashを搭載したサーバが立ち上がります。月並みですがクラウドってすごいですね。

## インスタンスに固定IPを付与
上記手順で起動するインスタンスには、エフェメラルIPという動的なグローバルIPが付与されます。
度々接続先のIPが変わると困るので、固定IPを発行しインスタンスに設定します。
以下GCPの画面から操作します。
`VPCネットワーク → IPアドレス → 外部静的アドレスの予約`
IPの名前は識別できる程度に適当でよいですが、リージョンは先程のサーバのリージョンと合わせてください。
接続先は、プルダウンで作成したインスタンス名を選択して下さい。
![スクリーンショット 2022-06-11 14.57.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627308/4776c55c-bfce-6d32-06dc-8e43fa41cc47.png)

## DNS設定
※DNSとかよく分からない場合は、管理者に聞いてみてください。
先の手順で設定した固定IPと、[準備するもの](#準備するもの) で準備したホスト名とを紐付けます。
お持ちのドメインを管理できるDNSに、下記のような設定を実施してください。
`redash　　　　　　　　　A　　　　　　　　　　　　"外部静的アドレス"`

## HTTP/HTTPSアクセスのファイアウォール設定

初期設定ではサーバへのHTTP/HTTPSアクセスが開放されていないので、GCPのGUIから設定を入れます。
`Compute Enginge → サーバ名をクリック → 編集`
「ネットワーキング」の項目にファイアウォールの設定があるので、２つともチェックを入れて「保存」
![スクリーンショット 2022-06-11 15.21.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627308/a0f45168-ee7d-cd7e-9893-8966a15b1392.png)

## adminユーザーの設定
[公式手順](https://redash.io/help/open-source/setup#-Setup "セットアップ")にさらっと書いてありますが、ブラウザに`http://ホスト名/`でアクセスします。
adminユーザーのメールアドレス、パスワードなどを入力し、set upボタンを押せばredashの初期セットアップが完了です。
ユーザーの追加、接続先の追加などは割愛します。

## redash v8 → v10.1へのバージョンアップ

[公式のgithub](https://github.com/getredash/redash/releases "github")に記載されている手順をかいつまんで説明すると、
[v8→v10.0へのVerUP手順](https://github.com/getredash/redash/releases/tag/v10.0.0 "v10.0")と同じ要領でバージョンアップを進めていくのですが、
step3の記載を`redash/redash:10.1.0.b50633` に変更して進めれば
v8.0.0→v10.1に直接バージョンアップ出来ます。
サーバにSSHで接続の上、上記リンク先にある設定作業を進めましょう。

ちなみにstep7に記載の`docker-compose up --force-recreate --build`を実施すると
一旦コマンドが通った後に際限なくログが続くので、`ctrl-c`で止めましたが
その後の手順も特に問題なく、version upを完了することが出来ました。

## SSL対応
独自にSSL証明書を入手できる場合は別の手順となりますが、
ここではredashの手順にも組み込まれている、無料の認証局[Let's Encrypt](https://letsencrypt.org/ja/ "Let's Encrypt")を利用し
証明書を発行・セットアップします。

こちらもサーバにSSHを接続しての作業になります。
[HP](https://redash.io/help/open-source/admin-guide/https-ssl-setup "redash")に案内がある通り、[公式github](https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e "github")に記載の手順に従って作業を進めていきます。
手順の中に、自分のホスト名に書き換えるところが計6箇所あるので、気をつけてください。

### SSL自動更新
また[githubの手順](https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e "github")の最後に、SSL証明書の更新手順が書いてあります。
証明書の配置場所をローカルにしておけば、certbotが自動で更新してくれるのですが、、[^1]
公式手順から外れると次のメンテで嵌りそうなので、公式手順のコマンドをcronで回すことにします。[^2]

引き続きSSH経由の作業になります。
```
$ sudo su
$ cd /home/ubuntu
$ mkdir letsencrypt
$ vim letsencrypt/renew.sh
```
```renew.sh
#!/bin/sh
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

/usr/local/bin/docker-compose kill -s HUP nginx
```

上記作成後に実行テスト。
```
$ chmod 755 letsencrypt/renew.sh
$ sudo letsencrypt/renew.sh
### 実行結果が表示される。証明書の期限が30日以上あればskipped、30日を切っていれば更新が走る。
### Killing redash_nginx_1 ... done が表示されればスクリプトが最後まで回っている。
```

問題無さそうであればcron.dに設定。設定ファイルを作成し配置する。
毎月1日/15日に起動する設定にしています。
```
$ vim /etc/cron.d/letsencrypt
```
```/etc/cron.d/letsencrypt
0 0 1,15 * * root /home/ubuntu/letsencypt/renew.sh
```
設定が終わったらcron再起動
```
sudo service cron restart
sudo service cron status
### Active: active (running) の表示が出ていればとりあえずOK
```

上記で終わりです。


# 最後に
redashは下手な有料BIよりも全然使いやすいので、ぜひ広めていきたいです！
気になるところがあればご指摘くださいー。


[^1]:※[Waza Labさんの記事](https://www.wazalab.com/2019/06/17/redash%E3%81%AElets-encrypt%E3%81%AB%E3%82%88%E3%82%8Bhttps%E5%8C%96/ "Waza LabAbout
")が参考になります。
[^2]:※[Fire Sign Blogさんの記事](https://blog.fire-sign.info/1260/ "Fire Sign Blog")を参考にしました。