# 上线检查清单

## 服务器

- Docker 已安装。
- Docker Compose 已安装。
- 域名已解析到服务器。
- HTTPS 证书已准备。
- `/data/certificate-system` 已创建并挂载到数据盘。

## 环境变量

- `SECRET_KEY` 已改成强随机值。
- `CERTIFICATE_NO_SECRET` 已改成强随机值。
- `PUBLIC_BASE_URL` 已改成正式域名。
- `DATABASE_URL` 指向生产 MySQL。
- `DATA_ROOT` 指向生产数据目录。
- `CORS_ORIGINS` 已改成正式域名。
- 如果正式启用短信验证码，`SMS_MODE=aliyun`，且阿里云短信签名、模板 Code、AccessKey 已配置。

## 数据库

- 已执行迁移：

```bash
docker compose exec backend alembic upgrade head
```

- 已初始化管理员：

```bash
docker compose exec backend python -m app.cli init-db --admin-username admin --admin-password "强密码"
```

## 业务配置

- 项目代码已维护，例如 `DBY`、`QSX`。
- 发证单位名称已确认。
- 系统设置里的 `PDF 生成并发限制` 已确认，2 核 4G 建议保持默认 `2`。
- Excel 导入模板已下载并试填。
- 导入模板中的课程开始日期、课程结束日期和发证日期已统一使用 `YYYY-MM-DD`，例如 `2026-06-01`。
- 占位证书模板已确认可临时使用。
- 大批量毕业前的操作约定已确认：确认导入后先在“Excel 导入”或“证书管理”里批量预生成 PDF。

## 验收动作

- 后台可登录。
- 可新增学员。
- 可新增证书并生成编号。
- 可上传 Excel 并确认导入。
- 已导入批次可以启动“预生成PDF”，进度弹窗能显示总数、已完成、失败数和并发数。
- 证书管理页可按导入批次和 PDF 状态筛选，并能勾选多张证书批量预生成。
- 倒序的课程起止日期会在手工新增和 Excel 导入校验阶段被拦截。
- 新证书正文显示课程起止日期，底部发证日期仍显示证书签发日期。
- 可导出证书和直达链接。
- 公开查询支持两种方式：
  - 证书编号查询：必须输入姓名和图形验证码。
  - 短信验证码查询：必须输入手机号和短信验证码。
- 阿里云短信测试手机号可收到验证码，后端日志没有 `未安装依赖` 或 `发送失败`。
- 作废证书不能下载正常 PDF。
- 直达链接重置后旧链接失效。
- PDF 可生成，二维码可打开核验页。

## 备份

- 后台「备份管理」可以查看本地备份并手动创建备份。
- 已完成一次手动备份和一次只读检查，确认 `/data/certificate-system/db-backups` 有备份文件。
- 如果需要每日自动备份，服务器定时策略已配置。
- `uploads`、`error-reports`、`exports` 已纳入备份策略。
- `pdf-cache` 不纳入长期备份。
