资讯动态

Judge0完全指南:三步自托管一个支持90+语言的沙箱代码执行系统

发布时间:2026/10/17 2:16:19 来源:尧图企业网站定制
Judge0完全指南三步自托管一个支持90语言的沙箱代码执行系统【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0Judge0 是一个开源、可自托管的在线代码执行系统online code execution system基于 isolate 沙箱对 90 种语言做沙箱化编译与执行常用于构建在线判题系统、AI 代码验证、面试评估平台。手写代码沙箱三件事绕不开想让最终用户或 AI agent在你的服务器上跑任意代码有三件事绕不开隔离不受信任的代码可能尝试读文件、提权不能直接在宿主机上跑资源限制死循环和内存膨胀能把整台机器拖垮CPU、内存、文件大小都需要配额多语言每种语言的编译命令、解释器、运行方式各不相同逐一手写脚本很快失控常见做法是手写一套「Docker cgroups 每种语言一个脚本」维护成本随语言数量线性上涨。Judge0 做的事就是把这些脚本固化成一个开箱即用的服务。项目定位先搞清楚它由什么组成Judge0 的技术栈不复杂四个部分各司其职Rails server接收 HTTP JSON 请求管理 submission提交生命周期Resque Redis任务队列解耦请求与执行PostgreSQL存储提交记录、限制参数和执行结果isolate真正执行沙箱化负责进程隔离、资源限制、输出与资源数据采集自托管只需一份配置文件 judge0.conf默认值开箱即用POSTGRES_PASSWORD和REDIS_PASSWORD没有默认值必须填写server 默认监听 2358 端口。把仓库 clone 到本地git clone https://gitcode.com/GitHub_Trending/ju/judge0后用 docker compose 拉起 server、worker、db、redis 四个容器即可。验证是否跑通直接发一条请求curl -H Content-Type: application/json \ -d {language_id: 109, source_code: print(f\hello, {input()}\), stdin: Alice} \ http://localhost:2358/submissions?waittruelanguage_id: 109对应 Python 3waittrue会阻塞到执行完成响应里直接带上stdout、status_id等结果字段。源码导读一次提交如何穿过沙箱读懂 Judge0 不需要通读整个仓库重点看三个文件语言注册表每种语言只是一条数据记录——id、source_file、compile_cmd、run_cmd。例如 C (GCC 7.4.0) 就是gcc %s main.c加./a.out。新语言意味着加一条记录不用改任何代码IsolateJob执行引擎。一次提交按固定五步走初始化沙箱工作目录 → 编译如需要→ 运行 → 校验采集 time、memory、exit_code、stdout/stderr→ 清理。编译和运行都在 isolate 里执行-tCPU 时间、-m内存、-f文件大小等参数全部来自配置状态枚举共 14 个状态从In Queue、Processing到Accepted、Wrong Answer、Time Limit Exceeded、Runtime Error (SIGSEGV)等。这里也能看到 isolate 的TO/SG/RE/XX信号如何映射成最终状态这个设计带来的直接好处是Rails 层只做 API 和状态管理所有危险操作被圈在 IsolateJob isolate 内用户代码最多影响自己的沙箱目录。从请求到结果一条完整的集成链路标准异步链路只有三步POST /submissions提交源码与参数拿到tokenworker默认2*nproc个并行从 Redis 队列取出任务在沙箱内执行GET /submissions/:token拉取结果或提交时带callback_url由 Judge0 主动把结果 PUT 回你的服务默认重试 3 次、5 秒超时几个值得注意的细节提交里带expected_output时系统自动比对并给出Accepted/Wrong Answer判定不带则只返回执行结果批量接口POST /submissions/batch一次最多 20 条仅支持异步模式waittrue同步等待方便本地调试但官方文档明确说明它扩展性差高并发场景不建议使用Judge0品牌视觉形象集成中常见的三个问题与解法队列满了503 queue is full。等待处理的提交数超过MAX_QUEUE_SIZE默认 100时服务端直接返回 503。可用GET /workers端点查看每个队列的 size、idle、working 状态判断瓶颈。降级策略通常是客户端退避重试或水平扩容 worker 节点。非可打印字符导致 JSON 解析失败。source_code、stdin、expected_output含非可打印字符时请求带base64_encodedtrue并自行对这三个字段做 Base64 编码服务端遇到无法转 UTF-8 的内容也会返回错误提示你改用 base64。网络与超时边界。沙箱默认无网络访问ENABLE_NETWORKfalse请求中的enable_network只有在ALLOW_ENABLE_NETWORK为 true 时才生效。CPU 超时后还可以配cpu_extra_time宽限几秒让实际执行时间被如实上报而不是直接截断。适合什么场景不适合什么场景Judge0 适合「接收大量短平快代码并返回结果」的形态在线判题、AI 生成代码的自动化验证、面试评估、编程练习平台。单节点吞吐受 worker 数量约束横向加 worker 容器即可扩容。不适合的形态长时间运行的程序默认 CPU 5 秒、wall-clock 10 秒自定义上限也有限额、交互式或带 GUI 的应用。另外 isolate 属于进程/内核特性级别的沙箱如果威胁模型要求更强的隔离边界建议在外面再套一层容器化隔离。【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