HCY Blog

代码高尔夫平台开发路线

本文详细介绍了在6至8周内从零开发代码高尔夫平台的完整路线,涵盖需求拆解、环境搭建、前后端实现、评测系统集成及部署运维等关键环节。读者可学习全栈项目规划与敏捷开发方法,掌握Docker容器化部署、多服务通信及生产环境监控等实用技能。亮点包括基于RabbitMQ的异步判题架构、AI助教集成、安全隔离设计,以及从开发到上云的端到端实践指南,为构建高可用编程竞赛平台提供完整参考。

代码高尔夫平台开发路线

目标:从零起步,在 6~8 周内搭建一套可用的代码高尔夫平台,覆盖题库、提交评测、积分榜、文章/论坛和 AI 助教,最终通过 Docker Compose 部署到阿里云 ECS。

1. 需求澄清与里程碑拆解

  • 明确功能范围:MVP 至少包含注册登录、题库浏览、提交评测、榜单、题目投稿、文章/论坛、站内信、邮件验证与管理员后台。
  • 拆分里程碑:
    1. M1(第 1~2 周):设计数据模型、API 契约,打通本地判题闭环。
    2. M2(第 3~4 周):完善站内功能(投稿、文章、论坛、邮件验证),前端接入全部页面。
    3. 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.shProjIntro/
  • 撰写 .env.example,列出核心变量:DATABASE_URLRABBITMQ_URLJWT_SECRETRUNNER_API_TOKENDEEPSEEK_API_KEYSMTP_*
  • 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_PARALLELRUNNER_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(useAuthuseTheme 等),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/技术知识点.mdProjIntro/模拟问答.md,确保面试和分享时素材充足。