From a47e051a494b401ccb5663a1eb1581633aa22021 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sat, 8 Aug 2026 03:33:00 -0600 Subject: [PATCH] =?UTF-8?q?docs(=E9=98=B6=E6=AE=B55):=20=E8=A1=A5=E9=AA=8C?= =?UTF-8?q?=20WebSocket=20=E7=BB=8F=20Caddy=20=E4=B8=8E=E6=9C=BA=E6=88=BF?= =?UTF-8?q?=E9=82=A3=E5=A5=97=20compose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 演练报告里原来有两块是没验过的,补上: ## WebSocket 经 Caddy 学生盯着「判题中…」变成结果就靠这条路,而它经过 Caddy 的 handle /ws/*, 是配置最容易写错、又只在生产才暴露的一段。实测 upgrade 成功,301ms 内 收到两条推送:judging → finished(AC)。 ## 机房那套 compose.school.yml 和服务器那套差别不小(没有 postgres、连远程库、端口 81、COOKIE_SECURE=false), 之前一次都没跑过。留下 oj-postgres 当「远程库」、其余换成 school 栈跑了一遍: 连库、首页、题目列表、登录、WS、完整判题全通。 其中特意验了 **Cookie 没带 Secure** —— 带了的话机房(http 直连 IP)会出现 「登录成功但立刻又变未登录」,是那种看起来毫无头绪的故障。 顺带确认机房的拓扑是「本地 Redis + 本地判题沙箱 + 远程库」, 判题不跨公网,只有数据库查询走公网。 演练用的是 docs/specs/schema.sql 只灌结构,盘上不留学生数据;跑完已清干净。 Co-Authored-By: Claude Opus 5 --- docs/specs/phase5-cutover-runbook.md | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/specs/phase5-cutover-runbook.md b/docs/specs/phase5-cutover-runbook.md index fcc8c09..17f9fc6 100644 --- a/docs/specs/phase5-cutover-runbook.md +++ b/docs/specs/phase5-cutover-runbook.md @@ -63,6 +63,35 @@ pg_dumpall 备份带 30 条 `setval`,而且直接查生产快照里所有序 | **判题机心跳** | 判题容器自行注册成功(新路径 `/api/judge-server/heartbeat`) | | **完整判题** | 提交 Python A+B → **AC,1.2 秒**,两个测试点全过 | +### WebSocket 实时推送(经 Caddy) + +学生盯着「判题中…」变成结果就靠这条路,而它经过 Caddy 的 `handle /ws/*`, +是配置最容易写错、又只在生产才暴露的一段。单独验过: + +``` +WS 经 Caddy upgrade: 已连接 +收到 2 条推送,301ms + → {"type":"submission_update","result":7,"status":"judging"} + → {"type":"submission_update","result":0,"status":"finished","time_cost":4,...} +``` + +### 机房那套(`compose.school.yml`) + +这套配置和服务器那套差别不小(没有 postgres、连远程库、端口 81、 +`COOKIE_SECURE=false`),单独跑过一遍:留下 `oj-postgres` 当「远程库」, +其余容器换成 school 栈,`DB_HOST` 指向宿主机 IP。 + +| 检查项 | 结果 | +|---|---| +| 连上「远程」库 | oj-api healthy,日志零错误 | +| 首页 / 题目列表 | 200,数据来自远程库 | +| 登录 | 200 | +| **Cookie 没带 Secure** | ✓ —— 带了的话机房(http 直连 IP)会「登录成功又立刻变未登录」 | +| WS + 完整判题 | 连接成功,300ms 内 judging → finished,AC | + +也就是说机房用的是**本地 Redis + 本地判题沙箱 + 远程库**,判题不跨公网, +只有数据库查询走公网。 + --- ## 三、切换前检查清单(停机窗口之前做完)