
trampgeek/jobeinabox!Docker Stars !Docker Pulls !Docker Automated !Docker Build
Moodle CodeRunner题目类型插件需要Jobe服务器来运行学生提交的作业。JobeInABox是一个Docker镜像,提供基础Jobe服务器,支持运行所有标准语言。有关Jobe服务器的完整信息,请参阅Jobe完整文档。
注意:出于安全和性能考虑,强烈建议即使在容器中运行Jobe,也应在专用独立服务器上部署。
有多种方式构建和运行JobeInABox容器,例如:
生产环境中,应使用本地时区构建自己的镜像。以下示例使用Docker:
从Github拉取此仓库,进入jobeinabox目录,执行以下格式的命令:
bashsudo docker build . -t my/jobeinabox --build-arg TZ="Europe/Amsterdam"
然后使用以下命令运行新构建的镜像:
bashsudo docker run -d -p 4000:80 --name jobe my/jobeinabox
这将在4000端口启动Jobe服务器,可本地测试并供Moodle使用,详见下文“使用JobeInABox”部分。
要运行预构建的Docker Hub镜像,只需执行:
bashsudo docker run -d -p 4000:80 --name jobe trampgeek/jobeinabox:latest
这将在4000端口启动Jobe服务器,可本地测试并供Moodle使用,详见下文“使用JobeInABox”部分。
默认情况下,Jobe最多同时运行8个作业。这通常适用于8核系统,但如果有更多核心,可能需要提高此数量。操作步骤如下:
通过以下命令在容器中执行shell:
bashdocker exec -it jobe bash
然后:
bashnano /var/www/html/jobe/app/Config/Jobe.php
找到以下行:
phppublic int $jobe_max_users = 8;
将值从8更改为机器的核心数,或如果主要运行I/O密集型作业,可设置更高值。
然后在容器内重新安装Jobe:
bashcd /var/www/html/jobe ./install --purge
可使用以下命令检查容器性能:
bashdocker exec -it jobe /var/www/html/jobe/testsubmit.py --perf
可通过--secret选项在镜像构建时提供API密钥。
密钥可存储在单独文件中,格式如下:
'c***-2289-4b76-ae29-bcea34997256' => 0, 'de7970e6-0466-4ce2-a6a4-c1a51363bd03' => 90
有关API密钥的更多信息,请参阅Jobe文档。
以下命令会将jobeinabox目录中名为api_keys的文件中的密钥自动添加到/var/www/html/jobe/app/Config/Jobe.php,并将$require_api_keys选项设置为true:
bashpodman build . -t my/jobeinabox --secret id=api_keys,src=api_keys
如果未提供API密钥,配置保持不变。
通过上述任一方法启动JobeInABox容器后,可通过访问以下URL检查其运行状态:
http://[运行Docker的主机]:4000/jobe/index.php/restapi/languages
应返回JSON格式的支持语言列表:
json[["c","7.3.0"],["cpp","7.3.0"],["java","10.0.2"],["nodejs","8.10.0"],["octave","4.2.2"],["pascal","3.0.4"],["php","7.2.7"],["python3","3.6.5"]]
要在容器内运行测试套件,使用:
bashsudo docker exec -t jobe /usr/bin/python3 /var/www/html/jobe/testsubmit.py
要将Moodle/CodeRunner插件配置为使用此Docker化Jobe服务器,在CodeRunner管理设置(站点管理 > 插件 > 题目类型 > CodeRunner)中,将Jobe服务器字段设置为:
[运行Docker的主机]:4000
不要以[***]
停止运行中的服务器:
bashsudo docker stop jobe
删除服务器容器:
bashsudo docker rm jobe
检查残留容器:
bashsudo docker ps -a
尽管运行Jobe的容器本身应是安全的,但容器网络目前桥接到主机网络。这意味着可从任何能访问主机的位置访问Jobe,且Jobe可访问主机能访问的任何URI。生产环境中必须对主机进行防火墙配置。
定期重建容器,确保运行最新的Jobe版本和安全更新。
2024年10月18日:
现在可使用Docker的“--secret”功能在构建时指定API密钥配置(感谢@theLogicJB)。
修复了关于更改Jobe服务器数量的文档错误。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务