forked from wangbo/easyai
首次安装默认生成独立加密密钥,更新旧部署保留原配置,通过显式开关进入迁移窗口。增加生产迁移包装入口和完整密钥环备份恢复工具,并说明旧镜像升级、严格迁移、轮换及还原流程。 已通过 Bash 安全环境及密钥备份回归;对应 PowerShell 5.1 和 7 脚本已在 Windows 原生环境各通过 49 项验收。宁波服务器验收尚未执行。
22 lines
1.5 KiB
Bash
22 lines
1.5 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "${SCRIPT_DIR}/.."
|
|
mode="${1:-inventory}"
|
|
expected="${2:-}"
|
|
case "$mode" in inventory|dry-run|apply|verify|finalize) ;; *) echo '用法: scripts/migrate-credential-encryption.sh inventory|dry-run|apply|verify|finalize 主机/数据库' >&2; exit 1 ;; esac
|
|
[ -n "$expected" ] || { echo '需要明确指定容器内 MongoDB 主机/数据库,例如 172.21.0.3/aidraw' >&2; exit 1; }
|
|
[ -f .env ] || { echo '未找到部署 .env' >&2; exit 1; }
|
|
# shellcheck source=scripts/init-security-env.sh
|
|
. "$SCRIPT_DIR/init-security-env.sh"
|
|
init_credential_encryption_env .env upgrade
|
|
[ -n "$(read_env_value .env CONFIG_CREDENTIAL_ENCRYPTION_KEYRING)" ] || { echo '请先接入独立加密密钥,完成备份并暂停相关写入/消费者' >&2; exit 1; }
|
|
mkdir -p data/credential-migration
|
|
chmod 700 data/credential-migration
|
|
compose=(docker compose)
|
|
if ! docker compose version >/dev/null 2>&1; then compose=(docker-compose); fi
|
|
args=("--mode=$mode" --production=true "--expected-target=$expected" --batch-size=100 --checkpoint=/credential-migration/checkpoint.json)
|
|
if [ "$mode" = finalize ]; then args=(--mode=verify --finalize=true --production=true "--expected-target=$expected" --batch-size=100); fi
|
|
# Credentials come exclusively from the existing service environment.
|
|
"${compose[@]}" run --rm --no-deps -v "$PWD/data/credential-migration:/credential-migration" easyai-server node /app/dist/credential-migrate.js "${args[@]}"
|