个人站点

第 7 / 8 篇

整理于 · 8 分钟

从开发到部署和答辩演示

分层部署、图片文件依赖与演示准备

覆盖一月分层部署和四月迁移、答辩准备;演示方案不等同于成功演示记录。

贯穿项目的约定 本篇涉及 2 条

贯穿项目的约定

  1. 课时属于具体课程,班级、课次与教室容量分别判断。

    本篇涉及 查看规则说明
  2. 各角色只在授权范围内操作,家长代办以确认绑定为前提。

    本篇涉及 查看规则说明
  3. 账号、关系、教学与订单各有状态,一处变化不代替另一处判断。

    查看规则说明
  4. 课程课时、订单金额和钱包资金分开,费用变化保留业务依据。

    查看规则说明

本篇如何落实

部署时分别排查路由、跨域与权限,统一课程展示编号并保留数据库主键;迁机还需核对图片文件等运行依赖。

开发环境能运行之后,还需要处理云端部署、主机迁移和演示组织。本文整理 2026 年 1 月至 4 月的相关记录,并区分当时的部署工作、中期答辩准备与九月补充的验证证据。

这条线索包含两个问题:前后端、数据库和上传文件怎样共同迁移;四类角色的功能怎样串成可理解的演示流程。

1. 1 月初次部署:前后端与数据库分层部署

1 月的部署记录采用分层方案:前端放在 Azure Static Web Apps,后端运行于自有 Linux 主机,数据库使用 Azure MySQL。三个部分需要分别配置,再检查它们之间的访问链路:

客户端浏览器Web 浏览器
访问静态页面
前端托管层
Azure Static Web Apps静态前端与 SPA 路由回退配置
发起 API 请求
自有 Linux 主机
Caddy / Nginx 反向代理
Spring Boot 2.7 后端服务
托管数据库层
Azure MySQL 托管数据库

最后一段连线属于后端服务:只有 Spring Boot 直连托管数据库,浏览器与静态托管层都到不了这一层。

静态前端与后端主机分开托管,数据库只对后端开放

初次部署排障实录

部署记录中的排查集中在路由和跨域:

  1. SPA 刷新 404 故障:单页应用在进入 /student/courses 等子路由后,用户直接刷新页面会导致 Web 服务器因找不到该物理 HTML 文件而报 404。解决方案是在前端托管平台配置重写规则(staticwebapp.config.json),将所有非静态资源请求统一内部回退(Fallback)至 index.html,交由前端 Vue Router 重新接管路由;
  2. 跨域与凭证携带(CORS):前后端分属不同域名,需要配置允许的来源与凭证选项,并检查浏览器发出的认证请求。CORS 配置解决跨域访问条件,接口本身仍需执行身份和权限校验。

2. 4 月主机迁移的教训:数据库记录与文件存储的依赖

在 4 月中旬,后端服务需要迁移至新的海外云主机并使用 Cloudflare Tunnel 建立穿透通道。

迁移中出现了图片 404:数据库记录已经迁入,部分图片仍无法加载。

排查发现,上传文件没有随数据库迁移:MySQL 数据库中存储的只是图片的相对 URL 路径字符串(如 /uploads/avatar/123.jpg),图片文件仍保存在原宿主机的本地硬盘目录中。 仅导出数据库 SQL 并没有带走这些文件。

这说明恢复系统时还必须迁移上传目录,并核对文件路径与访问配置。现有记录能支持这项迁移教训,不能据此认定文件同步脚本和整套备份恢复验收都已完成。

3. 课程编号标准化方案

4 月的编号方案把类别、模板和开班实例分层命名,方便在界面上识别它们的关系:

类别代码如 PY
模板编号如 PY-101
开班编号如 PY-101-2026-01
编号从类别一层层派生,末段编号自带它的来路
- **类别码**:2~4 位字母简称; - **模板码**:类别前缀 + 3 位标准数字,代表标准课程产品; - **班号(classNo)**:模板码 + 开班年份 + 两位流水序号。

业务编号与数据库自增主键分开:前者用于展示和识别,后者继续用于内部关联。编号生成中的并发问题在后续重构中另行处理。

4. 答辩演示的重塑:按业务闭环讲述系统价值

4 月的中期答辩执行方案提出按业务流程组织演示。这样可以说明同一个动作怎样在不同角色之间流转,避免只罗列菜单。下面是角色与业务衔接的示意;它描述演示准备,不是答辩成功或真实交易的证明:

序号发起方接收方动作
1家长学员发起绑定申请
2学员家长在线确认授权,建立可信亲子关系
3家长管理员为已绑定孩子代付报名
4管理员教师在网格工作台为该班排课并指派教室
5教师学员在课堂执行动态考勤点名
6学员管理员发起请假申请
7管理员学员审批,按规则更新请假及相关记录
8家长家长查收站内通知与孩子动态学情报告

表中四种角色对应系统里的四类账号:家长 Parent、学员 Student、管理员 Admin、教师 Teacher。第 8 步的发起方与接收方是同一方,它是家长自己查收结果,不再需要别人配合。

一条贯穿四种角色的主线,八步之间没有可以跳过的环节

演示准备需要核对这些步骤的前置条件:亲子绑定是否成立、付款对象是否选对、排课是否存在、请假是否符合规则。九月退款测试中的金额例子不属于四月演示记录,也不能套用到病假退费流程。

5. 区分规划测试与真实证据

在项目的文档资产中,包含一份罗列了约 350 项测试用例的《功能测试总览》。客观而言,这份 350 项的清单是项目在设计阶段制定的功能规划与验收预期矩阵,而不是当时实际运行通过的自动化测试日志。

9 月有限重构另有具体测试和验收记录,其中事务验证使用临时隔离的 MySQL、原有表结构和合成数据,并检查指定场景的锁等待与回滚。它们不能作为生产环境实测或全部 350 项测试通过的依据。

因此,部署记录回答当时怎样运行系统,演示方案回答准备怎样展示,九月验收回答哪些场景经过验证。三类资料需要分别使用。