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