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

张开发
2026/4/21 23:56:48 15 分钟阅读

分享文章

多语言代码执行沙盒 judge0 部署
多语言代码执行沙盒 judge0 部署部署安装 Ubuntu 22.04安装 judge0测试judge0 IDE 部署judge0 是一套开源、高性能、安全沙箱化的在线代码执行系统专为安全执行不受信任的代码设计提供标准 RESTful API 供外部应用调用。有两个版本可选分别是 CE 和 CE Extra最大的区别是支持的语言个数不同截止 2026.04.10CE 支持 46 种CE Extra 额外支持 20 种具体变动可参见 Supported Languages。CE 支持#Name1Assembly (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)19Executable20F# (.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 Text36Prolog (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 额外支持#Name1Bosque (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/grub在GRUB_CMDLINE_LINUX变量后添加systemd.unified_cgroup_hierarchy0。sudo update-grub应用上面的修改。sudo reboot重启。安装 docker查看这个文档 Ubuntu | Docker Docs。配置 docker 命令不加 sudosudo usermod -aG docker $USER newgrp docker安装 gitsudo 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:2358privileged: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_PASSWORDfHZLCYnhxAMtK4AdsnYDSU3jmEPrksfL POSTGRES_PASSWORDESZL6nSDkL7Fddru2zRpV8D8VhQ8wmxD先启动 postgres 和 redis再启动 judge0 server、workerdockercompose 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_URL、AUTHENTICATED_EXTRA_CE_BASE_URL、UNAUTHENTICATED_EXTRA_CE_BASE_URL、UNAUTHENTICATED_CE_BASE_URL变量值为http://localhost:2358。使用 python 启动 ide 项目zbszbs-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);}}

更多文章