機能 #20
未完了タスク #17: 社内サービスのサブドメイン化
VPSへNginx(リバースプロキシ)の導入(IaC対応)
0%
説明
概要¶
社内システムのサブドメイン化に向けた事前準備として、VPSへNginxをリバースプロキシとして導入する。
導入はDockerコンテナでの運用を前提とし、既存環境への影響を最小限に抑えつつ、設定の再現性・保守性を高める構成とする。
また、本対応を機にInfrastructure as Code(IaC)の考え方を取り入れ、Nginxの設定やDocker Compose、構築手順書などの構成情報をGitリポジトリで管理する。
インフラ設定管理リポジトリ:https://github.com/ksd-corp/company-infrastructure ¶
これにより、環境の再現性、変更履歴の管理、レビュー、バックアップ、および将来的な自動化への対応を容易にする。
なお、パスワードやSSL証明書などの機密情報はGitリポジトリでは管理せず、.envファイルやDocker Volume等を利用して環境ごとに管理する。
DNSのAレコードではIPアドレスのみを指定でき、ポート番号を指定することはできない。そのため、各サブドメインへのアクセスはHTTP(80番)またはHTTPS(443番)で受け付け、Nginxでホスト名(サブドメイン)を判別し、VPS内で稼働している各サービスへ転送する構成とする。
Nginxではサブドメインごとに転送先のポート番号を設定し、リバースプロキシとして各サービスへアクセスを振り分ける。
| サービス名 | ポート番号 | 備考 |
|---|---|---|
| Mattermost | 8080 | |
| Redmine | 3000 | |
| 端末管理システム | 8090 | |
| SES管理システム | 8101 | Apacheによるプロキシ設定あり VPS内の/etc/httpd/conf.d/dav_svn.confで設定 |
| SES管理システム(検証用) | 8102 | Apacheによるプロキシ設定あり VPS内の/etc/httpd/conf.d/dav_svn.confで設定 基本的に停止している |
実施内容¶
- インフラ管理用Gitリポジトリの作成
- DockerコンテナによるNginx環境の構築
- Docker Composeファイルの作成
- Nginx設定ファイル(
nginx.conf、conf.d)の作成 -
.env.exampleおよび.gitignoreの作成 - README(構築・運用手順)の作成
- リバースプロキシ設定の作成
- サブドメインごとの転送設定(Server Block)
- HTTP(80番)・HTTPS(443番)でのアクセス確認
- 既存のApache(SVN)との共存確認
完了条件¶
- DockerコンテナとしてNginxが正常に起動すること
- Nginxが80番・443番ポートでアクセスを受け付けられること
- サブドメインごとに指定したサービスへアクセスを振り分けられること
- 既存のApache(SVN)へ影響がないこと
- Docker Composeにより環境を再現できること
- Nginx関連の構成ファイルおよび手順書がGitリポジトリで管理されていること
- 機密情報がGitリポジトリに含まれていないこと
山一 山村 一允 さんが2ヶ月前に更新
移行手順¶
- DNS・現行 Apache 設定・証明書・SVN リポジトリをバックアップする。各サブドメインの A/AAAA レコードを VPS へ向ける。
- Nginx を公開前のポートで起動し、設定・Apache:8080 への疎通を検証する。
- Apache を 8080 に変更し、VPS 外部からは到達できないようファイアウォールで Docker ネットワークだけを許可する。Docker の Nginx からは host.docker.internal:8080 へ接続する。
- Nginx 用の TLS 証明書を準備する。既存証明書を安全に引き継ぐか、Nginx が 80 番を受ける切替タイミングで Let’s Encrypt を発行する。HTTP-01 認証は公開 80 番ポートでのみ実施されます。Let’s Encrypt の仕様
- Apache を停止して 80/443 を解放し、Nginx を 80/443 で起動する。HTTP は ACME 用パスを除き HTTPS へリダイレクトする。
- svn.ksdhg.co.jp → Apache:8080 を確認する。svn checkout だけでなく、認証・更新・コミット・ロック操作も確認する。
- Redmine、Mattermost、契約管理、端末管理を Nginx の共通 Docker ネットワークへ参加させ、各サブドメインの upstream として追加する。Redmine・Mattermostはすでに Docker Compose 定義があるため、再 Docker 化ではなく、ホストへの ports: 公開を廃止してネットワーク構成を変更する作業です。
- 各サービスの HTTPS 動作、Mattermost の WebSocket、証明書自動更新を検証する。
城和 城戸 和志 さんが21日前に更新
- 担当者 を 城戸 和志 にセット
バックアップ対象¶
| 対象 | 現状 | 対象判定 | バックアップ対象 | 理由・判断ポイント |
|---|---|---|---|---|
| DNS | 既存ドメインは別サービスで使用中 | 対象 | 現行DNSレコード一覧 | 各サブドメインのA/AAAAレコードをVPSへ向けるため、変更前状態を記録 |
| Apache | 80/443等で稼働中 | 対象 |
/etc/httpd/(ディレクトリ一式) |
SVN用Apacheを8080へ変更するため |
| 既存Nginx | 8090でPCManager向けに稼働中 | 対象 |
/etc/nginx/(ディレクトリ一式) |
現行PCManager構成を保全。新規Docker Nginxとは別物 |
| SVN | Apache経由で稼働中 | 対象 |
/svn_repo/test_repo/repo/、/etc/svn/、SVN dump、SVN hotcopy |
リポジトリ本体・履歴・認証・権限設定を保全し、svnadmin verifyで正常性を確認 |
| SSL証明書・秘密鍵 | ApacheでHTTPSに使用中 | 対象 |
/etc/httpd/ssl/server.crt、/etc/httpd/ssl/server.key
|
TLS構成変更前の証明書・秘密鍵を保全 |
| firewalld |
public・docker zoneが稼働中 |
対象 |
/etc/firewalld/(ディレクトリ一式) |
Apache:8080へのアクセス制御を変更するため |
| SES本番 | Docker稼働中 | 構成資材のみ対象 | /opt/docker/ses_trading_mgmt_system/compose.yaml |
共通Dockerネットワーク参加等によるCompose変更前の状態を保全 |
| PCManager | Docker稼働中 | 構成資材のみ対象 | /opt/docker/pcmanager/docker-compose.yml |
Dockerネットワーク構成変更前の状態を保全 |
| Redmine | Docker稼働中 | 構成資材のみ対象 | /opt/docker/redmine/docker-compose.yml |
共通ネットワーク参加、ports:公開変更前の状態を保全 |
| Mattermost | Docker稼働中 | 構成資材のみ対象 | /opt/docker/mattermost/docker-compose.yml |
共通ネットワーク参加、ports:公開変更前の状態を保全 |
| Docker内DB・データ | 各サービスで稼働中 | 対象外 | ― | 今回はDB・アプリデータ自体を変更しない |
_dev系 |
一部稼働・資材あり | 対象外 | ― | 今回のNginx移行では扱わない |
現時点でのバックアップ方針¶
Apache
→ /etc/httpd/ を一式
既存Nginx
→ /etc/nginx/ を一式
firewalld
→ /etc/firewalld/ を一式
SSL
→ /etc/httpd/ssl/server.crt
→ /etc/httpd/ssl/server.key
Docker系
→ 変更するCompose YAML
SVN
→ /svn_repo/test_repo/repo/
→ /etc/svn/
→ svnadmin dump
→ svnadmin hotcopy
→ svnadmin verify による正常性確認
DNS
→ 変更前のDNSレコードを記録
城和 城戸 和志 さんが18日前に更新
Nginx 公開前疎通検証¶
移行手順「2. Nginxを公開前のポートで起動し、設定・Apacheへの疎通を検証する」に関連する事前検証を実施。
実施内容¶
-
/opt/docker/nginx_testに検証用Nginx環境を新規作成 -
Docker ComposeでNginxを
127.0.0.1:8888にて起動- VPS外部には公開しない構成
- 既存の80/443等には影響なし
-
host.docker.internalを使用し、Docker上のNginxからVPSホスト上のApacheへの疎通を確認 -
以下の経路で
/svn_repoへアクセスNginx(127.0.0.1:8888)
↓
host.docker.internal:80
↓
Apache
↓
/svn_repo
↓
SVN -
以下のレスポンスを確認
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Subversion Repository"
SVNのBasic認証まで到達したため、Nginx → Apache → SVN の疎通を確認済み。
検証完了後、docker compose down にて検証用Nginxを停止。
実環境調査で判明した事項¶
移行手順ではApacheを 8080 に変更し、
Nginxから host.docker.internal:8080 へ接続する想定となっている。
しかし、現環境ではMattermostが以下の構成でホスト側 8080 を使用している。
0.0.0.0:8080 -> Mattermost:8065
そのため、現状のままApacheを 8080 へ変更するとポートが競合する。
今回の事前検証では既存環境への影響を避けるため、
Apacheの設定変更は行わず、現在Apacheが待ち受けている 80 番ポートを使用して疎通確認を実施。
Apacheのバックエンド用ポートについては、本番切替前に確認・調整が必要。
城和 城戸 和志 さんが14日前に更新
Nginx / SVN サブドメイン化 本番切替¶
移行手順「3~6」に関連するSVNの本番切替作業を実施。
実施内容¶
- SVNリポジトリの追加バックアップを取得
- Apacheの80/443番ポートでの待受を停止し、バックエンド用の8065番ポートを設定
- Docker Nginxを80/443番ポートで起動し、Apacheへのリバースプロキシを設定
- Let's Encryptで
svn.ksdhg.co.jpのSSL証明書を取得 - SES本番・検証環境の既存URLを維持するため、Nginxに互換設定を追加
- Certbotの証明書自動更新タイマーを起動
確認結果¶
-
https://svn.ksdhg.co.jp/svn_repoで接続・認証を確認 - SVNリポジトリのRevision 2840を確認
- TortoiseSVNのリポジトリブラウザーからアクセスできることを確認
- SES本番・検証環境の既存経路が正常に応答することを確認
- Certbotの証明書更新テストが正常終了
- Certbot自動更新タイマーが
enabled / activeであることを確認 - 次回自動更新処理の実行予定が登録されていることを確認
当初計画からの変更点¶
当初はApacheのバックエンドポートを8080とする予定だったが、
Mattermostがホスト側8080番ポートを使用しているため、8065に変更した。
最終的な接続構成は以下のとおり。
Internet
↓
Docker Nginx(80/443)
↓
Apache(8065)
↓
SVN(/svn_repo)
今後の作業¶
- Certbotの管理用メールアドレス登録
- 証明書自動更新の初回定期実行結果確認
- SES、Redmine、Mattermost、PCManager等のサブドメイン化
作業結果¶
SVNのサブドメイン化に関する本番切替作業は完了。
SVNの新URLでの接続・認証が正常に動作し、
SESの既存経路についても疎通確認済み。
作業日:2026年10月9日
城和 城戸 和志 さんが8日前に更新
SES本番環境のサブドメイン化¶
10月9日に実施したSVNサブドメイン化に続き、
SES本番環境(契約管理)のサブドメイン化対応を実施。
実施内容¶
- SES本番環境の専用サブドメイン
system.ksdhg.co.jpへの切替を実施 - SES検証環境についても専用サブドメイン
system-stg.ksdhg.co.jpを設定 - NginxにSES本番・検証環境向けのリバースプロキシ設定を整備
- HTTPSによるアクセス経路を整備
- SVNなど既存サービスへの影響確認を実施
確認結果¶
- SES本番環境:
https://system.ksdhg.co.jp/へのHTTPS接続を確認 - SES検証環境:
https://system-stg.ksdhg.co.jp/へのHTTPS接続を確認 - 本番・検証環境ともに
/loginへのリダイレクトを確認 - SVNの既存アクセス経路について、変更前後で同等の応答を確認
今後の作業¶
- Redmineのサブドメイン化
- Mattermostのサブドメイン化
- 端末管理(PCManager)のサブドメイン化
- Nginxと各アプリケーションを接続する共通Dockerネットワークの構成
- 各コンテナのネットワーク設定およびNginxのupstream設定
- Redmine・Mattermost等の不要なホストポート公開の廃止
- 各サービスのサブドメイン経由での疎通・動作確認
作業結果¶
SES本番環境(契約管理)のサブドメイン化対応は完了。
本番環境 https://system.ksdhg.co.jp/ および
検証環境 https://system-stg.ksdhg.co.jp/ の
専用サブドメインからHTTPSでアクセスできることを確認した。
今後は、Redmine・Mattermost・PCManagerのサブドメイン化を進めるとともに、
共通Dockerネットワークを構成し、
Nginxを経由したアクセス方式へ統一する。
作業日:2026年10月15日