当前位置: 首页 > news >正文

多语言代码执行沙盒 judge0 部署

多语言代码执行沙盒 judge0 部署

    • 部署
      • 安装 Ubuntu 22.04
      • 安装 judge0
    • 测试
      • judge0 IDE 部署

judge0 是一套开源、高性能、安全沙箱化的在线代码执行系统,专为安全执行不受信任的代码设计,提供标准 RESTful API 供外部应用调用。有两个版本可选,分别是 CE 和 CE Extra,最大的区别是支持的语言个数不同,截止 2026.04.10,CE 支持 46 种,CE Extra 额外支持 20 种,具体变动可参见 Supported Languages。

CE 支持:

#Name
1Assembly (NASM 2.14.02)
2Bash (5.0.0)
3Basic (FBC 1.07.1)
4C (Clang 7.0.1)
5C (GCC 7.4.0)
6C (GCC 8.3.0)
7C (GCC 9.2.0)
8C# (Mono 6.6.0.161)
9C++ (Clang 7.0.1)
10C++ (GCC 7.4.0)
11C++ (GCC 8.3.0)
12C++ (GCC 9.2.0)
13Clojure (1.10.1)
14COBOL (GnuCOBOL 2.2)
15Common Lisp (SBCL 2.0.0)
16D (DMD 2.089.1)
17Elixir (1.9.4)
18Erlang (OTP 22.2)
19Executable
20F# (.NET Core SDK 3.1.202)
21Fortran (GFortran 9.2.0)
22Go (1.13.5)
23Groovy (3.0.3)
24Haskell (GHC 8.8.1)
25Java (OpenJDK 13.0.1)
26JavaScript (Node.js 12.14.0)
27Kotlin (1.3.70)
28Lua (5.3.5)
29Objective-C (Clang 7.0.1)
30OCaml (4.09.0)
31Octave (5.1.0)
32Pascal (FPC 3.0.4)
33Perl (5.28.1)
34PHP (7.4.1)
35Plain Text
36Prolog (GNU Prolog 1.4.5)
37Python (2.7.17)
38Python (3.8.1)
39R (4.0.0)
40Ruby (2.7.0)
41Rust (1.40.0)
42Scala (2.13.2)
43SQL (SQLite 3.27.2)
44Swift (5.2.3)
45TypeScript (3.7.4)
46Visual Basic.Net (vbnc 0.0.0.5943)

Extra CE 额外支持:

#Name
1Bosque (latest)
2C (Clang 10.0.1)
3C (Clang 9.0.1)
4C# (.NET Core SDK 3.1.302)
5C# (Mono 6.10.0.104)
6C# Test (.NET Core SDK 3.1.302, NUnit 3.12.0)
7C++ (Clang 10.0.1)
8C++ (Clang 9.0.1)
9C++ Test (Clang 10.0.1, Google Test 1.8.1)
10C++ Test (GCC 8.4.0, Google Test 1.8.1)
11C3 (latest)
12F# (.NET Core SDK 3.1.302)
13Java (OpenJDK 14.0.1)
14Java Test (OpenJDK 14.0.1, JUnit Platform Console Standalone 1.6.2)
15MPI (OpenRTE 3.1.3) with C (GCC 8.4.0)
16MPI (OpenRTE 3.1.3) with C++ (GCC 8.4.0)
17MPI (OpenRTE 3.1.3) with Python (3.7.7)
18Nim (stable)
19Python for ML (3.7.7)
20Visual Basic.Net (vbnc 0.0.0.5943)

部署

judge0 的隔离机制依赖于 cgroup v1 版本,官方推荐使用 Ubuntu 22.04,如果使用 cgroup v2 版本可能遇到以下类似的问题:

Failed to create control group /sys/fs/cgroup/memory/box-3/: No such file or directory chown: cannot access '/box': No such file or directory

安装 Ubuntu 22.04

我是用的 Vmware 安装的 ubuntu-22.04.5-desktop-amd64.iso。

sudo vi /etc/default/grubGRUB_CMDLINE_LINUX变量后添加systemd.unified_cgroup_hierarchy=0

sudo update-grub应用上面的修改。

sudo reboot重启。

安装 docker,查看这个文档 Ubuntu | Docker Docs。

配置 docker 命令不加 sudo:

sudo usermod -aG docker $USER newgrp docker

安装 git:

sudo apt install git

安装 judge0

当前最新版本为 v1.13.1,下载并解压

wgethttps://github.com/judge0/judge0/releases/download/v1.13.1/judge0-v1.13.1.zipunzipjudge0-v1.13.1.zipcdjudge0-v1.13.1

解压后只有两个文件:docker-compose.yml、judge0.conf。以下是 docker-compose.yml 的内容,注意 server 和 workers 是以特权模式privileged: true启动的,因为只有特权模式才能访问 cgroup。

