代码高尔夫平台开发路线
本文详细介绍了在6至8周内从零开发代码高尔夫平台的完整路线,涵盖需求拆解、环境搭建、前后端实现、评测系统集成及部署运维等关键环节。读者可学习全栈项目规划与敏捷开发方法,掌握Docker容器化部署、多服务通信及生产环境监控等实用技能。亮点包括基于RabbitMQ的异步判题架构、AI助教集成、安全隔离设计,以及从开发到上云的端到端实践指南,为构建高可用编程竞赛平台提供完整参考。
目录
代码高尔夫平台开发路线
目标:从零起步,在 6~8 周内搭建一套可用的代码高尔夫平台,覆盖题库、提交评测、积分榜、文章/论坛和 AI 助教,最终通过 Docker Compose 部署到阿里云 ECS。
1. 需求澄清与里程碑拆解
- 明确功能范围:MVP 至少包含注册登录、题库浏览、提交评测、榜单、题目投稿、文章/论坛、站内信、邮件验证与管理员后台。
- 拆分里程碑:
- M1(第 1~2 周):设计数据模型、API 契约,打通本地判题闭环。
- M2(第 3~4 周):完善站内功能(投稿、文章、论坛、邮件验证),前端接入全部页面。
- M3(第 5~6 周):AI 助教、运营工具、部署脚本与监控补全。
- 准备文档:
网站架构规划.md、数据表设计、接口规范、运维手册草案。
需要掌握:产品需求拆解、工作量评估、使用甘特表或看板管理任务(GitHub Projects / Linear / Notion)。
2. 环境搭建与基础设施
- 本地安装:Node.js 20、pnpm 或 npm、Docker Desktop(含 Compose)、PostgreSQL 客户端、RabbitMQ 管理插件(可选)。
- 初始化仓库结构:
api/、runner/、web/、infra/、deploy.sh、ProjIntro/。 - 撰写
.env.example,列出核心变量:DATABASE_URL、RABBITMQ_URL、JWT_SECRET、RUNNER_API_TOKEN、DEEPSEEK_API_KEY、SMTP_*。 - 在
infra/docker-compose.yml中配置 PostgreSQL 15、Redis 7(预留)、RabbitMQ、API、Runner、Web、Nginx,做好卷挂载与资源限制。
需要掌握:Docker 基础命令、Compose 编排、环境变量管理、Linux 基础运维(开放端口、查看日志)。
3. 后端 API(api/)
- 技术栈:TypeScript + Express,使用
zod做请求体验证,pg访问 PostgreSQL,jsonwebtoken/bcryptjs处理认证。 - 数据模型:
- 用户、邮箱验证、角色权限。
- 题库:题目、样例、测试数据(私有)、标签。
- 提交:源码、判题状态、测试用例结果
submission_tests、最佳记录best_records、积分榜leaderboards。 - 内容:文章、论坛线程、回复、站内信。
- 判题流程:提交接口写库 + 发布任务到 RabbitMQ(
publishSubmissionJob)。 - 内部接口:Runner 回调
POST /api/v1/internal/submissions/:id/report,更新状态与积分。 - 其他:邮件发送
nodemailer、AI 助教POST /api/v1/submissions/:id/ai-help、中间件(速率限制、日志、错误处理)。 - 编写种子脚本
seed.ts生成初始用户与题目。
需要掌握:TypeScript 高级用法、Express 中间件、REST 设计、数据库事务、JWT 鉴权、RabbitMQ 基础、邮件与第三方 API 调用。
4. 判题 Runner(runner/)
- 语言:Node.js(保持全栈一致)。
- 核心流程:连接 RabbitMQ → 消费任务 → 写入临时代码 →
gcc -std=c17 -O2 -pipe -s编译 → 逐测试点执行 → 统计时间、内存、输出 → 调用 API 回写结果 → 清理临时目录。 - 配置:支持
RUNNER_MAX_PARALLEL、RUNNER_QUEUE_PREFETCH、编译/运行超时时间、日志截断长度。 - 安全:容器环境隔离、限制 CPU/内存、清理文件、错误重试。结合 TODO 清单逐步加入 rootless、seccomp、禁网。
需要掌握:Node.js 子进程、文件系统 API、RabbitMQ 消费模式、资源限制、C 编译优化(-O2/-Os/-s)。
5. 前端应用(web/)
- 技术栈:React 18 + Vite + TypeScript + TailwindCSS + React Router。
- 公共组件:导航、卡片、榜单、Markdown 渲染(Marked + DOMPurify + highlight.js)、Monaco 编辑器(@monaco-editor/react)。
- 页面:
- 题库、题目详情(含 Monaco 编辑器、提交历史、AI 助教按钮)。
- 排行榜、投稿中心、文章与论坛、站内信、个人中心。
- 管理后台:题目/投稿审核、用户管理、提交列表。
- 数据访问:统一
api.ts,支持自动附带 JWT、错误提示、重试策略。 - 状态管理:Hooks(
useAuth、useTheme等),localStorage 缓存编辑器代码与主题。 - UI 细节:暗色模式、自适应布局、加载/错误状态、调试信息提示。
需要掌握:React Hooks、路由与懒加载、表单与校验、Monaco 二次开发、Tailwind 主题配置、Markdown 安全渲染。
6. 联调与端到端验证
- 本地启动
docker compose up,确保 API、Runner、Web、RabbitMQ、PostgreSQL 互通。 - 编写 Smoke Test:注册 → 邮箱验证(可手动查看日志)→ 登录 → 题库浏览 → 提交样例题 → Runner 判题 → 榜单刷新。
- 验证:投稿/审核流程、文章创建与评论、AI 助教返回、站内信与邮件、管理员权限控制。
- 自动化:添加
npm run typecheck/npm run build/ 基础单元测试;可借助 Postman / Thunder Client 保存接口集合。
需要掌握:调试技巧(docker compose logs, psql, rabbitmqctl)、API 测试、前后端错误定位、事务回滚和数据修复方法。
7. 部署与运维
- 服务器:阿里云 ECS(Ubuntu),安装 Docker、Docker Compose、Nginx(如需单独反代)。
- 拉取代码:使用 GitHub +
deploy.sh构建并重启服务;保持.env与卷目录同步。 - 日志:通过
docker compose logs -f api/runner/nginx查看,必要时输出到../logs。 - 监控与告警:
- 指标:提交成功率、Runner 失败率、MQ 队列堆积、API 错误率。
- 观测方案:短期内使用 Docker logs + 手动巡检,长期引入 Prometheus + Loki + Grafana。
- 备份:定期
pg_dump导出 PostgreSQL,备份../data/postgres、../data/rabbitmq。 - 域名与 HTTPS:备案完成后配置 DNS,使用 Nginx + Certbot 或阿里云证书中心。
需要掌握:Linux 运维、Docker Compose 生产实践、Nginx 配置、备份恢复、监控告警基础。
8. 后续演进路线
- 功能:多语言支持(Python/Go/Rust)、比赛模式、题解排行、题库标签系统高级筛选、官方竞赛模板。
- 技术:Redis 热路径(排行榜/会话)、任务调度服务拆分、Runner 集群、seccomp/gVisor、OpenTelemetry。
- 运营:题库审核流程优化、AI 提示质量评估、用户行为分析看板、举报/风控体系。
- 文档:补充《数据字典》《接口契约》《运维手册》《安全基线》、面向用户的帮助中心。
需要掌握:分布式队列扩展、缓存一致性、云原生安全、观测性建设、产品运营分析。
小贴士:每完成一个里程碑,记得写复盘(成功点、问题、下一步计划),持续更新
ProjIntro/技术知识点.md与ProjIntro/模拟问答.md,确保面试和分享时素材充足。