第 7 / 8 篇
整理于 · 8 分钟
从开发到部署和答辩演示
分层部署、图片文件依赖与演示准备
覆盖一月分层部署和四月迁移、答辩准备;演示方案不等同于成功演示记录。
贯穿项目的约定 本篇涉及 2 条
开发环境能运行之后,还需要处理云端部署、主机迁移和演示组织。本文整理 2026 年 1 月至 4 月的相关记录,并区分当时的部署工作、中期答辩准备与九月补充的验证证据。
这条线索包含两个问题:前后端、数据库和上传文件怎样共同迁移;四类角色的功能怎样串成可理解的演示流程。
1. 1 月初次部署:前后端与数据库分层部署
1 月的部署记录采用分层方案:前端放在 Azure Static Web Apps,后端运行于自有 Linux 主机,数据库使用 Azure MySQL。三个部分需要分别配置,再检查它们之间的访问链路:
最后一段连线属于后端服务:只有 Spring Boot 直连托管数据库,浏览器与静态托管层都到不了这一层。
初次部署排障实录
部署记录中的排查集中在路由和跨域:
- SPA 刷新 404 故障:单页应用在进入
/student/courses等子路由后,用户直接刷新页面会导致 Web 服务器因找不到该物理 HTML 文件而报 404。解决方案是在前端托管平台配置重写规则(staticwebapp.config.json),将所有非静态资源请求统一内部回退(Fallback)至index.html,交由前端 Vue Router 重新接管路由; - 跨域与凭证携带(CORS):前后端分属不同域名,需要配置允许的来源与凭证选项,并检查浏览器发出的认证请求。CORS 配置解决跨域访问条件,接口本身仍需执行身份和权限校验。
2. 4 月主机迁移的教训:数据库记录与文件存储的依赖
在 4 月中旬,后端服务需要迁移至新的海外云主机并使用 Cloudflare Tunnel 建立穿透通道。
迁移中出现了图片 404:数据库记录已经迁入,部分图片仍无法加载。
排查发现,上传文件没有随数据库迁移:MySQL 数据库中存储的只是图片的相对 URL 路径字符串(如 /uploads/avatar/123.jpg),图片文件仍保存在原宿主机的本地硬盘目录中。 仅导出数据库 SQL 并没有带走这些文件。
这说明恢复系统时还必须迁移上传目录,并核对文件路径与访问配置。现有记录能支持这项迁移教训,不能据此认定文件同步脚本和整套备份恢复验收都已完成。
3. 课程编号标准化方案
4 月的编号方案把类别、模板和开班实例分层命名,方便在界面上识别它们的关系:
业务编号与数据库自增主键分开:前者用于展示和识别,后者继续用于内部关联。编号生成中的并发问题在后续重构中另行处理。
4. 答辩演示的重塑:按业务闭环讲述系统价值
4 月的中期答辩执行方案提出按业务流程组织演示。这样可以说明同一个动作怎样在不同角色之间流转,避免只罗列菜单。下面是角色与业务衔接的示意;它描述演示准备,不是答辩成功或真实交易的证明:
| 序号 | 发起方 | 接收方 | 动作 |
|---|---|---|---|
| 1 | 家长 | 学员 | 发起绑定申请 |
| 2 | 学员 | 家长 | 在线确认授权,建立可信亲子关系 |
| 3 | 家长 | 管理员 | 为已绑定孩子代付报名 |
| 4 | 管理员 | 教师 | 在网格工作台为该班排课并指派教室 |
| 5 | 教师 | 学员 | 在课堂执行动态考勤点名 |
| 6 | 学员 | 管理员 | 发起请假申请 |
| 7 | 管理员 | 学员 | 审批,按规则更新请假及相关记录 |
| 8 | 家长 | 家长 | 查收站内通知与孩子动态学情报告 |
表中四种角色对应系统里的四类账号:家长 Parent、学员 Student、管理员 Admin、教师 Teacher。第 8 步的发起方与接收方是同一方,它是家长自己查收结果,不再需要别人配合。
演示准备需要核对这些步骤的前置条件:亲子绑定是否成立、付款对象是否选对、排课是否存在、请假是否符合规则。九月退款测试中的金额例子不属于四月演示记录,也不能套用到病假退费流程。
5. 区分规划测试与真实证据
在项目的文档资产中,包含一份罗列了约 350 项测试用例的《功能测试总览》。客观而言,这份 350 项的清单是项目在设计阶段制定的功能规划与验收预期矩阵,而不是当时实际运行通过的自动化测试日志。
9 月有限重构另有具体测试和验收记录,其中事务验证使用临时隔离的 MySQL、原有表结构和合成数据,并检查指定场景的锁等待与回滚。它们不能作为生产环境实测或全部 350 项测试通过的依据。
因此,部署记录回答当时怎样运行系统,演示方案回答准备怎样展示,九月验收回答哪些场景经过验证。三类资料需要分别使用。