跳到主要内容

MathCC Wiki 发布架构

生产 Wiki 继续是纯静态 Docusaurus 站点。轻量 Publisher 只在保存草稿或点击发布时运行,发布后不需要常驻动态 CMS。

边界与升级

自定义内容集中在 check-ins/sources/check-ins/templates/static/uploads/check-ins/tools/publisher/。没有修改 Docusaurus 包源码,也没有 swizzle 官方主题。升级 Docusaurus 时只需在功能分支更新依赖并运行测试、构建,再合并到稳定分支。

后台入口与认证

正式入口为 https://wiki.mathcc.com/admin/。Publisher 在 Oracle 上只监听 127.0.0.1:8091,通过 Oracle 到杭州的反向 SSH 隧道和 OpenResty /admin/ 代理提供访问。临时本机隧道命令 ssh -N 保持前台且无输出是正常的。

后台使用站内登录页和签名 HttpOnly 会话 Cookie,不再触发浏览器 Basic Auth 弹窗。凭证首次从环境变量初始化到 PUBLISHER_AUTH_FILE,之后只保存 scrypt 加盐哈希;/admin/account 可以修改用户名和密码,修改后旧会话立即失效。生产环境不应删除或记录密码,PUBLISHER_SECRET 仍必须保密。

内容格式与关联

  • Markdown、MDX:原样交给 Docusaurus,remark-math 与 KaTeX 支持 $...$$$...$$
  • LaTeX:由 Pandoc 安全转换为 Markdown,原始 .tex 保存在 sources/check-ins/
  • 纯文本:转义 Markdown 控制字符,原始 .txt 同样保留;
  • JPG、PNG、WebP、GIF:上传到日期目录并自动插入图片;
  • 题库题号:生成 https://p.mathcc.com/problems/<id> 链接;
  • 闯关包:后台从公开 API 加载标题和 slug 搜索,内容只保存稳定的 challengeSlugs,生成 https://p.mathcc.com/challenges/<slug> 链接。API 不可用时仍可手动填写 slug。

题库 API 仅用于后台选择器,发布链接基址由 Publisher 配置的 PUBLISHER_CHALLENGE_BASE_URL 控制,默认仍是 https://p.mathcc.com

发布、Sitemap 与回滚

  1. 保存草稿写入 draft: true,不会被生产站公开;
  2. 发布写入 draft: false,执行 npm run build
  3. 构建成功后部署脚本上传新的静态 release,并原子切换杭州的 current
  4. Docusaurus 在构建时自动更新 Sitemap、RSS 和 Atom;
  5. 构建或部署失败会恢复文章、原始源文件和本次上传图片,线上 release 不变;
  6. 一键回滚只切换上一静态 release,不需要重启 Publisher。