迁移与更换部署方式
这页覆盖 Vercel 与本地互迁、更换数据库和更换域名。所有迁移都按同一顺序进行:先启动新环境,再迁移数据,验收通过后再停旧环境。
通用步骤
text
1. 备份源数据
2. 在目标环境完成一次干净部署
3. 把数据恢复到目标数据库
4. 切换目标环境的连接串
5. 完整验收
6. 确认无误后再停用旧实例顺序不能颠倒。先建新、后迁移、最后停旧,出问题时随时可以退回。
场景一:从 Vercel 迁到本地
迁移前
- [ ] 确认本地服务器已部署并能正常登录(本地部署总览)
- [ ] 记录当前版本(后台「系统设置 → 关于」)
- [ ] 通知使用方暂停录入
迁移步骤
备份 Neon 数据
bashpg_dump --dbname="Neon 生产连接串" --format=custom --no-owner --no-privileges \ --file=novora-cutover.dump恢复到本地数据库
bashsudo docker compose cp ./novora-cutover.dump db:/tmp/restore.dump sudo docker compose exec db pg_restore -U novora -d novora --clean --no-owner /tmp/restore.dump无 Docker 部署时把
pg_restore直接指向本机连接串。确认本地环境变量
.env中的DATABASE_URL指向本地数据库,ADMIN_PASSWORD保留原值(已有管理员密码以数据库为准,不受影响)。重启并验收
bashsudo docker compose up -d --build完整验收见下文清单。
验收通过后
- 通知使用方改用新的内网地址;
- 让每台教室设备重新选择班级(域名变了,本机绑定也要重做);
- ClassIsland 插件重新填写地址并重新配对;
- Neon 项目暂时不要删,保留一到两周作为回退方案。
场景二:从本地迁到 Vercel
在 Vercel 完成一次干净部署(Vercel 部署主线);
从本地导出:
bashsudo docker compose exec db pg_dump -U novora -d novora -F c -f /tmp/novora.dump sudo docker compose cp db:/tmp/novora.dump ./novora-migrate.dump恢复到 Neon:
bashpg_restore --dbname="Neon 连接串" --clean --no-owner novora-migrate.dump确认 Vercel 的
DATABASE_URL指向该 Neon 项目;重新部署一次让变量生效;
验收通过后再停用本地实例。
场景三:只换数据库
不换部署方式,只把数据库换到另一套 PostgreSQL:
- 备份源库;
- 在目标实例上创建库和账号;
- 恢复数据;
- 修改环境变量
DATABASE_URL; - 重新部署或重启(环境变量只对新进程生效);
- 验收。
环境变量改了不重启等于没改
云端修改环境变量后必须重新部署;本地修改 .env 后必须重启容器或服务。
场景四:换域名
- 在新域名上完成解析和 HTTPS;
- 在 Vercel(或反向代理)把新域名设为主域名;
- 确认
/api/time在新域名下返回 JSON; - 让教室设备改用新地址;
- 插件重新填写地址并重新配对;
- 旧域名保留一段时间的跳转,再停用。
域名变化会影响设备的本机绑定和插件配对,这部分必须重做,不能只改解析。
迁移必做的验收清单
- [ ] 管理员能用原密码登录
- [ ] 学校结构、年级、班级完整
- [ ] 大型考试与周测数据完整
- [ ] 考试记录与操作历史可查
- [ ] 用户、角色、数据范围正确
- [ ] 设备绑定关系正常(或已重新绑定)
- [ ] 教室大屏显示正确
- [ ] PDF 能正常下载
- [ ] ClassIsland 插件同步正常(如启用)
- [ ] 操作日志与审计记录可查
迁移前必须做的
- 备份。迁移过程中任何一步出错,备份是唯一的退路。
- 演练。在生产切换前,先在独立数据库上把恢复流程走一遍。
- 选时间。避开考试和上课时段,并提前通知使用方。