Files
thebet365/scripts/prod-init-db.sh
Mars e7e938f261 feat: WC2026 赛事 seed、生产上线初始化脚本与目录归档
重构 seed 为 WC2026 72 场小组赛与 48 强优胜盘;新增 production 模式仅保留 admin 与赛事示例;提供 prod-init-db 全量重置脚本;管理端 i18n 分包与赛事归档能力。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 18:17:00 +08:00

84 lines
2.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 生产上线:清空全部业务数据,仅保留 admin + WC2026 赛事示例(无代理/玩家/充值/注单)
#
# 与「pnpm db:seed」的区别
# db:seed 增量写入,不删已有玩家、充值订单等
# 本脚本 TRUNCATE 全部业务表 + production seed
#
# 用法项目根目录Linux 服务器):
# chmod +x scripts/prod-init-db.sh
# CONFIRM=YES ./scripts/prod-init-db.sh
# CONFIRM=YES ./scripts/prod-init-db.sh --skip-backup
#
# 前置docker compose -f docker-compose.prod.yml up -d 且 api/postgres 在运行
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
COMPOSE=(docker compose -f "$ROOT/docker-compose.prod.yml")
ENV_FILE="$ROOT/.env.docker"
SKIP_BACKUP=false
if [ "${CONFIRM:-}" != "YES" ]; then
echo "错误:将删除全部业务数据(玩家、代理、充值、注单、审计等),仅保留 admin 与 WC2026 赛事示例。"
echo ""
echo "若已确认,请执行:"
echo " CONFIRM=YES $0 [--skip-backup]"
exit 1
fi
for arg in "$@"; do
if [ "$arg" = "--skip-backup" ]; then
SKIP_BACKUP=true
fi
done
if [ -f "$ENV_FILE" ]; then
COMPOSE+=(--env-file "$ENV_FILE")
fi
cd "$ROOT"
echo "[prod-init-db] 检查容器…"
"${COMPOSE[@]}" ps --status running api postgres redis >/dev/null 2>&1 || {
echo "[prod-init-db] 请先启动: docker compose -f docker-compose.prod.yml --env-file .env.docker up -d"
exit 1
}
if [ "$SKIP_BACKUP" = false ]; then
BACKUP_DIR="$ROOT/backups"
mkdir -p "$BACKUP_DIR"
STAMP="$(date +%Y%m%d-%H%M%S)"
BACKUP_FILE="$BACKUP_DIR/thebet365-$STAMP.sql"
echo "[prod-init-db] 备份 PostgreSQL → $BACKUP_FILE"
"${COMPOSE[@]}" exec -T postgres pg_dump -U thebet365 -d thebet365 -F p > "$BACKUP_FILE"
echo "[prod-init-db] 备份完成"
else
echo "[prod-init-db] 已跳过备份 (--skip-backup)"
fi
echo "[prod-init-db] 执行数据库迁移…"
"${COMPOSE[@]}" exec -T api sh -c 'cd /app/apps/api && npx prisma migrate deploy && npx prisma generate'
echo "[prod-init-db] 生产模式初始化admin + WC2026 赛事)…"
"${COMPOSE[@]}" exec -T \
-e INIT_DATABASE_CONFIRM=YES \
-e ALLOW_DB_RESET=true \
-e SEED_MODE=production \
-e NODE_ENV=production \
api \
node dist/infrastructure/database/reset-and-seed-cli.js --yes --production
echo "[prod-init-db] 清空 Redis…"
"${COMPOSE[@]}" exec -T redis redis-cli FLUSHALL >/dev/null || true
echo ""
echo "[prod-init-db] 完成。"
echo " 管理员: admin / Admin@123建议登录后立即修改密码"
echo " 赛事: WC2026 小组赛 72 场 + 48 强优胜盘"
echo ""
echo "后续建议:"
echo " 1. .env.docker 中 SEED_DATABASE=false避免重启 api 重复 seed"
echo " 2. docker compose -f docker-compose.prod.yml --env-file .env.docker restart api"
echo " 3. 勿长期保留 ALLOW_DB_RESET=true"