WEBサービス

GoogleCloudでRedashのhttps(SSL)化設定する手順

GoogleCloudでRedashのhttps(SSL)化設定する手順

Redashのhttps対応ってどうやるの?
公式の説明にミスがあるのでそのまま進めるとハマりますよ。。。


Redashは様々なデータソースから抽出したデータをクエリで結合して可視化できるサービス。

他のサイトにiframeでグラフを埋め込むには、Redashを立ち上げているサーバーもhttps(SSL)対応する必要がある。

ではどうやってhttps(SSL)対応するのか。

詰まりやすいポイントはあるのか。

そこで今回はGoogleCloudでRedashのhttps(SSL)化設定する手順について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

GoogleCloudでRedashのhttps(SSL)化設定する手順がわかり、https対応に何時間も悩まずに済む。


GoogleCloudでRedashのhttps(SSL)化設定する手順

RedashのHTTPS(SSL)の設定については、Redashの管理ガイドのページに書かれている。


ページには以下のように書かれている。

The instructions below are for the legacy images. If you use the new Docker based images, see the following guide:
https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e

実際はガイドのページではなく、GitHubのページを見ることになる。


でもハマるんでしょ?
そうです。ハマります。。。


ただし冒頭に書いたように、このまま進めるとハマる。

実際にハマった。


同じようにハマらないためには、手順を少し変える必要がある



設定方法

では設定方法を追っていこう。


step
1
IP確認

Make sure the domain you picked points at the IP of your Redash server.

翻訳:選択したドメインが Redash サーバーの IP を指していることを確認してください。

これはHTTPS化よりも手前のドメイン設定なので、問題無いかと思う。

使うドメインのDNS設定にAレコードを追加してIPを指定すれば、ドメインにアクセスした際に指定したIPにアクセスするようになる。

サブドメインでもよい。


step
2
rootユーザーに切り替え

gcp-redash-instance
GoogleCloud Redash インスタンス

Switch to the root user (sudo su).

翻訳:rootユーザーに切り替えます(sudo su)。

ここでは「rootユーザーに切り替え」となっているが、その前に当然GoogleCloudのインスタンスにSSH接続しておく必要がある。

特にこだわりが無ければGoogleCloudのインスタンスのページから、ブラウザSSHで接続するといいだろう。

ログインしたら sudo su でrootユーザーになるといい。


step
3
nginxディレクトリ作成

Create a folder named nginx in /opt/redash.

翻訳:/opt/redashに「nginx」という名前のフォルダを作成します。

ここは指定の通りディレクトリを作成する。

cd /opt/redash
mkdir nginx

前のステップでrootユーザーになっておかないと、ここでディレクトリを作成する権限が無くてエラーになるので、rootユーザーになっておこう。


step
4
certsディレクトリ作成

Create in the nginx folder two additional folders: certs and certs-data.

翻訳:/opt/redash/nginx の中に「certs」と「certs-data」という名前のフォルダを作成します。

ここも指定の通りディレクトリを作成する。
指定には無いがもう一つディレクトリを作成しておく。

cd /opt/redash/nginx
mkdir certs
mkdir certs-data
mkdir conf.d

certs関連の中には後でSSL認証した際のファイルが格納される。
conf.dの中にはnginxの設定ファイルを保存する。


step
5
confファイル作成

Create the file /opt/redash/nginx/nginx.conf and place the following in it: (replace example.redashapp.com with your domain name)

翻訳:以下の内容で「/opt/redash/nginx/nginx.conf」という名のファイルを作成します。(「example.redashapp.com」の部分は自分のドメイン名に読み替えてください。)

ここも指定の通りにファイルを作成する・・・のではなく、先程作った conf.d のディレクトリにファイルを作成する。

cd /opt/redash/nginx/conf.d
nano nginx.conf

nanoコマンドで編集画面を出したら以下の内容を記入する。
server_name example.redashapp.com; の部分は自分のドメイン名に変更する。

upstream redash {
    server redash:5000;
}

server {
    listen      80;
    listen [::]:80;
    server_name example.redashapp.com;

    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/;
    }
}


step
6
docker-compose.ymlにnginxコンテナの設定を追加する

Edit /opt/redash/docker-compose.yml and update the nginx service to look like the following:

翻訳:以下のように「/opt/redash/docker-compose.yml」のnginxサービス修正する

ここに間違いがある。

修正するのは /opt/redash/docker-compose.yml ではなく、 /opt/redash/setup/docker-compose.yml

/opt/redash/docker-compose.yml を変更したところで、以降のステップは一向に進まないので注意してほしい。

またdocker-compose.ymlを編集する前に、編集前のコピーをとっておくと良いだろう。

cd /opt/redash/setup
cp docker-compose.yml  docker-compose.yml.origin
nano docker-compose.yml

