Skip to content

Repository files navigation

沐光 Paper

沐光 Paper 是面向数学建模竞赛写作流程的 SaaS 项目,覆盖题目与材料录入、AI 分模块生成、LaTeX 论文组装、在线编辑、自动编译修复和 PDF 下载。

本仓库是用于个人项目展示和技术交流的脱敏快照,代码基线来自原项目 2026 年 4 月 20 日提交 7c0e0727885aab65e7967241d4dd4c543b8c7611(“升级生成任务二十并发”)。为避免携带历史敏感数据,本仓库未复制原 Git 历史,也不包含生产配置、真实用户数据或可用凭据。

核心能力

  • 数学建模题面、分问代码、结果、参考资料及图片的统一录入
  • 中文国赛和英文竞赛论文的分模块 AI 生成与顺序组装
  • BullMQ 异步任务队列、用户级任务锁、模型链限流与并发控制
  • LaTeX 在线编辑、图片管理、PDF 预览和版本文件管理
  • 编译日志分析、结构检查和多轮 LaTeX 自动修复
  • 用户、项目、订阅、支付、渠道、审计和运营后台基础能力

技术栈

层级 技术
Web Next.js 14、React 18、Monaco Editor、PDF.js
API NestJS、Fastify、Prisma、JWT、BullMQ
Worker Node.js、TypeScript、BullMQ、Handlebars
文档编译 XeLaTeX、latexmk、TeX Live
数据层 PostgreSQL 15、Redis 7、本地对象存储适配器
网关与部署 Docker Compose、Caddy

基础架构

flowchart LR
    U[浏览器] --> W[Next.js Web]
    U --> A[NestJS API]
    W --> A
    A --> DB[(PostgreSQL)]
    A --> R[(Redis / BullMQ)]
    A --> S[(项目文件存储)]
    R --> Q[论文生成 Worker]
    Q --> LLM[OpenAI 兼容模型接口]
    Q --> T[提示词与论文模板]
    Q --> L[XeLaTeX 编译服务]
    Q --> S
    L --> S
Loading

主要服务说明:

  • apps/web:用户端、管理端、论文生成表单和 LaTeX 编辑器。
  • apps/api:鉴权、项目、文件、支付、建模会话、编译代理和后台接口。
  • apps/worker:消费生成队列,调用模型,按模板装配论文并执行自动修复。
  • apps/latex-compiler:隔离运行 XeLaTeX/latexmk,并提供健康检查与编译接口。
  • compose:本地展示环境的 PostgreSQL、Redis、API、Worker、编译器、Web 和 Caddy 编排。
  • proxy:本地反向代理示例。

更详细的数据流和模块边界见 架构说明

本地部署

环境要求

  • Linux、WSL2 或 macOS
  • Docker 24+
  • Docker Compose v2
  • OpenSSL
  • 建议至少 4 核 CPU、8 GB 内存和 15 GB 可用磁盘

1. 克隆项目

git clone https://github.com/NewLifeLi/muguang_introduce.git
cd muguang_introduce

2. 初始化本地环境变量

./scripts/init-env.sh

脚本会从 compose/env/.env.example 创建被 Git 忽略的 compose/env/.env.dev,并生成数据库密码、JWT Secret、内部回调密钥等本地随机值。

然后编辑 compose/env/.env.dev,至少填写:

LLM_CHAIN_KEYS=your_api_key

默认模型接口采用 OpenAI 兼容协议。若使用其他供应商,同时调整:

LLM_CHAIN_BASES=https://your-provider.example/v1
LLM_CHAIN_MODELS=your-model-name

3. 检查并启动

make config
make up
make migrate
make ps

首次构建 LaTeX 镜像需要安装 TeX Live,耗时和磁盘占用会明显高于普通 Node.js 服务。

4. 访问服务

服务 地址
Web http://localhost:3000
API 健康检查 http://localhost:3001/health
LaTeX 健康检查 http://localhost:3011/health
Caddy 统一入口 http://localhost:8080

查看日志或停止服务:

make logs
make down

不使用 Docker 的开发构建

各应用保留独立的 package-lock.json,可分别验证:

npm --prefix apps/api ci
npm --prefix apps/api run prisma:generate
npm --prefix apps/api run build

npm --prefix apps/worker ci
npm --prefix apps/worker run build

npm --prefix apps/latex-compiler ci
npm --prefix apps/latex-compiler run build

npm --prefix apps/web ci
npm --prefix apps/web run build

Web 开发服务器:

npm --prefix apps/web run dev

API、Worker 和编译器依赖 PostgreSQL、Redis、共享存储及对应环境变量,开发时建议仍由 Docker Compose 提供基础服务。

关键配置

变量 用途 是否必填
POSTGRES_PASSWORD 本地 PostgreSQL 密码 是,由初始化脚本生成
JWT_SECRET Access/Refresh Token 签名 是,由初始化脚本生成
MODELING_INTERNAL_KEY API 与 Worker 内部建模接口鉴权 是,由初始化脚本生成
METRICS_CALLBACK_SECRET 编译指标回调鉴权 是,由初始化脚本生成
LLM_CHAIN_BASES 模型接口地址列表 生成论文时必填
LLM_CHAIN_KEYS 模型 API Key 列表 生成论文时必填
LLM_CHAIN_MODELS 每条链的候选模型 生成论文时必填
SMS_PROVIDER mockaliyun 本地默认 mock
PAY_DEFAULT_CHANNEL sandboxwechatalipay 本地默认 sandbox

完整配置和说明位于 compose/env/.env.example。示例文件只包含空值或明确的本地非敏感配置。

生产部署说明

本仓库的 Compose 文件用于本地演示,不应原样作为生产配置。生产环境至少需要:

  1. 使用云 Secret Manager、Docker Secrets 或受控环境变量注入凭据。
  2. 使用独立数据库账号、Redis 鉴权、TLS 和最小权限网络策略。
  3. 将对象存储、支付证书和短信凭据放在仓库之外。
  4. 关闭 Mock 短信和 Mock 支付入口。
  5. 对模型调用设置预算、速率限制、超时、重试和审计告警。
  6. 在反向代理层配置真实域名、HTTPS、安全响应头和上传限制。

安全与数据边界

  • 本仓库不包含生产 .env、数据库转储、真实手机号、论文数据或支付数据。
  • 原项目中的商业凭据已经从本公开快照中移除;提交前应继续运行密钥扫描。
  • 原项目使用的商业系统字体未进入公开仓库,LaTeX 容器改用 Noto CJK 与 TeX Gyre 字体。
  • compose/env/.env.devsecrets/、运行日志、生成论文和本地存储目录均被 Git 忽略。
  • 如果发现安全问题,请不要在公开 Issue 中提交密钥或用户数据,处理方式见 SECURITY.md

版本说明

该公开仓库展示的是一个经过脱敏的历史里程碑,并非线上商业环境的实时镜像。后续公开迭代会以安全、可复现的独立提交继续维护。

授权

本仓库用于个人项目展示和技术评审,除仓库中另有说明的第三方组件外,项目自有代码保留全部权利。具体条款见 LICENSE

About

公开脱敏源码、架构文档与可运行演示;生产配置及用户数据独立存放于私有环境。

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages