プロジェクト

全般

プロフィール

機能 #20

未完了
山一 城和

タスク #17: 社内サービスのサブドメイン化

VPSへNginx(リバースプロキシ)の導入(IaC対応)

機能 #20: VPSへNginx(リバースプロキシ)の導入(IaC対応)

山村 一允 さんが3ヶ月前に追加. 8日前に更新.

ステータス:
新規
優先度:
中
担当者:
開始日:
2026/08/05
期日:
進捗率:

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リポジトリに含まれていないこと

山一 山村 一允 さんが3ヶ月前に更新 操作 #1

山一 山村 一允 さんが3ヶ月前に更新 操作 #2

  • 題名 を VPSへNginx(リバースプロキシ)の導入 から VPSへNginx(リバースプロキシ)の導入(IaC対応) に変更
  • 説明 を更新 (差分)

山一 山村 一允 さんが2ヶ月前に更新 操作 #3

移行手順

  1. DNS・現行 Apache 設定・証明書・SVN リポジトリをバックアップする。各サブドメインの A/AAAA レコードを VPS へ向ける。
  2. Nginx を公開前のポートで起動し、設定・Apache:8080 への疎通を検証する。
  3. Apache を 8080 に変更し、VPS 外部からは到達できないようファイアウォールで Docker ネットワークだけを許可する。Docker の Nginx からは host.docker.internal:8080 へ接続する。
  4. Nginx 用の TLS 証明書を準備する。既存証明書を安全に引き継ぐか、Nginx が 80 番を受ける切替タイミングで Let’s Encrypt を発行する。HTTP-01 認証は公開 80 番ポートでのみ実施されます。Let’s Encrypt の仕様
  5. Apache を停止して 80/443 を解放し、Nginx を 80/443 で起動する。HTTP は ACME 用パスを除き HTTPS へリダイレクトする。
  6. svn.ksdhg.co.jp → Apache:8080 を確認する。svn checkout だけでなく、認証・更新・コミット・ロック操作も確認する。
  7. Redmine、Mattermost、契約管理、端末管理を Nginx の共通 Docker ネットワークへ参加させ、各サブドメインの upstream として追加する。Redmine・Mattermostはすでに Docker Compose 定義があるため、再 Docker 化ではなく、ホストへの ports: 公開を廃止してネットワーク構成を変更する作業です。
  8. 各サービスの HTTPS 動作、Mattermost の WebSocket、証明書自動更新を検証する。

山一 山村 一允 さんが2ヶ月前に更新 操作 #4

  • 親チケット を #17 にセット

山一 山村 一允 さんが2ヶ月前に更新 操作 #5

城和 城戸 和志 さんが21日前に更新 操作 #6

  • 担当者 を 城戸 和志 にセット

バックアップ対象

対象 現状 対象判定 バックアップ対象 理由・判断ポイント
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日前に更新 操作 #7

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日前に更新 操作 #8

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日前に更新 操作 #9

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日

他の形式にエクスポート: PDF Atom