Docker による Apache Web ゲートウェイ
Docker による Apache Web ゲートウェイ
コミュニティの皆さん、こんにちは。
この記事では、以下を使用して、Docker でプログラムによって Apache Web ゲートウェイを構成します。
- HTTPS プロトコル
- Web ゲートウェイと IRIS インスタンス間の安全な通信を確保する TLS/SSL

イメージには、Web ゲートウェイ用と IRIS インスタンス用の 2 つを使用します。
すべての必要なファイルは、こちらの GitHub リポジトリで入手可能です。
では、git clone から始めましょう。
git clone https://github.com/lscalese/docker-webgateway-sample.git
cd docker-webgateway-sample
システムの準備
権限に関する問題を回避するために、システムにユーザーとグループが必要です。
- www-data
- irisowner
コンテナと証明書ファイルの共有に必要です。 これらがシステムに存在しない場合は、以下を実行します。
sudo useradd --uid 51773 --user-group irisowner
sudo groupmod --gid 51773 irisowner
sudo useradd –user-group www-data
証明書の生成
この例では、以下の証明書を使用します。
- HTTPS Web サーバーの使用状況
- Web ゲートウェイクライアントの TLS/SSL 暗号化
- IRIS インスタンスの TLS/SSL 暗号化
これらを生成するためにすぐに使用できるスクリプトが用意されています。
ただし、証明書の件名はカスタマイズする必要がありますが、これは、 gen-certificates.sh ファイルを編集するだけです。
以下は、OpenSSL subj 引数の構造です。
- C: 国コード
- ST: 州
- L: 場所
- O: 組織
- OU: 組織ユニット
- CN: コモンネーム(基本的に、ドメイン名またはホスト名)
これらの値を自由に変更してください。
# sudo is needed due chown, chgrp, chmod ...
sudo ./gen-certificates.sh
すべてが正しく設定されたら、証明書を含む ./certificates/ と ~/webgateway-apache-certificates/ という新しいディレクトリが 2 つ表示されます。
| ファイル | コンテナ | 説明 |
|---|---|---|
| ./certificates/CA_Server.cer | webgateway、iris | 認証局サーバー証明書 |
| ./certificates/iris_server.cer | iris | IRIS インスタンスの証明書(ミラーと webgateway の通信暗号化に使用) |
| ./certificates/iris_server.key | iris | 関連する秘密鍵 |
| ~/webgateway-apache-certificates/apache_webgateway.cer | webgateway | Apache Web サーバーの証明書 |
| ~/webgateway-apache-certificates/apache_webgateway.key | webgateway | 関連する秘密鍵 |
| ./certificates/webgateway_client.cer | webgateway | webgateway と IRIS の通信を暗号化するための証明書 |
| ./certificates/webgateway_client.key | webgateway | 関連する秘密鍵 |
自己署名証明書がある場合、Web ブラウザにセキュリティ警告が表示されることに注意してください。 認証許可から配布された証明書がある場合はもちろん、自己署名証明書の代わりにそれを使用できます(特に Apache サーバー証明書の場合)。
Web ゲートウェイ構成ファイル
構成ファイルを見てみましょう。
CSP.INI
CSP.INI ファイルは webgateway-config-files ディレクトリにあります。
イメージにプッシュされますが、コンテンツはランタイム時に変更可能です。 このファイルをテンプレートとして考えてください。
この例では、コンテナの起動時に、以下のパラメーターがオーバーライドされます。
- Ip_Address
- TCP_Port
- System_Manager
詳細は、startUpScript.sh をご覧ください。 大まかに言えば、sed コマンドラインで置換が実行されます。
また、このファイルには、IRIS インスタンスとの通信を保護する SSL/TLS 構成が含まれています。
SSLCC_Certificate_File=/opt/webgateway/bin/webgateway_client.cer
SSLCC_Certificate_Key_File=/opt/webgateway/bin/webgateway_client.key
SSLCC_CA_Certificate_File=/opt/webgateway/bin/CA_Server.cer
これらは重要な行です。 証明書ファイルがコンテナで使用できることを確認する必要があります。
これは、後で docker-compose ファイルの volume で行います。
000-default.conf
これは、Apache 構成ファイルです。 HTTPS プロトコルの使用を許可し、HTTP 呼び出しを HTTPS にリダイレクトします。
証明書と秘密鍵ファイルはこのファイルにセットアップされます。
SSLCertificateFile /etc/apache2/certificate/apache_webgateway.cer
SSLCertificateKeyFile /etc/apache2/certificate/apache_webgateway.key
IRIS インスタンス
IRIS インスタンスでは、Web ゲートウェイとの SSL/TLS 通信を許可するための最小限の要件のみを以下の手順で構成します。
%SuperServerSSL 構成。- SSLSuperServer セキュリティ設定を有効にします。
- Web ゲートウェイサービスを使用できる IP のリストを制限します。
構成を容易にするために、config-api は単純な JSON 構成ファイルと合わせて使用されます。
{
"Security.SSLConfigs": {
"%SuperServer": {
"CAFile": "/usr/irissys/mgr/CA_Server.cer",
"CertificateFile": "/usr/irissys/mgr/iris_server.cer",
"Name": "%SuperServer",
"PrivateKeyFile": "/usr/irissys/mgr/iris_server.key",
"Type": "1",
"VerifyPeer": 3
}
},
"Security.System": {
"SSLSuperServer":1
},
"Security.Services": {
"%Service_WebGateway": {
"ClientSystems": "172.16.238.50;127.0.0.1;172.16.238.20"
}
}
}
操作は必要ありません。 この構成はコンテナの起動時に自動的に読み込まれます。
tls-ssl-webgateway イメージ
dockerfile
ARG IMAGEWEBGTW=containers.intersystems.com/intersystems/webgateway:2021.1.0.215.0
FROM ${IMAGEWEBGTW}
ADD webgateway-config-files /webgateway-config-files
ADD buildWebGateway.sh /
ADD startUpScript.sh /
RUN chmod +x buildWebGateway.sh startUpScript.sh && /buildWebGateway.sh
ENTRYPOINT ["/startUpScript.sh"]
デフォルトのエントリポイントは /startWebGateway ですが、Web サーバーを起動する前にいくつかの操作を実行する必要があります。 CSP.ini ファイルはテンプレートであり、起動時にいくつかのパラメーター(IP、ポート、システムマネージャー)を変更する必要があることに注意してください。 これらの変更は startUpScript.sh によって行われ、その後で初期化エントリポイントのスクリプト /startWebGateway が実行されます。
コンテナの起動
docker-compose ファイル
コンテナを起動する前に、docker-compose.yml ファイルを変更する必要があります。
**SYSTEM_MANAGER**は Web Gateway Management の https://localhost/csp/bin/Systems/Module.cxw へのアクセスが許可された IP で設定する必要があります。基本的に、あなたの IP アドレスです(カンマ区切りのリストである場合があります)。**IRIS_WEBAPPS**は、あなたの CSP アプリケーションのリストで設定する必要があります。 リストはスペース区切りです(例:IRIS_WEBAPPS=/csp/sys /swagger-ui)。 デフォルトでは、/csp/sysのみが公開されます。ポート 80 と 443 はマッピングされています。 これらのポートがすでに使用されている場合は、他のポートに調整します。
version: '3.6'
services:
webgateway:
image: tls-ssl-webgateway
container_name: tls-ssl-webgateway
networks:
app_net:
ipv4_address: 172.16.238.50
ports:
# change the local port already used on your system.
- "80:80"
- "443:443"
environment:
- IRIS_HOST=172.16.238.20
- IRIS_PORT=1972
# Replace by the list of ip address allowed to open the CSP system manager
# https://localhost/csp/bin/Systems/Module.cxw
# see .env file to set environement variable.
- "SYSTEM_MANAGER=${LOCAL_IP}"
# the list of web apps
# /csp allow to the webgateway to redirect all request starting by /csp to the iris instance
# You can specify a list separate by a space : "IRIS_WEBAPPS=/csp /api /isc /swagger-ui"
- "IRIS_WEBAPPS=/csp/sys"
volumes:
# Mount certificates files.
- ./volume-apache/webgateway_client.cer:/opt/webgateway/bin/webgateway_client.cer
- ./volume-apache/webgateway_client.key:/opt/webgateway/bin/webgateway_client.key
- ./volume-apache/CA_Server.cer:/opt/webgateway/bin/CA_Server.cer
- ./volume-apache/apache_webgateway.cer:/etc/apache2/certificate/apache_webgateway.cer
- ./volume-apache/apache_webgateway.key:/etc/apache2/certificate/apache_webgateway.key
hostname: webgateway
command: ["--ssl"]
iris:
image: intersystemsdc/iris-community:latest
container_name: tls-ssl-iris
networks:
app_net:
ipv4_address: 172.16.238.20
volumes:
- ./iris-config-files:/opt/config-files
# Mount certificates files.
- ./volume-iris/CA_Server.cer:/usr/irissys/mgr/CA_Server.cer
- ./volume-iris/iris_server.cer:/usr/irissys/mgr/iris_server.cer
- ./volume-iris/iris_server.key:/usr/irissys/mgr/iris_server.key
hostname: iris
# Load the IRIS configuration file ./iris-config-files/iris-config.json
command: ["-a","sh /opt/config-files/configureIris.sh"]
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
ビルドして起動します。
docker-compose up -d --build
コンテナ tls-ssl-iris と tls-ssl-webgateway が起動します。
Web アクセスのテスト
Apache のデフォルトページ
http://localhost ページを開きます。 自動的に https://localhost にリダイレクトされます。
ブラウザにセキュリティ警告が表示されます。 これは、自己署名証明書の場合の通常の動作です。リスクを受け入れて続行してください。

Web ゲートウェイ管理ページ
https://localhost/csp/bin/Systems/Module.cxw を開き、サーバー接続をテストします。 
管理ポータル
https://localhost/csp/sys/utilhome.csp を開きます。

上出来です! Web ゲートウェイの例が動作しています!
IRIS ミラーと Web ゲートウェイ
前回の記事では、ミラー環境を構築しましたが、Web ゲートウェイが不足していました。 今回は、それを改善できます。
Web ゲートウェイといくつかの改善が追加された新しい iris-miroring-with-webgateway リポジトリを利用できます。
- 証明書はオンザフライではなく、別のプロセスで生成されるようになっています。
- IP アドレスは、docker-compose と JSON 構成ファイルの環境変数に置き換えられています。 変数は '.env' ファイルで定義されています。
- リポジトリをテンプレートとして使用できます。
以下のように環境を実行するには、リポジトリ README.md ファイルをご覧ください。
