#!/usr/bin/env bash # 生成 docker compose 运行所需的本地机密:RS256 密钥对 + .env(DB 口令、内部令牌)。 # 产物全部被 .gitignore 忽略,绝不入库;重复执行是幂等的(已存在则不覆盖)。 set -euo pipefail cd "$(dirname "$0")/.." mkdir -p deploy/keys if [ ! -f deploy/keys/jwt-private.pem ]; then openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out deploy/keys/jwt-private.pem echo "已生成 deploy/keys/jwt-private.pem" fi openssl pkey -in deploy/keys/jwt-private.pem -pubout -out deploy/keys/jwt-public.pem echo "已生成 deploy/keys/jwt-public.pem" if [ ! -f .env ]; then { echo "PATBOND_DB_PASSWORD=$(openssl rand -hex 16)" echo "PATBOND_INTERNAL_TOKEN=$(openssl rand -hex 32)" } > .env echo "已生成 .env(随机 DB 口令与内部令牌)" fi # M3(ADR-016/021):MinIO 根凭证。按键幂等追加,兼容已有 .env; # 凭证只存在于被 gitignore 的 .env 中,绝不入库。 if ! grep -q '^PATBOND_MINIO_ROOT_USER=' .env; then echo "PATBOND_MINIO_ROOT_USER=patbond-minio-$(openssl rand -hex 4)" >> .env echo "已追加 PATBOND_MINIO_ROOT_USER 到 .env" fi if ! grep -q '^PATBOND_MINIO_ROOT_PASSWORD=' .env; then echo "PATBOND_MINIO_ROOT_PASSWORD=$(openssl rand -hex 16)" >> .env echo "已追加 PATBOND_MINIO_ROOT_PASSWORD 到 .env" fi # 容器内以 uid 10001 运行,密钥需可读 chmod 644 deploy/keys/jwt-public.pem deploy/keys/jwt-private.pem echo "OK:deploy/keys/ 与 .env 就绪(均已被 .gitignore 忽略)"