Skip to content

issue98: 資格情報 (DB/AMQP) の取り扱いを改善する#99

Draft
tichi73 wants to merge 4 commits into
developfrom
feature/issue98-credentials-management
Draft

issue98: 資格情報 (DB/AMQP) の取り扱いを改善する#99
tichi73 wants to merge 4 commits into
developfrom
feature/issue98-credentials-management

Conversation

@tichi73
Copy link
Copy Markdown
Contributor

@tichi73 tichi73 commented May 14, 2026

概要

ke2-docker において、各サービス (PostgreSQL / RabbitMQ) の資格情報をデプロイ時に環境変数で指定可能にする変更です。レビュー指摘で挙がった「PostgreSQL などのパスワードがサンプル値であってもベタ書きされている」状態の解消と、利用者が任意のパスワードを設定できる仕組みの導入を目的とします。

後方互換性を最優先しており、既存のデフォルト値 (kompira / guest) は維持しています。何も指定せず docker compose up -d を実行した場合の挙動は従来通りです。

コミット構成 (4 commits)

内容
1 c80dc10 各サービスの資格情報を環境変数で指定可能にする (cluster/swarm override の必須化・AMQP_URL 動的化を含む)
2 39b8a1f 任意パスワードを扱う補助スクリプトを追加
3 9fd272a Environment.md の更新
4 a0264e1 extdb README 改訂

主な追加機能

新規環境変数 (個別指定で URL を構築)

変数 デフォルト 用途
DATABASE_USER kompira DATABASE_URL のユーザ名 + 内部 postgres の初期ユーザ
DATABASE_PASSWORD kompira 同 パスワード
DATABASE_NAME kompira 同 データベース名
AMQP_USER guest AMQP_URL のユーザ名 + 内部 rabbitmq の初期ユーザ
AMQP_PASSWORD guest 同 パスワード

既存の DATABASE_URL / AMQP_URL 直接指定方式も継続してサポート (個別変数より優先)。

コンテナ初期化への適用は初回起動時のみ: POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB および RABBITMQ_DEFAULT_USER / RABBITMQ_DEFAULT_PASS は公式イメージの仕様で initdb 時 (データボリュームが空) のみ反映されます。既存ボリュームを残したまま値を変更しても DB / rabbitmq のユーザ・パスワードは更新されません。後から変更する手順は管理者マニュアル「資格情報管理」章を参照。

URL の必須化 (外部 DB 構成・外部 jobmngrd 構成)

  • single/extdb: DATABASE_URL 未指定で起動した場合に docker compose config 段階で即エラー停止 (${DATABASE_URL:?...})
  • cluster/swarm: 同様の安全弁を override.yml に追加 (setup_stack.sh 経由の通常フローでは発火しない)
  • extra/jobmngrd: 従来 amqps://kompira:kompira@... のサンプル値をベタ書きしていたデフォルトを必須化 (${AMQP_URL:?...})

swarm override の AMQP_URL 動的化

cluster/swarm の jobmngrd / kengine / kompira の AMQP_URL デフォルトを ${AMQP_USER} / ${AMQP_PASSWORD} 経由で組み立てる形に変更。AMQP_USER / AMQP_PASSWORD を環境変数で変更した場合に rabbitmq の初期化値と URL 側がずれて認証失敗する不整合を解消 (setup_stack.sh 経由の通常フローへの影響なし)。

補助スクリプト (Pure POSIX shell, ホスト依存ゼロ)

  • scripts/url-encode.sh: 任意文字列を RFC 3986 形式でパーセントエンコードする汎用ヘルパー。printf のみで実装、外部コマンド依存なし。
  • scripts/init-env.sh: .env を自動生成するオプショナルなセットアップスクリプト (single/basic / single/extdb 対応)
    • リテラル値はすべて Compose v2 の .env 仕様に従いダブルクオート + minimal エスケープで書き出し、空白・#'" を含む値でも壊れない。改行 (LF/CR) を含む値は事前検証で reject。
    • DATABASE_URL / AMQP_URL は URL エンコード済みで書き出すため、URL 安全でない文字を含むパスワードでも動作。
    • basic 構成では DB ユーザ名・パスワード・DB 名すべての URL エンコード/dotenv quoting を行う。extdb 構成では DB 関連の random_password / URL エンコードをスキップし、利用者から渡された --database-url をそのまま使う (最小環境でも動作)。
    • swarm / azureci / extra ディレクトリで実行された場合は誘導メッセージ付きでエラー終了。--config 指定時もカレントディレクトリ検査は常時行い、構成と整合しないオプション (basic で --database-url、extdb で --db-* 等) や --config と cwd の不一致はいずれもエラー停止。
  • .gitignore**/.env を追加 (init-env.sh が生成した .env の誤コミット防止)