x-logging:&default-logginglogging:driver:json-fileoptions:max-size:100Mservices:server:image:judge0/judge0:1.13.1volumes:-./judge0.conf:/judge0.conf:roports:-"2358:2358"privileged:true<<:*default-loggingrestart:alwaysworkers:image:judge0/judge0:1.13.1command:["./scripts/workers"]volumes:-./judge0.conf:/judge0.conf:roprivileged:true<<:*default-loggingrestart:alwaysdb:image:postgres:16.2env_file:judge0.confvolumes:-data:/var/lib/postgresql/data/<<:*default-loggingrestart:alwaysredis:image:redis:7.2.4command:["bash","-c",'docker-entrypoint.sh --appendonly no --requirepass "$$REDIS_PASSWORD"']env_file:judge0.conf<<:*default-loggingrestart:alwaysvolumes:data:

修改 judge0.conf 文件中的以下两个密码:

REDIS_PASSWORD=fHZLCYnhxAMtK4AdsnYDSU3jmEPrksfL POSTGRES_PASSWORD=ESZL6nSDkL7Fddru2zRpV8D8VhQ8wmxD

先启动 postgres 和 redis,再启动 judge0 server、worker:

dockercompose up-ddb redissleep10sdockercompose up-dsleep5s

测试

启动后可访问http://localhost:2358/docs查看接口文档,看到如下图所示则启动成功:

可通过 curl、postman 等工具测试接口的效果。但更方便、可视化的方式是使用 judge0/ide。

judge0 IDE 部署

judge0/ide 是一个在线代码编辑器,只有前端代码,若要执行代码需要与 judge0 CE 或 judge0 CE Extra 配套使用。

下载源码:

gitclone https://github.com/judge0/ide.gitcdide

修改js/ide.js中的AUTHENTICATED_CE_BASE_URLAUTHENTICATED_EXTRA_CE_BASE_URLUNAUTHENTICATED_EXTRA_CE_BASE_URLUNAUTHENTICATED_CE_BASE_URL变量值为http://localhost:2358

使用 python 启动 ide 项目:

zbs@zbs-pc:~/Desktop/judge0-v1.13.1/ide$ python3-mhttp.server Serving HTTP on0.0.0.0 port8000(http://0.0.0.0:8000/)...

访问http://localhost:8000,下拉框可以切换语言:

执行 java 代码测试,右侧输出正常代表部署成功:

publicclassMain{publicstaticvoidmain(String[]args){System.out.println("hello judge0");}}

http://www.jsqmd.com/news/620920/

相关文章:

  • 2025届学术党必备的六大降重复率工具实测分析
  • 2026移动广告联盟TOP3盘点:APP想接入广告/APP流量变现/SDK变现/工具APP收益提升/开屏广告变现/选择指南 - 优质品牌商家
  • 【Verilog】从零开始:Verilog基础语法全解析
  • RLCBuffer:面向Arduino的运行长度压缩缓冲区库
  • LangChain教程-、Langchain基础仍
  • 20260410AI日报
  • 2026Q2成都标识标牌技术落地:四川标识标牌、四川高炮广告、成都高炮广告、成都标识标牌、高炮广告、标识标牌选择指南 - 优质品牌商家
  • 手把手教你用Arduino驱动Goertek SPL06-007气压传感器(附完整代码与PCB布局避坑指南)
  • Python+scikit-fuzzy实战:5分钟搞定电机速度模糊控制(附完整代码)
  • .NET 诊断技巧 | 日志框架原理、手写日志框架学习略
  • Go语言中的命令行工具开发:从flag到cobra
  • 2026大师级小提琴品牌排行:实木小提琴、成人小提琴、收藏小提琴、欧料小提琴、油性漆小提琴、演奏独奏小提琴、纯手工小提琴选择指南 - 优质品牌商家
  • easyExcel动态行样式定制:从单行到多行的灵活控制
  • ESP32/ESP8266 LED点阵圣诞图标库:PxMatrix资源集成方案
  • lil_tea c++ style guide游
  • PxMatrix高性能RGB点阵驱动库技术解析
  • 乙巳马年春联生成终端生产环境部署:Nginx反向代理+HTTPS安全加固
  • ServoDAC:全软件定义的闭环RC数模转换器
  • VL53L0X ToF测距模块Arduino驱动库详解
  • leetcode No.76 | 滑动窗口与HashMap的应用
  • 微软研究院发现:让AI大模型变得更聪明却不消耗更多内存的方法
  • 从虚拟机到云服务器:我的Ansible学习环境搭建全记录(Ubuntu 22.04 + PPA源)
  • Claude Opus 4.6差评如潮!思考深度暴跌67%,AMD总监6852次日志打脸
  • 从零开始:将.NET 8 WebAPI无缝迁移至Docker的最佳实践
  • Qt入门基础
  • GxEPD2电子墨水驱动库深度解析:e-Paper嵌入式开发实战指南
  • 基于Python的智慧养老中心管理系统毕业设计
  • 模拟型对讲系统市场洞察:2026-2032年复合增长率(CAGR)为3.9%
  • ESP32驱动NIDEC 24H电机控制器全栈方案
  • LwRB:嵌入式轻量级环形缓冲区原理与DMA零拷贝实践