3. 部署前准备
这一步只检查资料和环境,不会修改学校数据。下面的准备事项适用于两条主线;Vercel、Neon 和 Deploy Hook 的要求写在 Vercel 主线,主机、Docker 和 Node 的要求写在本地主线。
准备一个能正常接收验证邮件的邮箱,用于注册账号或接收系统通知。
按主线准备
| 准备项 | Vercel 云端 | 本地 / 内网 |
|---|---|---|
| 账号 | GitHub、Vercel、Neon 三个账号 | 无平台账号要求 |
| 主机 | 不需要 | 一台可长期开机的电脑或服务器,规划固定局域网 IP |
| 运行环境 | 无需安装,Vercel 负责构建 | Docker + Docker Compose,或 Node.js 24 与本机 PostgreSQL |
| 命令行 | 不需要 | 需要能复制粘贴教程命令 |
| 域名 | 可选,但中国大陆使用时强烈建议 | 可选;仅在需要公网或域名访问时配置 |
| 邮件 | 准备可收信邮箱 | 同左 |
具体安装步骤在各自主线第 1–3 篇。本章只确认信息、密码和网络是否就绪。
浏览器与设备
建议使用最新版 Chrome 或 Edge,在电脑上完成部署。手机可以完成部分操作,但环境变量和 DNS 记录较长,复制时容易出错。
准备两种网络用于最终验收:
- 学校实际使用的有线或无线网络(云端)或教室局域网(本地);
- 手机移动数据(仅云端需要,用于确认公网可达性)。
提前确定的信息
部署前记录以下内容:
- 学校完整名称;
- 学校所在省份;
- 需要创建的年级;
- 每个年级的班级数量或名称;
- 当前学期开始和结束日期;
- 用于管理后台的初始密码;
- 首次初始化后用于保存自动生成恢复密钥的密码管理器或受控离线介质;
- 准备绑定的域名,例如
exam.example.com(可选)。
生成管理员初始密码
ADMIN_PASSWORD 至少 8 位,建议使用 12 位以上、没有出现在其他网站中的随机密码。不要使用学校名称、手机号、生日或 12345678。
可使用密码管理器生成,例如:
长度:16 至 24 位
包含:大写字母、小写字母、数字、符号
用途:仅 Novora 初始管理员不要把真实密码写进教程截图、群聊、GitHub README 或 .env.example。
准备保存超级管理员恢复密钥
当前版本不再要求部署者提前填写 ADMIN_RECOVERY_KEY。项目会在超级管理员完成首次初始化时自动生成高强度恢复密钥,并且只显示一次。
请提前准备可信密码管理器或学校受控的离线介质。恢复密钥只用于所有超级管理员都忘记密码时的应急恢复,不能用于日常登录,也不要分发给年级或班级管理员。
域名准备(公网访问时)
推荐使用子域名,例如:
exam.example.com使用子域名不会影响根域名上的其他网站。云端部署时用 CNAME 记录连接 Vercel;本地部署时把域名解析到自建反向代理。确认你有该域名的 DNS 管理权限。
域名和备案
域名指向 Vercel 境外服务时,通常不因为“购买了国内域名”就自动获得大陆加速。将来若迁移到中国大陆服务器或大陆 CDN,应按照服务商要求完成实名认证、ICP 备案及其他合规流程。
安全准备
部署与初始化过程中会出现以下敏感信息:
- 数据库连接串(云端为 Neon 的
DATABASE_URL,本地为.env中的连接配置); - Novora 的
ADMIN_PASSWORD; - Vercel 的
VERCEL_DEPLOY_HOOK_URL(仅云端); - 初始化后自动生成的超级管理员恢复密钥。
平台相关的变量按各自教程保存到部署环境;自动生成的恢复密钥保存到受控密码管理器或离线介质。所有项都不要放入 GitHub 仓库或公开问题反馈。
时间预估
| 工作 | 常见耗时 |
|---|---|
| 注册平台账号(云端) | 10 至 20 分钟 |
| 安装 Docker 或 Node(本地) | 10 至 30 分钟 |
| 导入源码并创建数据库 | 10 至 20 分钟 |
| 首次构建 | 2 至 5 分钟 |
| DNS 和 HTTPS 生效 | 数分钟至 48 小时(仅公网) |
| 学校结构初始化和验收 | 15 至 40 分钟 |
DNS 生效时间不可完全控制,建议不要在正式使用当天才开始部署。
准备完成检查
- [ ] 云端:GitHub、Vercel、Neon 均可登录,且 Vercel 已授权读取 GitHub 仓库
- [ ] 本地:主机可长期开机,已装好 Docker 或 Node + PostgreSQL
- [ ] 公网访问时:已准备域名并能管理 DNS
- [ ] 已生成独立的管理员初始密码
- [ ] 已准备安全位置,用于保存初始化后只显示一次的恢复密钥
- [ ] 已整理学校、年级、班级和学期信息
- [ ] 已准备电脑和目标网络