追加する内容は以下のとおりだが、docker-compose.ymlファイルの中のserviceの中に追加する必要がある。

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/conf.d: /etc/nginx/conf.d
   - /opt/redash/nginx/certs:/etc/letsencrypt
   - /opt/redash/nginx/certs-data:/data/letsencrypt
 restart: always


volumes:- /opt/redash/nginx/nginx.conf:/etc/nginx/conf.d/default.conf の部分を - /opt/redash/nginx/conf.d: /etc/nginx/conf.d に変更している。

volumes: ではホストのディレクトリをコンテナにマウントしているのだが、変更しないままの内容だとディレクトリではなくファイルを指定しているのでエラーになる。

volumeのマウント設定に使うためにステップ4で /opt/redash/nginx/nginx.conf のディレクトリを追加で作成したわけだ。


docker-compose.ymlはインデントにも注意が必要だ。
インデントが違うだけでエラーになるので、編集した内容はフォーマットのチェックをしておくのが良いだろう。


step
7
コンテナを再起動して変更を反映させる

Update Docker Compose: docker-compose up -d.

翻訳: 「docker-compose up -d」コマンドでDockerの構成を更新します。

ここにも間違いがある。

まずコンテナを再起動する前にrootユーザーは終了しておく必要がある。
(rootユーザーのまま実行するとエラーになる。)

そして docker-compose up は再起動ではなく起動コマンドなので、既にコンテナが起動している状態では適切ではない。
また変更を確実に反映するにはオプションを付けるほうが良い。

まずrootユーザーを終了する

exit


そしてコンテナを再起動する。

docker-compose down
docker-compose up -d --build


step
8
SSL認証情報を生成する

Generate certificates: (remember to change the domain name)

翻訳:認証情報を生成する(ドメインの読み替えを忘れずに)

ここのコマンドも微妙に異なる。

GitHubページのコマンド

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 (自分のドメイン)

実際のコマンド

/opt/redash$ docker run -it --rm    -v /opt/redash/nginx/certs:/etc/letsencrypt    -v /opt/redash/nginx/certs-data:/data/letsencrypt    certbot/certbot    certonly    --webroot --webroot-path=/data/letsencrypt    -d (自分のドメイン)


GitHubのページでは deliverous/certbot のところを、 certbot/certbot にしている。

どちらもコンテナイメージだが、 certbot/certbot の方が新しいのでこちらを使う。


コマンドが成功すると /opt/redash/nginx/certs/opt/redash/nginx/certs-data ディレクトリの中にいくつかディレクトリやファイルが作成されているだろう。
(確認するときは sudo su でrootユーザーになっておく必要がある。)


step
9
nginxの設定ファイルにSSL用の設定を追加する

Assuming the previous step was succesful, update the nginx config to include the SSL configuration:

翻訳:前のステップが成功したら、nginxの設定ファイルにSSL設定を含めて行進する。

ここは特に問題なし。
気をつけるとするなら ssl_certificate などのpemファイルの保存ディレクトリ名にドメイン名が含まれているので読み替えが必要なくらい。

upstream redash {
    server redash:5000;
}

server {
    listen      80;
    listen [::]:80;
    server_name example.redashapp.com;

    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               example.redashapp.com;

 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/example.redashapp.com/fullchain.pem;
 ssl_certificate_key       /etc/letsencrypt/live/example.redashapp.com/privkey.pem;
 ssl_trusted_certificate   /etc/letsencrypt/live/example.redashapp.com/chain.pem;

 access_log                /dev/stdout;
 error_log                 /dev/stderr info;

 # other configs

 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;
 }
}


step
10
nginxコンテナを再起動して変更を反映させる

Restart nginx: docker-compose restart nginx.

翻訳: 「docker-compose restart nginx」コマンドでnginxコンテナを再起動する。

ステップ7と同じ手順で再起動する。

docker-compose down
docker-compose up -d --build


step
11
HTTPS化完了

All done, your Redash instance should be available via HTTPS now.

翻訳:全て完了したら、あなたのRedashインスタンスはHTTPSで利用できるはずだ。

手順に書いてあるとおり、ここまで来ればHTTPSのURLでアクセスできるはず。
というかhttpで接続しようとしてもhttpsにリライトする設定を入れたのでhttpsでしか接続できないはず。


まとめ

今回はGoogleCloudでRedashのhttps(SSL)化設定する手順について解説した。


基本的には公式サイトからリンクを貼られているGitHubページの手順で良いが、2024年9月段階では手順にいくつか間違いがある
この記事の中で間違った手順の部分は修正したので、この手順で進めればHTTPS化できるだろう。


公式の手順が間違っているとは恐るべし・・・。
手順通りにやってもうまくいかないし、Docker周りに関しては完全に素人だったので、解決にすごく時間がかかりましたよ。。。
この記事を残すことで、同じハマり方をする人を減らせればと思います。



ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-WEBサービス
-, ,

© 2024 ITips