この文書は、Docker Composeで実行されるPostgreSQLデータベースのデータを、NFSv4(ネットワークファイルシステム バージョン4)を使用して別のサーバーに保存するための一連の設定手順の概要を説明するものです。
アプリサーバー(クライアント c、RHEL 9.5)とNFSストレージサーバー(サーバー n、Ubuntu)の2台構成を前提とします。
作業は以下の3つの大きなステップで構成されます。必ずこの順番で実施する必要があります。
NFSサーバー (n) の設定:
まず、データの「金庫」となるUbuntuサーバーを設定します。Dockerコンテナ(クライアント c)からのデータ書き込みを、特定の権限(UID/GID)で安全に受け入れる準備をします。
NFSクライアント (c) の設定:
次に、アプリサーバー(RHEL)がOS起動時に自動で「金庫」への「トンネル」を掘る(NFSマウントする)ように設定します。
Docker Compose の設定:
最後に、アプリサーバー(RHEL)上で、Dockerコンテナ(PostgreSQL)がデータの保存場所として、その「トンネル」(NFSマウントポイント)を使用するように設定します。
目的:
NFSサーバー (n) が、クライアント (c) 上のDockerコンテナからのデータ書き込みを確実に受け入れられるように、「データの保存場所」と「専用のアクセス権限」を準備します。
主な作業ステップ:
999)を想定し、NFSサーバー (n) 側にも、それと同じUID/GID(999)を持つ専用のシステムユーザー(例: postgres_data)を作成します。/srv/nfs/postgres_data)をサーバー (n) 上に作成し、その所有者をステップ1で作成した**専用ユーザー(UID 999)**に設定します。/exports ディレクトリ内に、DBデータ用の「接続口(テナント)」(例: /exports/postgres_data)を作成します。bind マウント)
/srv/nfs/postgres_data)を「接続口」(/exports/postgres_data)に bind マウント(ワープ設定)し、OS再起動後もこの設定が維持されるよう /etc/fstab に登録します。/etc/exports) で、このDB用「窓口」へのアクセスルールを定義します。all_squash, anonuid=999)ように設定します。これにより、クライアントとサーバー間の複雑なユーザー権限問題を根本的に解決します。