environment 構文の MAP 統一

services/*.ymlenvironment 構文を MAP 形式に統一 (nginx / redis / extra/jobmngrd / cluster/swarm override 含む)。docker compose config の出力に変化なし。

kompira-v2 側との依存関係

AMQP_USER / AMQP_PASSWORD に URL 安全でない文字 (RFC 3986 unreserved set 以外) を含めて利用するには、kompira コンテナイメージが v2.0.5.post2 以降 である必要があります (AMQP_URL の userinfo を URL デコードする修正に依存)。

  • 本 ke2-docker リリースは kompira-v2 v2.0.5.post2 リリースに追随して リリースする予定
  • v2.0.5.post1 以前のコンテナイメージを利用する場合、AMQP_USER / AMQP_PASSWORD には URL 安全文字 (英数字と -_.~) のみ使用してください (Environment.md と extdb README に記載)
  • DATABASE_USER / DATABASE_PASSWORD / DATABASE_NAME の特殊文字対応は django-environ の機能で動作するため、kompira コンテナイメージのバージョンに依存しません

スコープ外 (別リリース)

cluster/swarm の Pgpool-II 関連ドキュメント

cluster/swarm の運用ドキュメント整備および swarm/README.md 更新は Pgpool-II 環境での検証を必要とするため、別ブランチに分離しています。

  • feature/credentials-management-swarm-followup (本ブランチに 1 commit プラスのみ)
    • cluster/swarm/README.md: 環境変数表に AMQP_USER/PASSWORD 追加、DATABASE_URL カスタマイズ例のプレースホルダ表記化、setup_pgpool.sh のデフォルト値に関する強い注意喚起、v2.0.5.post2 制約および RFC 3986 への参照

Pgpool-II 検証完了後に別途リリースします。

ChangeLog / RELEASE-NOTES

リリース時に追加する想定で、tmp/credentials-mgmt-release-docs ブランチに退避済み。マージ前に release 段階で本ブランチへ取り込み予定。

既存利用者への影響

利用パターン 影響
docker compose up -d のみ (env なし) なし (デフォルト挙動が完全に維持)
DATABASE_URL / AMQP_URL を直接指定する従来パターン なし (個別変数より優先される)
single/extdbDATABASE_URL 未指定 コンテナ起動後の認証失敗だった挙動が、docker compose config 段階での明確なエラーに改善
cluster/swarmsetup_stack.sh 経由で利用 なし (スクリプトが事前に DATABASE_URL を export するため安全弁は発火しない)
extra/jobmngrd でデフォルト AMQP_URL のままだったケース デフォルトは amqps://kompira:kompira@... のベタ書きで認証失敗するサンプル値だったため、AMQP_URL=... を毎回指定する setup-jobmngrd.md の手順を踏んでいれば従来通り、デフォルトに依存していた利用は構造的に明示エラー停止する

検証状況

  • docker compose config 出力の互換性検証 (single/basic / single/extdb / cluster/swarm / extra/jobmngrd で develop との diff 確認)
  • env 指定パターンの動作確認 (デフォルト / 個別 env 指定 / DATABASE_URL 直接指定)
  • extdb 構成での DATABASE_URL 必須化のエラー挙動確認
  • init-env.sh の動作確認 (URL 安全文字 / 特殊文字 / 改行を含む値のエラー / --config 整合性検査 / --db-*--database-url の構成整合チェック / extdb での --database-url 必須化)
  • kompira-v2 修正版コンテナイメージを用いた single/basic 構成での E2E 確認 (特殊文字パスワード DB-p@ss:w0rd / MQ-p@ss:w0rd でログイン・ジョブフロー実行・ステータスページすべて OK)
  • cluster/swarm 既存利用フローへの影響なし (docker compose config 出力差分は明示的に追加した RABBITMQ_DEFAULT_USER/PASS の 2 行のみ + AMQP_URL のデフォルト動的化のみで、setup_stack.sh 経由の通常フローでは外部から見えるイメージのデフォルト挙動と一致)

Closes #98

🤖 Generated with Claude Code

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

ke2-docker の PostgreSQL / RabbitMQ 資格情報を、デプロイ時に環境変数(または URL 直指定)で上書きできるようにし、サンプル値のベタ書きを緩和しつつ後方互換性を維持する PR です。あわせて、外部 DB 構成で DATABASE_URL 未指定のまま起動してしまう事故を docker compose config 段階で止める安全弁を追加しています。

Changes:

  • DATABASE_USER / DATABASE_PASSWORD / DATABASE_NAMEAMQP_USER / AMQP_PASSWORD を追加し、未指定時は従来のデフォルト URL を維持しつつ URL を組み立て可能に変更
  • .env を生成する補助スクリプト(URL エンコードヘルパー含む)を追加し、強いパスワード運用を支援
  • extdb / swarm で DATABASE_URL の必須化(未指定なら config 段階で停止)と、関連ドキュメントの更新

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
scripts/url-encode.sh RFC 3986 unreserved 以外を %XX へエンコードするヘルパーを追加
scripts/init-env.sh .env 自動生成(ランダムパスワード生成、URL エンコード済み URL を同時出力)を追加
ke2/single/extdb/README.md extdb 構成の DATABASE_URL 必須化・例示値・予約文字エンコード注意の追記
ke2/single/extdb/docker-compose.override.yml extdb で DATABASE_URL 必須化を compose 側で強制
ke2/services/redis.yml environment を MAP 形式へ統一
ke2/services/rabbitmq.yml RabbitMQ 初期ユーザ/パスを AMQP_USER/AMQP_PASSWORD で上書き可能に
ke2/services/postgres.yml Postgres 初期ユーザ/パス/DB 名を DATABASE_* で上書き可能に
ke2/services/nginx.yml environment を MAP 形式へ統一
ke2/services/kompira.yml DATABASE_URL/AMQP_URL を個別変数から組み立て可能に変更
ke2/services/jobmngrd.yml DATABASE_URL/AMQP_URL を個別変数から組み立て可能に変更
ke2/extra/jobmngrd/docker-compose.override.yml environment を MAP 形式へ統一
ke2/cluster/swarm/docker-compose.override.yml swarm で DATABASE_URL 必須化の安全弁を追加(override 側)
Environment.md 新規個別変数と URL 予約文字の扱いを追記
.gitignore 生成される .env を Git 管理外にするルールを追加

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/init-env.sh
Comment thread scripts/init-env.sh Outdated
Comment thread Environment.md Outdated
Comment thread ke2/single/extdb/README.md
Comment thread ke2/services/postgres.yml
Comment thread ke2/services/rabbitmq.yml
Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread scripts/init-env.sh Outdated
Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 3 comments.

Comment thread Environment.md
Comment thread scripts/url-encode.sh
Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 4 comments.

Comment thread scripts/url-encode.sh
Comment thread ke2/cluster/swarm/docker-compose.override.yml
Comment thread ke2/cluster/swarm/docker-compose.override.yml
Comment thread ke2/cluster/swarm/docker-compose.override.yml
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 3 comments.

Comment thread scripts/init-env.sh Outdated
Comment thread scripts/init-env.sh Outdated
Comment thread Environment.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread scripts/init-env.sh Outdated
Comment thread scripts/init-env.sh
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.

Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread ke2/extra/jobmngrd/docker-compose.override.yml Outdated
Comment thread Environment.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.

Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread Environment.md Outdated
Comment thread ke2/single/extdb/README.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.

Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread scripts/init-env.sh Outdated
Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.

Comment thread scripts/init-env.sh Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 3 comments.

Comment thread scripts/init-env.sh Outdated
Comment thread Environment.md Outdated
Comment thread ke2/single/extdb/README.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Comment thread scripts/url-encode.sh
Comment thread scripts/init-env.sh
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.

Comment thread scripts/init-env.sh
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 14 changed files in this pull request and generated no new comments.

tichi73 and others added 4 commits May 15, 2026 11:00
- services/postgres.yml, rabbitmq.yml:
  POSTGRES_* / RABBITMQ_DEFAULT_* を DATABASE_* / AMQP_* 環境変数で
  指定可能に。これらは公式イメージ側の仕様で initdb 時 (データボリュームが
  空の状態での初回起動時) のみ反映されるため、environment ブロック内に
  その旨と、後から変更する手順は管理者マニュアル「資格情報管理」章を
  参照するよう誘導するコメントを追加。

- services/kompira.yml, jobmngrd.yml:
  DATABASE_URL / AMQP_URL を個別環境変数 (DATABASE_USER / DATABASE_PASSWORD /
  DATABASE_NAME, AMQP_USER / AMQP_PASSWORD) から組み立てる形式に変更。
  既存のように DATABASE_URL / AMQP_URL を直接指定するパターンもそのまま
  サポートする (個別変数より優先される)。

- single/extdb の override.yml:
  外部 DB 構成では DATABASE_URL の指定を必須化 (x-required-db-env anchor)。
  未指定で docker compose config 段階で即エラー停止することにより、
  サンプル値が暗黙に使われる事故を構造的に防止する。

- extra/jobmngrd の override.yml:
  AMQP_URL のデフォルトに guest:guest をベタ書きしていた状態を解消し、
  ${AMQP_URL:?...} で必須化。setup-jobmngrd.md の手順は元々
  AMQP_URL=... を毎回指定する形なので既存利用フローに実害なし。

- cluster/swarm の override.yml:
  - jobmngrd / kengine / kompira の environment 構文を LIST から MAP へ統一。
  - DATABASE_URL の必須化 anchor (x-required-db-env) を追加。setup_stack.sh
    は事前に DATABASE_URL を export してから docker compose config を呼ぶ
    ため、スクリプト経由の通常フローでは発火しない。スクリプト未経由の
    セットアップで未指定の場合に即エラー停止する安全弁として機能する。
  - jobmngrd / kengine / kompira のデフォルト AMQP_URL が
    amqp://guest:guest@... をハードコードしていたため、AMQP_USER /
    AMQP_PASSWORD を環境変数で変更した場合に rabbitmq の初期化値と URL 側
    がずれて認証失敗する不整合があった。basic 構成と同じパターンで
    ${AMQP_URL:-amqp://${AMQP_USER:-guest}:${AMQP_PASSWORD:-guest}@...}
    と個別変数経由でデフォルト URL を組み立てる形に修正。

- environment 構文を MAP に統一 (nginx, redis, extra/jobmngrd, cluster/swarm)。
  docker compose config の出力 diff で互換性検証済み。

未指定時のデフォルト値は従来通り (kompira / guest) のため、既存利用者への
影響なし。setup_stack.sh 経由の通常フローでは安全弁が発火しないため
cluster/swarm 既存利用者への動作影響もなし。

cluster/swarm 構成のデフォルト値変更や README 改訂については Pgpool-II
検証を伴うため、別途リリース予定の swarm-followup ブランチに分離。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- scripts/url-encode.sh:
  任意文字列を RFC 3986 unreserved set 以外を %XX にパーセントエンコード
  する汎用ヘルパー。Pure POSIX shell + printf のみで実装し、外部コマンド
  依存なしでホストに余分なツールを要求しない。`LC_ALL=C` を強制して、
  文字クラス `[A-Za-z0-9._~-]` の locale 依存 (非 `C` locale で非 ASCII
  文字が誤って unreserved 扱いされる問題) を回避する。

- scripts/init-env.sh:
  .env を自動生成するオプショナルなセットアップスクリプト。
  動作要件は POSIX 互換 shell + POSIX 標準ユーティリティ群 (sed / od /
  tr / dd / date / chmod / printf 等)、加えてランダムパスワード生成の
  ため openssl または /dev/urandom のいずれか。LC_ALL=C を強制し、$PWD
  ではなく cd + pwd で取得した $CWD を使うことで set -u / 非 C locale
  下でも安定動作する。

  対応構成は末尾 2 階層 (single/basic, single/extdb) で識別。swarm /
  azureci / extra は非対応で案内メッセージで適切な手順へ誘導。--config
  で明示指定も可能だが、カレントディレクトリの整合性検査は常時行い、
  非対象ディレクトリでの --config 経由実行 / --config と cwd の不整合は
  いずれもエラー停止させる (.env を意図しない場所に生成しないため)。

  オプション (値付きオプションは require_value で値欠落、require_nonempty
  で空文字列をいずれもエラー停止):
    --force                  既存の .env を上書き
    --db-user <name>         basic 構成専用 (DB ユーザ名、既定 kompira)
    --db-password <pw>       basic 構成専用 (未指定時はランダム生成)
    --db-name <name>         basic 構成専用 (DB 名、既定 kompira)
    --mq-user <name>         RabbitMQ ユーザ名 (既定 guest)
    --mq-password <pw>       RabbitMQ パスワード (未指定時はランダム生成)
    --database-url <url>     extdb 構成専用 (extdb では必須)
    --config <name>          構成を明示指定
    --help                   ヘルプを表示

  構成と整合しないオプション (basic で --database-url、extdb で --db-*) は
  エラー停止。値付きオプション指定の有無は _SET フラグで区別 (空文字列は
  require_nonempty で先に弾かれるため、SET=1 のとき必ず非空値)。

  .env の安全性:
    - 新規作成は umask 077 で 600、--force での上書き時は明示的に
      chmod 600 .env も実行
    - DATABASE_URL / AMQP_URL を URL エンコード済みで .env に出力するため、
      DB / AMQP の各値に URL 安全でない文字を含めても URL が壊れない
    - リテラル値はすべて Compose v2 の .env 仕様に従いダブルクオート +
      minimal エスケープ ('\\' と '"' のみ) で書き出し、空白・# ・'・" を
      含む値でも .env パースが壊れない
    - 改行 (LF / CR) を含む値は事前検証で reject (Compose の .env では
      安全に埋め込めないため)
    - basic 構成では DB ユーザ名・パスワード・DB 名すべての URL エンコード
      / ダブルクオートを行う。extdb 構成では DB 関連の random_password 等を
      スキップ (利用者から渡された --database-url をそのまま使う)

  .env の永続化と再生成 (--force 時の挙動):
    - 生成 .env の末尾にマーカー行 `# =====KE2_DOCKER_INIT_ENV_END=====`
      を入れ、利用者がマーカー以降に独自の環境変数定義 (KOMPIRA_IMAGE_TAG,
      MAX_EXECUTOR_NUM 等) を追記できる
    - --force 再実行時は既存 .env をタイムスタンプ付きで自動バックアップ
      (`.env.bak.YYYYMMDD-HHMMSS`)。cp -p で属性引継ぎ後、明示的に
      chmod 600 を実行してバックアップにも安全側パーミッションを適用
    - 既存 .env にマーカー行があれば、マーカー以降の独自追記を退避して
      新しい .env のマーカー直下へ自動結合 (説明コメントは毎回再生成、
      重複しない)
    - マーカー行がない旧版 .env を --force で上書きしようとした場合は
      warning を出力し、独自追記は失われる旨と復旧手段 (バックアップから
      手動転記) を案内
    - 重複定義時の優先順位は Compose の .env 仕様通り (後勝ち)。利用者が
      マーカー以降に DATABASE_URL 等を書くと生成値より独自値が優先される
      ことを警告コメントで明示

- AMQP_USER / AMQP_PASSWORD は AMQP_URL の userinfo に埋め込まれるため、
  URL 安全でない文字 (RFC 3986 unreserved set 以外) を含む場合は受け取り側
  の kompira コンテナイメージが v2.0.5.post2 以降である必要がある旨を
  実行時警告で利用者に通知する (継続実行は妨げない)。警告メッセージは
  英語に統一し、内部情報 (Issue 番号) は含めず利用者にとって有用な情報
  (バージョン要件) のみを示す。

- .gitignore: .env はパスワードを含むため Git 管理対象外として追加
  (**/.env)。--force 時に作られる .env.bak.<timestamp> も同様に除外
  (**/.env.bak.*)。

