从零跑通Judge0:5分钟在沙箱里安全执行AI生成的代码
从零跑通Judge05分钟在沙箱里安全执行AI生成的代码【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0Judge0是一个开源的在线代码执行系统给它源代码和输入它在沙箱中编译运行返回输出和详细状态。本文带你用Docker Compose拉起Judge0并发出第一个API请求跑通整个链路。项目速览Judge0是什么定位沙箱化的在线代码执行系统OJ/编译器后端专为跑别人写的代码这种不可信场景设计核心能力HTTP JSON API提交代码由独立Worker在isolate沙箱里执行支持批量提交、Webhook回调、细粒度资源限制支持范围90编程语言覆盖C、C、Java、Python、JavaScript等主流语言完整清单可用GET /languages接口查询架构Rails API服务 Redis队列 无状态Worker PostgreSQL天然支持水平扩展图注一次代码执行请求的完整链路——API入队、Worker从Redis取任务、沙箱执行、结果回写四个角色清晰分离。5分钟跑起来Docker Compose启动Judge0我们只走一条主线官方Docker Compose部署。它会把API服务server、执行Worker、PostgreSQL、Redis四个容器一起拉起来端口是2358。# 1. 克隆仓库 git clone https://gitcode.com/GitHub_Trending/ju/judge0 cd judge0做完这步你应该能看到根目录下的docker-compose.yml和judge0.conf。# 2. 配置两个必填项都没有默认值留空服务起不来 sed -i s/^REDIS_PASSWORD/REDIS_PASSWORDyour_redis_pw/ judge0.conf sed -i s/^POSTGRES_PASSWORD/POSTGRES_PASSWORDyour_db_pw/ judge0.conf# 3. 启动全部服务 docker-compose up -d做完这步运行docker-compose ps你应该看到 server、worker、db、redis 四个容器都是 running 状态。# 4. 验证API是否就绪 curl http://localhost:2358/languages返回一大段JSON语言列表说明Judge0代码执行服务已经跑起来了。不想自建的话官方提供RapidAPI上的托管云服务Judge0 CE / Extra CE注册拿API key即可调用本地改源码开发则用docker-compose.dev.yml生产部署细节看 CHANGELOG.md 里的 Deployment 章节。第一个API请求怎么发提交代码拿执行结果链路很简单POST/submissions提交 → 拿到token→ GET/submissions/{token}查结果。# 提交一段Python 3代码language_id 109 curl -X POST http://localhost:2358/submissions \ -H Content-Type: application/json \ -d { source_code: print(f\hello, {input()}\), language_id: 109, stdin: Judge0 } # 响应里只返回 token: 64b4d5d422d56246e613d670a13d349b# 用token查询执行结果 curl http://localhost:2358/submissions/64b4d5d422d56246e613d670a13d349b返回里最关键的字段是status.id1排队中、2处理中、3执行成功Accepted还有编译错误、超时、段错误等细分状态。我们的例子执行完应该是status.id: 3stdout为hello, Judge0。不想轮询的话提交时直接带?waittrueAPI会同步等结果一次性返回见 app/controllers/submissions_controller.rb 里的check_wait逻辑。别踩这几个坑最高频的5个报错容器起不来 / 反复重启→judge0.conf里REDIS_PASSWORD和POSTGRES_PASSWORD是必填项注释里写着 NO DEFAULT! MUST BE SET! → 按上文第2步用 sed 填上密码后docker-compose up -d。提交后状态永远停在 In Queuestatus.id1→ 没有Worker在消费Redis队列 →docker-compose logs worker | tail -20看日志容器没起来就单独docker-compose up -d worker。GET结果返回400 cannot be converted to UTF-8→ 程序输出含非UTF-8字节默认返回会把内容base64编码客户端解码方式不对 → 查询时显式带上?base64_encodedtrue自己解码。批量提交返回503 queue is full→ 队列深度超过MAX_QUEUE_SIZE默认值100 → 在judge0.conf中设MAX_QUEUE_SIZE500后docker-compose up -d重启。开了认证后所有请求403→ 设置了AUTHN_TOKEN但请求没带认证头 → 每个请求都要带上AUTHN_HEADER默认X-Auth-Token和对应的AUTHN_TOKEN值。往生产走认证、资源限制、反向代理API认证生产环境必做。在judge0.conf设置AUTHN_HEADERX-Auth-Token AUTHN_TOKEN一串随机长字符串资源限制每个提交默认CPU_TIME_LIMIT5秒、MEMORY_LIMIT128000KBMAX_*系列是客户端可自定义的上限。按你的业务调整默认值对大多数场景够用。反向代理 备份server { listen 80; server_name judge0.example.com; location / { proxy_pass http://localhost:2358; # ...其余配置省略 } }数据库备份一条命令搞定docker-compose exec db pg_dump -U judge0 judge0 backup.sql库名、用户取自judge0.conf默认值POSTGRES_DBjudge0、POSTGRES_USERjudge0。完整配置项CORS白名单、IP黑白名单、回调重试等都在 judge0.conf 的注释里API细节见 docs/api/docs.md。收尾Judge0把安全执行不可信代码这件事压缩成一次HTTP调用。下一步把第一个请求的language_id换成你项目的语言接上AI生成的代码跑通你的执行管线。【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考