跳转至

服务器配置

ZJUI-Learn 服务器的各种属性可以使用 config.json 文件进行配置。配置从多个位置加载并合并在一起,后面的文件中的值优先于前面的文件:

  1. ~/.config/prairielearn/config.json(用户的主目录 - 在 Docker 中运行时不适用)
  2. ./config.json(存储库根目录)
  3. ./apps/*/config.json(应用程序根目录)

例如,如果 ./config.json 设置 "courseDirs" 并且 ./apps/prairielearn/config.json 设置 "isEnterprise",则最终配置将包括这两个值。如果两个文件设置相同的属性,则将使用 ./apps/prairielearn/config.json 中的值。

该文件的结构为 JSON 字典,语法如下:

config.json
{
  "property1": "...",
  "property2": "...",
  "property3": "..."
}

完整的属性列表可以在 lib/config.ts 中找到。

设置课程目录

ZJUI-Learn 加载的默认课程目录可以用 "courseDirs" 设置覆盖。此设置采用位于_Docker 容器中_的要加载的路径列表。

config.json
{
  "courseDirs": ["exampleCourse", "testCourse", "/myCourse"]
}

Note

这些目录是容器中的路径,而不是本地计算机上的路径。

要在计算机上安装目录以便在容器中可以访问它,您可以将以下内容添加到 Docker 运行命令中:

-v /path/to/myCourse:/myCourse

然后,可以在 /myCourse 处访问该路径(注意开头的斜杠)。

在本地设置外部图像捕获

pl-image-capture 元素允许用户通过外部设备(例如移动设备或平板电脑或本地相机)捕获提交的作品的图像。

要在本地使用外部捕获,必须将 config.json 中的 serverCanonicalHost 设置为本地 IPv4 地址。

要检索您的本地 IPv4 地址(如果您已打开)

  • macOS:在终端中,运行 ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'
  • Linux:在终端中运行 ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
  • Windows:在命令提示符中,运行 ipconfig | findstr /C:"IPv4"

复制您看到的第一个地址,并将其粘贴到 config.json 文件的 serverCanonicalHost 属性中。

例如,如果您的 IPv4 是 192.168.1.60 并且 PL 在端口 3000 上运行,则您的文件应为:

config.json
{
  "serverCanonicalHost": "http://192.168.1.60:3000"
}

工作空间和外部评分员

您应该在 config.json 中设置工作区主机主目录根和主目录根。

config.json
{
  "workspaceHostHomeDirRoot": "/tmp/workspace",
  "workspaceHomeDirRoot": "/tmp/workspace"
}

在 macOS 上本地运行工作区/外部评分器

如果您在 macOS 上本机运行工作区,则可能需要将 "workspaceDevContainerHostname" 更改为“localhost”。

config.json
{
  "workspaceDevContainerHostname": "localhost"
}

某些映像会检测您是否以 root 身份运行,并在降级到用户 1001 (pl-gosu-helper.sh) 之前尝试将工作区文件 chown 给用户 1001。在 macOS 上,这将失败,因为无法 chown 绑定挂载(基于 FUSE 的文件系统)。要解决此问题,您可以在 config.json 中将 "workspaceJobsDirectoryOwnerUid""workspaceJobsDirectoryOwnerGid" 设置为 1001。

config.json
{
  "workspaceJobsDirectoryOwnerUid": 1001,
  "workspaceJobsDirectoryOwnerGid": 1001
}

许多容器只能以 UID 1001 或 0 身份运行。请确保您在本地以 root 身份运行!

sudo make dev-workspace-host
sudo make dev

如果您不执行这两个命令,您将看到如下错误:

chown: changing ownership of '/home/coder/workspace': Permission denied
chown: changing ownership of '/home/coder/workspace/fibonacci.py': Permission denied

测试本地 docker 镜像

在本地测试 docker images 时,您可能希望强制 ZJUI-Learn 使用本地版本的映像。

config.json
{
  "workspacePullImagesFromDockerHub": false,
  "externalGradingPullImagesFromDockerHub": false
}

企业

ZJUI-Learn的某些功能仅在企业版中提供。请注意,设置此选项时必须遵守 ZJUI-Learn 许可证

config.json
{
  "isEnterprise": true
}