公司动态

10分钟在本地跑通Judge0并接入你的第一个代码执行请求

📅 2026/8/24 3:01:36
10分钟在本地跑通Judge0并接入你的第一个代码执行请求
10分钟在本地跑通Judge0并接入你的第一个代码执行请求【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0Judge0 是一个开源的在线代码执行系统你通过 HTTP JSON API 提交源码它在 isolate 沙箱里运行返回输出、耗时和内存。仓库里当前启用 47 种语言含归档共 89 种覆盖 C、C、Java、Python、Rust 等主流选项。如果你的场景是在线评测、AI 代码结果校验、让用户提交一段代码跑一下它就是现成的基础设施。跟着下面的步骤走克隆仓库、填两个密码、docker-compose up -d10 分钟内你会拿到一个真实的执行结果。 根据你的情况选部署方式三种典型情况对号入座只想本地试 API直接用仓库自带的docker-compose.yml不用改任何东西只补两个必填密码。要挂到线上给团队用同样是这套 compose但必须做安全加固下文有清单前面挂一层 Nginx 反代。不想管服务器用托管的云 API 服务注册拿 API key 即可调用方式和本地完全一样本文的接口示例可以直接复用。先克隆仓库进入目录git clone https://gitcode.com/GitHub_Trending/ju/judge0 cd judge0仓库根目录已有judge0.conf你只需要把其中两个没有默认值、不填就起不来的项填上# judge0.conf 中填写值换成你自己的 REDIS_PASSWORD你的redis密码 POSTGRES_PASSWORD你的postgres密码保存后启动并检查容器docker-compose up -d docker ps你期望看到 4 个容器server、worker、db、redis都处于 Up 状态其中 server 把 2358 端口映射到本机。跑一个探测请求确认服务活着curl -s http://localhost:2358/system_info返回一段包含 isolate 版本、内存等信息的 JSON说明服务和 worker 都正常。⚙️ 第一次API调用的完整链路提交→轮询→拿结果Judge0 的请求处理流程Rails 服务端把提交写入 Redis 队列worker 从队列取出任务在 isolate 沙箱中编译并执行结果写回数据库你再用返回的 token 查状态。Judge0官方壁纸状态码是理解整个 API 的钥匙status.id为 1 表示排队中In Queue2 表示处理中Processing≥3 才是最终结果3Accepted4Wrong Answer5超时6编译错误7-14 是各类运行错误。所以轮询逻辑就是等到 id ≥ 3。第一步用 cURL 提交。下面这条请求提交一段 Python 代码language_id71 对应 Python 3.8.1其他语言可查GET /languagescurl -s -X POST -H Content-Type: application/json \ -d {source_code: print(\Hello, Judge0!\), language_id: 71, stdin: } \ http://localhost:2358/submissions你期望看到类似这样的返回拿到的就是提交凭证{token: d85cd024-1548-4165-96c7-7bc88673f194}第二步用 token 查结果。刚提交时可能还在排队隔 0.5~1 秒再查即可curl -s http://localhost:2358/submissions/上一步的token跑完后你会看到这样的 JSON{ stdout: Hello, Judge0!\n, time: 0.021, memory: 38000, status: { id: 3, description: Accepted } }stdout是程序输出time是 CPU 耗时秒memory是峰值内存KB。如果代码里有编译错误compile_output字段会给出错误信息。想省掉轮询提交时带上callback_url字段执行完成后 Judge0 会把完整结果 POST 到你的这个地址回调默认开启。也可以用waittrue让提交请求直接返回结果但官方文档不推荐用它扛量高并发下会拖住服务端。下面是一个 Python 完整示例把提交→轮询→打印结果封装成一个函数可直接粘进你的项目import time import requests BASE http://localhost:2358 def run_code(source_code, language_id, stdin): # 1. 提交拿到 token token requests.post(f{BASE}/submissions, json{ source_code: source_code, language_id: language_id, stdin: stdin, }).json()[token] # 2. 轮询直到出最终结果1排队, 2处理中, 3结束 while True: result requests.get(f{BASE}/submissions/{token}).json() if result[status][id] 3: return result time.sleep(0.5) r run_code(print(Hello, Judge0!), language_id71) print(r[stdout].strip(), |, r[status][description])运行后期望输出Hello, Judge0! | Accepted。 关键配置速查6个不改就会出问题的项judge0.conf很长但你真正需要关心的只有下面这几项配置项默认值什么时候要改改什么REDIS_PASSWORD空不填服务起不来永远随机强密码POSTGRES_PASSWORD空不填服务起不来永远随机强密码AUTHN_TOKEN空API 无认证只要服务暴露给内网之外一串随机 token之后每个请求都要带认证头ALLOW_ORIGIN空放行所有来源浏览器端会直接调 API 时你自己的域名空格分隔多个CPU_TIME_LIMIT/MEMORY_LIMIT5 秒 / 128000 KB你的代码要跑更久或吃更多内存时调大即可但受MAX_CPU_TIME_LIMIT15 秒、MAX_MEMORY_LIMIT512000 KB封顶ENABLE_NETWORKfalse沙箱默认禁网只有明确需要沙箱内发网络请求时设为 true用户级开关还受ALLOW_ENABLE_NETWORK控制其余项编译选项开关、批量提交上限、队列大小等保持默认值即可用到时再查judge0.conf里的注释。 上线前必做的安全加固这几件事合并在一起做半天内能全部完成开启 API 认证。不配 token 等于任何人能执行任意代码。在judge0.conf填AUTHN_TOKEN你的token之后所有请求都要带请求头默认头名X-Auth-Tokencurl -H X-Auth-Token: 你的token http://localhost:2358/...限制来源域名。防止其他网站通过浏览器跨域滥用你的服务。配置ALLOW_ORIGINyourdomain.com www.yourdomain.com。按 IP 收紧可选。如果调用方就几台固定机器直接ALLOW_IP10.0.0.5 10.0.0.6比 token 更硬。检查资源上限。默认值已经能挡住大多数问题代码但MAX_*_LIMIT一组是你允许的单次执行上限按你的语言场景复核一遍防止长任务占满 worker。挂反代 定期备份。Nginx 把域名反代到127.0.0.1:2358顺带终结 TLS数据库定时pg_dump一份提交记录都在里面。️ 排障速查最高频的6种现象现象大概率原因解决命令/操作docker ps里 redis 或 db 反复重启两个必填密码没填grep PASSWORD judge0.conf检查补上后docker-compose up -d提交后status.id一直是 1In Queueworker 没在消费队列docker logs worker看报错多半是 Redis 连接失败提交返回 503{error: queue is full}队列满MAX_QUEUE_SIZE默认 100调大MAX_QUEUE_SIZE或降低你的提交并发提交返回 422language_id cant be blank / doesnt exist语言 ID 传错curl -s http://localhost:2358/languages查真实 ID结果status.id为 6编译错误你的代码编译不过看返回 JSON 的compile_output字段配置了认证后所有请求 401请求头没带对确认带了AUTHN_HEADER头默认X-Auth-Token且值等于AUTHN_TOKEN下一步做到这里你手上已经有一个跑在 2358 端口、带完整资源限制和状态码体系的代码执行服务Python 示例改个 BASE 地址就能接进你的后端。接下来建议按顺序看两处仓库的 docs/api/ 里 system_and_configuration 一节确认你部署的完整配置再翻翻 docs/maintainers/README.md 了解如何增加 worker 实例做水平扩展。【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考