データベースの準備
この構成では、外部データベースとして以下の要件を満たす PostgreSQL が必要になります。
- バージョン: 12 以上
- その他: 拡張モジュール pgcrypto がインストールされていること (RHEL系 であれば、postgresql-contrib パッケージをインストールしておく必要があります)
Docker が動作しているホストサーバ、あるいは別のサーバ上に要件を満たす PostgreSQL を準備してください。
接続仕様の準備
この構成では、Docker コンテナで動作するサービスからデータベースに接続するための情報を、環境変数 DATABASE_URL で指定する必要があります。
DATABASE_URL='pgsql://<DB_USER>:<DB_PASSWORD>@<DB_HOST>:<DB_PORT>/<DB_NAME>'
注: 以下のユーザ名・パスワード・データベース名・IP アドレス・ポート番号はあくまで「設定する値の形式」を示す例示です。 任意の値を使用できますので、お使いの環境のセキュリティポリシーに合わせて設定してください。特にパスワードは推測されにくい十分に強いものを指定してください。ポート番号は PostgreSQL のデフォルト
5432を使うことが多いですが、変更している場合はそれに合わせて指定してください。
以下では具体的な手順例として、次の値で構成した場合の例を示します。
| 設定項目 | 例示値 |
|---|---|
| ユーザ名 | kompira_user |
| パスワード | <DB_PASSWORD> |
| IPアドレス | 10.20.0.10 |
| ポート番号 | 5432 |
| データベース名 | kompira_db |
このとき DATABASE_URL は以下のように指定します。
DATABASE_URL='pgsql://kompira_user:<DB_PASSWORD>@10.20.0.10:5432/kompira_db'
実際に準備した、またはこれから準備する PostgreSQL サーバの構成に合わせて、DATABASE_URL に指定する値を準備しておいてください。
ユーザ名・パスワード・DB 名に URL 安全でない文字 (
@:/%や空白等、RFC 3986 unreserved 以外の文字) を含める場合: RFC 3986 に従いパーセントエンコード (@→%40,:→%3A,/→%2F等) が必要です (パスワードに限らず、userinfo / path のいずれの部分も対象)。詳細な変換規則と例は 資格情報管理 §5 を参照してください。なお、上記コマンド例は値全体をシングルクオートで囲む形式のため、
#/ 空白 /$/!等のシェル特殊文字を含むパスワードでも安全にコピペできますが、値自体に'(シングルクオート) を含む場合は閉じてしまうため別途エスケープが必要です。対処方法は同じく 資格情報管理 §5 (シェル例で'を含む値を扱う場合) を参照。
PostgreSQL の準備
PostgreSQL のインストールについては準備する環境に合わせて、OS のマニュアルなどを参考にして実施してください。
以下では、PostgreSQL の最低限必要になる設定手順について記述しますので、用意した PostgreSQL サーバ上で実施してください。 詳細な設定方法については PostgreSQL のホームページや公式ドキュメントを参照してください。
(1) ユーザとデータベースの作成
ユーザを作成します。ここでは例として "kompira_user" という名前で作成します。パスワードの設定も求められるので、上で準備した値を入力してください。
$ sudo -i -u postgres createuser -P "kompira_user"
注: 上記の
createuserには CREATEDB 権限を付与する-dオプションを付けていません。データベース自体は次の手順でpostgresユーザから作成するため、KE2.0 の通常運用では Kompira 接続ユーザに CREATEDB 権限は不要です。テストデータベースを Django から作るなど、DB 作成権限が必要なケースのみ-dを付加してください。
上で作成したユーザをオーナーとするデータベースを作成します。ここでは例として "kompira_db" という名前で作成します。
$ sudo -i -u postgres createdb --owner="kompira_user" --encoding=utf8 "kompira_db"
(2) PostgreSQL サーバの接続設定
ローカルホスト以外からも PostgreSQL サーバに接続できるように設定します。 postgresql.conf (RHEL系標準パッケージをインストールした場合は /var/lib/pgsql/data/postgresql.conf) の listen_address を以下のように設定してください。
listen_address = '*'
(3) PostgreSQL のクライアント認証の設定
手順 (1) で作成したユーザからパスワード接続できるように、pg_hba.conf (RHEL系標準パッケージをインストールした場合は /var/lib/pgsql/data/pg_hba.conf) に host 設定を追加してください。 たとえば Docker が動作しているホストが PostgreSQL サーバと同じネットワークに配置している場合は、以下のような行を追加してください(フィールドは順に「接続種別 / データベース名 / ユーザ名 / 接続元アドレス / 認証方式」の 5 列)。
host kompira_db kompira_user samenet scram-sha-256
あるいは、Docker が異なるネットワークに配置されている場合は、"samenet" の部分を CIDR 形式などで指定するようにしてください。
host kompira_db kompira_user 10.10.0.0/16 scram-sha-256
(4) PostgreSQL の再起動
これらの設定を行なった後は、一度 postgresql サービスを再起動してください。
$ sudo systemctl restart postgresql-<PG_VERSION>