SynologyのNASでDockerでWebサービスを稼働できるか確認しました。
現時点ではまだ備忘録の段階で、最終的にはルータでポートの開放を行い、既存のサーバの置き換えを行う予定です。
その前段階として、Let'sEncryptの証明書も取得できない段階ですが、「dockerコンテナへhttpsで通信ができるか」の確認を行いました。
DSM(DiskStation Manager)のあの機能はどこにあった?など、ここを見て設定ができるようにと記録を残すことにしました。
背景
- すでにLinuxサーバで稼働しているWebサービスがある
- NASでWebサーバが使えることを知ったので、ここに移行できるかまずは、Nginxのコンテナを起動して確認する
- 動作確認の段階なので 証明書はNASにインストールされている自己証明書を使う
- ルータでポート変換するので ポートは443以外のポートでも問題ない
概要
NASとしてはhttpsをポート18080で待ち受ける
NASのリバースプロキシで18080(https)--->8088(http)
Dockerコンテナはホスト側(8088)-->コンテナ側(80)
ここは後で図を描く予定です
NAS DiskStation Managerでの設定
DiskStation Managerのバージョンは7.1.1
- テスト環境としてDNSを設定
・ パッケージセンターから「DNS Server」をインストール
・ 「DNS Server」を開き、「作成」→「プライマリーゾーン」
・ ドメイン名:local.dockertest.tokyo (テスト中のアクセスで使う名前)
プライマリDNSサーバ:192.168.1.1 (ルータのIPアドレス)
・ゾーンID「local.dockertest.tokyo」が作成されるので、右クリックして「リソースレコード」を選択
・作成→Aタイプを選択し、IPアドレスにNASのアドレスを入力
- リバースプロキシの設定
リバースプロキシでhttps(18088)をhttp(8080)に転送する設定を行う
・コントロールパネル → ログインポータル → 詳細設定 → リバースプロキシ
・リバースプロキシ規則の入力
(1) 任意 識別するための名前 (プロキシ名を反転は翻訳の誤り?)
Target
(2) プロトコル:HTTPSを選択
(3) ホスト名:NASにアクセスする時の名前 このテストではDNSで仮に設定した名前
送り先
(4) ポート:ブラウザでNASにアクセスする時のポート番号
(5) ホスト名:localhost
(6) ポート:8088 Dockerのホスト側ポート
NAS でのDockerコンテナの起動
・ Dockerコンテナで表示しているページなのか識別できるように、Nginxで表示するindex.htmlを作成する
ディレクトリは作業用アカウントのHOMEディレクトリに作成したdockerWebDirディレクトリを使用する
rainuser@DS1621-3:~$ cat /volume1/homes/rainuser/dockerWebDir/index.html
Displayed with docker's nginxi<br>
on DS1621 Made by Taro
・ dockerコンテナの起動
rainuser@DS1621-3:~$ docker run --name hello-nginx --rm -v /var/services/homes/rainuser/dockerWebDir:/usr/share/nginx/html:ro -d -p 8088:80 nginx
bfd7c8b1a4905f04a1d6fd06693d56f462a37b5262d8e7c52d490e4c5894aa52
ブラウザでの動作確認
・ ブラウザからはhttpsを指定して、DNSサーバで作成してテスト用のドメイン名でアクセスする
・ 自己証明書を使用しているので、この時に「自己署名証明書の警告」が表示されるので、「危険を承知で表示」などを選択してページを表示させる
下記はsafariでの表示例 「危険性を理解している場合は このWebサイトを閲覧できます」の赤枠部分をクリックする
下記はFirefoxで証明書を確認した時の表示で、「安全ではありません」「セキュリティ例外として追加されました」と表示されているが、httpsで接続できた