# 生产上线检查清单

## 必改配置

- 修改 `.env` 中的 `JWT_SECRET`，至少 32 位随机字符串。
- 修改 `PLATFORM_ADMIN_EMAIL` / `PLATFORM_ADMIN_PASSWORD`，上线后由平台超级管理员创建项目，再进入项目后台创建后续项目管理员。
- 修改 `POSTGRES_PASSWORD` / `DATABASE_PASSWORD`。
- 确认 `DEFAULT_PROJECT_SLUG=davos`。
- 配置 `ALERT_WEBHOOK_URL`（企业微信/钉钉/Webhook 均可）。
- 按合规要求设置 `AUDIT_LOG_RETENTION_DAYS` 与 `AUDIT_LOG_RETENTION_CRON`。
- 将 `VITE_API_BASE_URL` 设置为公网 API 地址，例如 `https://assessment.example.com/api`。
- 将 `CORS_ALLOWED_ORIGINS` 设置为正式域名，例如 `https://assessment.example.com`。
- 确认前端构建产物中不包含评分公式、反向计分键或维度计分规则。
- 确认后端镜像已安装 `fonts-noto-cjk`，容器内存在 `/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc`，避免中文 PDF 乱码或导出失败。

## 服务器

- 开启防火墙，仅暴露 80/443，数据库端口不要暴露公网。
- 使用 Nginx 或公司网关反向代理到前端 `8088` 和后端 `8080`。
- 配置 HTTPS 证书。
- 配置定时数据库备份。
- 配置容器巡检任务：`./scripts/monitor-stack.sh`。

## 运维

- 健康检查：`GET /api/health`。
- PDF 字体检查：`GET /api/health/pdf-font`。
- 备份：`BACKUP_DIR=/data/backups ./scripts/backup-db.sh`。
- 恢复：`./scripts/restore-db.sh ./backups/xxx.sql.gz`。
- 安装每日 02:30 定时备份：`BACKUP_DIR=/data/davos-backups ./scripts/install-backup-cron.sh`。
- 自定义备份时间示例：`CRON_TIME="0 3 * * *" BACKUP_DIR=/data/davos-backups ./scripts/install-backup-cron.sh`。
- 安装容器巡检告警任务示例：`*/5 * * * * cd /path/to/project && ALERT_WEBHOOK_URL=xxx ./scripts/monitor-stack.sh`。
- 日志：`docker compose logs -f backend`。
- 项目审计日志导出：`GET /api/projects/{slug}/admin/audit-logs/export.csv`。
- 项目全量数据导出：`GET /api/projects/{slug}/admin/exports/all-data`。
- 平台全量数据导出：`GET /api/super/projects/{slug}/exports/all-data`。

## 迁移验收

- 生产迁移前必须先备份数据库。
- 先在生产数据库副本完整演练 Flyway V8 多项目迁移。
- 迁移后确认 `/` 显示博雅心理测评平台官网首页。
- 迁移后确认 `/davos` 显示达沃斯项目标题和描述。
- 确认 `/super` 平台超级管理员可以登录并看到 `davos`。
- 确认旧 `/admin` 会进入 `/davos/admin`。
- 确认达沃斯历史用户、邀请码、资料、答卷、报告、协议、同意记录和审计日志仍可访问。
- 至少导出一次 `davos` 全量数据 ZIP，检查包含 README 和 15 个 CSV。
- 确认 `users.csv` 中 `password_hash` 为 `[redacted]`。
- 确认 `submissions.csv`、`answers.csv`、`reports.csv` 中 `project_slug` 均为 `davos`。

## 业务验收

- 无邀请码注册失败。
- 有效邀请码注册成功。
- 用户可选择 16PF、EPQ、SCL-90、SDS、SAS、SQA 六套量表。
- 普通用户不能进入 `/{slug}/admin` 或 `/api/projects/{slug}/admin/**`。
- 普通用户端不提供报告下载入口；报告由管理员统一查看和导出。
- `PROJECT_ADMIN` 可查看当前项目答卷详情、下载单个/批量 PDF、导出 CSV/Excel/ZIP；不得访问其他项目数据。
- `PLATFORM_SUPER_ADMIN` 可进入 `/super` 创建项目、启停项目、创建新的平台超级管理员，并可导出任意项目全量数据。
- 项目管理员可在当前项目后台「后台运维」创建该项目管理员。
- 项目管理员可停用当前项目的邀请码和禁用当前项目用户 membership。