本リリースでは init-env.sh は任意ステップ (実行しなくても従来通り
既定値でデプロイ可能)。次回リリースで推奨フローに格上げ予定。

AMQP_PASSWORD に特殊文字を含むケースは kompira-v2 側の AMQP_URL の userinfo
を unquote する修正 (v2.0.5.post2 で提供) を含む kompira コンテナイメージが
必要。本 ke2-docker リリースは v2.0.5.post2 リリースに追随して行う。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 共通環境変数表の前置きに「表のデフォルト値は kompira コンテナイメージ
  自体の既定値 (compose を経由せずコンテナを直接動かす場合の値) であり、
  ke2-docker の compose ファイルでは別途上書きされる」旨を明記。利用者が
  default 値 (例: amqp://guest:guest@localhost:5672) を ke2-docker の
  実態と混同しないようにする。

- 新規環境変数 DATABASE_USER / DATABASE_PASSWORD / DATABASE_NAME /
  AMQP_USER / AMQP_PASSWORD の説明を追加。これらは postgres / rabbitmq
  公式イメージの仕様で初回起動時 (データボリュームが空) のみコンテナ
  初期化に反映されるため、既存ボリュームを残したまま変更しても DB /
  rabbitmq のユーザ・パスワードは更新されない旨を明示し、後から変更
  する手順は管理者マニュアル「資格情報管理」章を参照するよう誘導。

- DATABASE_URL / AMQP_URL を直接指定した場合は、kompira / kengine /
  jobmngrd の接続先 URL としては指定された URL がそのまま使われるが、
  basic 構成では個別変数が postgres / rabbitmq コンテナの初期化用に
  引き続き使われる点を明記。両者を別の値にすると認証不整合が起きる
  ため、一致させるか URL 側を内部コンテナの初期値に合わせるよう誘導。

- 「URL 安全でない文字を含む資格情報の扱い」節を新設:
  - 対象を DATABASE_USER / DATABASE_PASSWORD / DATABASE_NAME および
    AMQP_USER / AMQP_PASSWORD のすべてに拡張 (userinfo / path のどちらにも
    影響)。
  - エンコードが必要な範囲は「URL の区切り文字 (`@` `:` `/` `?` `#` `%`
    や空白等) をデータの一部として埋め込む場合」とし、厳密性より分かり
    やすさを優先しつつ、安全側の指針として「unreserved set (英数字と
    `-_.~`) 以外をすべてエンコード」を併記。詳細な許容文字とエンコード
    規則は RFC 3986 §3.2.1 / §3.3 への参照誘導を残す。
  - 主要文字のエンコード対応表、`p@ss:w0rd` → `p%40ss%3Aw0rd` の実例を
    記載。
  - 各環境変数の挙動を「DATABASE_URL / AMQP_URL を直接指定 (または
    init-env.sh 経由) なら URL 安全でない文字を含めても動作」「個別
    変数のみ指定で compose に URL を組み立てさせる場合は unreserved set
    のみ可」の場合分けで明示。
  - AMQP_USER / AMQP_PASSWORD で URL 安全でない文字を扱う場合に
    kompira コンテナイメージが v2.0.5.post2 以降である必要がある旨も
    併記。
  - シェルコマンドで値全体をシングルクオートで囲む形式の利点と、値に
    `'` (シングルクオート) を含む場合は閉じてしまうので別途エスケープ
    が必要な旨も追記し、詳細な対処方法は管理者マニュアル「資格情報管理」
    §5 を参照する誘導を入れる。
  - 安全に設定するには scripts/url-encode.sh または scripts/init-env.sh の
    利用を推奨する旨を案内。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- ke2/single/extdb/README.md:
  - 「接続仕様の準備」のパラメータ例をシングルクオート付きプレースホルダ
    表記 (`DATABASE_URL='pgsql://<DB ユーザ名>:<DB パスワード>@<DB ホストの IP>:<ポート番号>/<データベース名>'`)
    に変更し、worked example として kompira_user / kompira_db /
    10.20.0.10 の値を使う形に整理 (こちらも全体をシングルクオート)。
    「例示値であり任意の値を使用できる」「パスワードは推測されにくい
    強いものを指定する」「ポート番号は PostgreSQL のデフォルト 5432 を
    使うことが多いが任意」旨の注意書きを追加。
  - DATABASE_URL の指定が必須であり、未指定の場合は docker compose
    config 段階で即エラー停止する旨を明記。
  - 環境変数カスタマイズ表に AMQP_USER / AMQP_PASSWORD を追加。
  - 「カスタマイズ例」の docker compose up コマンドラインも DATABASE_URL
    をシングルクオートで囲んだ形に統一。
  - URL 安全でない文字 (`@` `:` `/` `?` `#` `%` や空白等、RFC 3986
    unreserved 以外) を含むユーザ名・パスワード・DB 名について、表現を
    「区切り文字」「データとして埋め込む場合」の言い回しに調整しつつ、
    安全側の指針として「unreserved 以外をすべてエンコード」を残す。
    詳細は Environment.md「URL 安全でない文字を含む資格情報の扱い」
    または管理者マニュアル「資格情報管理」章を参照。
  - シェル例で値全体をシングルクオートで囲む形式における `'` (シングル
    クオート) を含む値の取り扱い (エスケープか init-env.sh 経由か) も
    注記し、詳細な対処方法は管理者マニュアル「資格情報管理」§5 を参照
    する誘導を追加。
  - AMQP_USER / AMQP_PASSWORD で URL 安全でない文字を扱う場合に KE2.0
    コンテナイメージが v2.0.5.post2 以降である必要がある旨を併記。

cluster/swarm/README.md の更新は Pgpool-II 検証を伴うため、別途リリース予定の
swarm-followup ブランチに分離。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tichi73 tichi73 force-pushed the feature/issue98-credentials-management branch from 66fe0af to a0264e1 Compare May 15, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants