Dockerでのrpxyの実行
Docker用環境変数
Docker固有の環境変数がいくつかあります。
| 変数 | 説明 |
|---|---|
HOST_USER (デフォルト: user) | コンテナ内でrpxyを実行するユーザー名。 |
HOST_UID (デフォルト: 900) | HOST_USERのUID。 |
HOST_GID (デフォルト: 900) | HOST_USERのGID。 |
LOG_LEVEL (デフォルト: info) | ログレベル。debug、info、warnまたはerror。 |
LOG_TO_FILE (デフォルト: false) | /rpxy/log/rpxy.logと/rpxy/log/access.logへのファイルログをlogrotateを使用して有効にします。有効にする場合はDockerボリュームオプションで/rpxy/logをマウントしてください。 |
必要なのは、config.tomlを/etc/rpxy.tomlとしてマウントし、証明書/秘密鍵をDockerボリュームオプションで任意の場所にマウントするだけです。鍵と証明書のファイルパスはDockerコンテナ内のパスである必要があります。
LOG_TO_FILEオプションについて、ログディレクトリとファイルはホストマシン上でHOST_UID:HOST_GIDのHOST_USERが所有します。そのため、HOST_USER、HOST_UID、HOST_GIDはホストでrpxyのDockerコンテナを実行するユーザーと同じにする必要があります。./rpxy-config/などのディレクトリを/rpxy/configにマウントする必要があります。これはDockerの制限です。/etc/rpxy.tomlではなく/rpxy/configにディレクトリをマウントできます。/etc/rpxyにマウントされたファイルは/rpxy/configにマウントされたディレクトリよりも優先されます。例についてはdocker-compose.ymlまたは次のセクションを参照してください。
非特権モードでwell-knownポート(80, 443)を公開せずにHTTPSリダイレクション用カスタムポートを設定する
セキュリティ上の理由から、well-knownポートを公開せずに非特権モードでrpxyを実行したい場合があります。その場合、HTTPSリダイレクション用のカスタムポートを指定する必要があります。
コンテナマネージャーがホストのポートA(例: 80/443)をコンテナのポートB(例: 8080/8443)にマッピングする場合、rpxyはlisten_portとlisten_port_tlsにポートBを設定する必要があります。
しかし、一部のバックエンドアプリにhttp_redirection=trueを設定したい場合、rpxyはデフォルトでポートBでリダイレクションレスポンス301を発行しますが、これはコンテナ外からアクセスできません。
この問題を回避するため、config.tomlでhttps_redirection_portを指定してリダイレクションレスポンス用のカスタムポートを設定できます。この場合、https_redirection_portにポートAを設定すると、リダイレクションレスポンス301がポートAで発行されます。
関連する設定の例は以下の通りです。
listen_port = 8080 # コンテナ内の`rpxy`はポート8080でリッスン
listen_port_tls = 8443 # コンテナ内の`rpxy`はポート8443でTLSをリッスン
https_redirection_port = 443 # `rpxy`はポート443でリダイレクションレスポンス301を発行アップストリームTLS接続用のカスタムCA
カスタム証明書を追加するには、非webpkiイメージを使用する必要があります。コンテナ内の/usr/local/share/ca-certificatesに、myca.crtのようなファイルで希望するCAをマウントしてください。証明書はPEM形式で受け入れられますが、ファイル拡張子はcrtである必要があります。
例: -v rpxy/ca-certificates:/usr/local/share/ca-certificates