Judge0 在线代码执行系统入门:3 步跑通并接入你的应用
【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0
你需要让用户提交一段代码,然后立刻拿到它的运行结果。Judge0 就是干这个的:它是个在线代码执行系统,你通过 HTTP JSON API 提交源码,它在沙箱里执行,再返回 stdout、耗时和内存。支持 90+ 语言。本教程带你从零跑通这个在线代码执行 API,并讲清日常使用中最该动的配置。
🚀 一条命令完成本地部署
装好 Docker 和 Docker Compose 后,按顺序执行:
git clone https://gitcode.com/GitHub_Trending/ju/judge0 cd judge0编辑judge0.conf,先给REDIS_PASSWORD和POSTGRES_PASSWORD填上随机密码,然后启动:
docker-compose up -d db redis sleep 10 docker-compose up -d几个容器起来后,API 就在http://localhost:2358上,文档页在http://localhost:2358/docs。
💻 第一次调用 API 的完整流程
闭环只有两步:发起请求拿 token,再用 token 查结果。用 cURL 演示:
curl -X POST -H "Content-Type: application/json" \ -d '{"source_code":"print(\"hi\")","language_id":71,"stdin":""}' \ http://localhost:2358/submissions返回一个 token,比如{"token": "d85cd024-..."}。拿它查结果:
curl http://localhost:2358/submissions/<token>成功后你会看到这样的响应:stdout是hi\n,status为{"id": 3, "description": "Accepted"},另外还有time和memory两个数字。用 Python 写一遍,顺便展示轮询:
import requests r = requests.post("http://localhost:2358/submissions", json={ "source_code": "print('Hello, Judge0!')", "language_id": 71, "stdin": ""}) token = r.json()["token"] while True: s = requests.get(f"http://localhost:2358/submissions/{token}").json() if s["status"]["id"] >= 3: break print(s["stdout"], s["status"]["description"])status.id为 1(排队)和 2(处理中)时结果还没出来,要重试直到 ≥3。注意language_id填错会直接返回 422,可先GET /languages查正确编号。其他语言客户端可用任意 HTTP 库,接口是一样的。
⚙️ 部署前必须动的 4 项配置
都改在judge0.conf里:
REDIS_PASSWORD:Redis 启动时强制要求密码,留空整个服务起不来。POSTGRES_PASSWORD:PostgreSQL 连接密码,留空则数据库无法初始化。AUTHN_TOKEN:默认空值意味着 API 无认证,任何能访问 2358 端口的人都可执行代码;生产环境必须设置,请求时带上AUTHN_HEADER指定的头。ALLOW_ORIGIN:默认允许所有来源跨域,建议只填你自己的域名。
时间、内存等资源限制(CPU_TIME_LIMIT默认 5 秒、MEMORY_LIMIT默认 128000 KB)有合理默认值,先不用动。
🧭 按环境选部署方式
| 环境 | 推荐方式 | 适用理由 |
|---|---|---|
| 本地开发 | 仓库自带docker-compose up -d | 两条命令起服务,无需额外依赖 |
| 测试 / 预发 | Compose 部署 + 开启AUTHN_TOKEN | 用与生产一致的配置验证认证链路 |
| 生产 | Compose 部署 + Nginx 反向代理 + HTTPS | 对外暴露统一入口,TLS 与限流集中处理 |
⚠️ 高频问题避坑指南
- 现象:
docker-compose up后 server 容器反复重启,API 连不上。原因:judge0.conf里两个密码为空。解法:补齐REDIS_PASSWORD和POSTGRES_PASSWORD再重启。 - 现象:查结果一直返回
status.id为 1 或 2。原因:提交还在队列或执行中,属正常异步行为。解法:轮询直到 ≥3;长时间不变时先看/health和/workers确认 Worker 存活。 - 现象:简单程序返回
Time Limit Exceeded(status.id为 5)。原因:默认CPU_TIME_LIMIT只有 5 秒,或代码里有 sleep 撞上WALL_TIME_LIMIT。解法:按程序实际需求调高对应限制,或在提交里单独传cpu_time_limit。
官方文档:docs/docs.md
Judge0 适合 OJ 练习、编码测试、AI 代码执行等需要安全运行不可信代码的场景。想深入时,从 docs/api/ 的 API 文档和app/源码读起即可。
【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考