生产中运行¶
由于 ZJUI-Learn 源代码是公开的,因此可以在您自己的基础设施上运行 ZJUI-Learn。运行 ZJUI-Learn 服务器的单个实例可能适合数十或数百个用户,许多大学已经成功地做到了这一点。
本文档不涵盖生产使用的重要信息,例如数据库备份或高可用性。
使用 Docker 在生产环境中运行¶
ZJUI-Learn 还可以在 Docker 容器中以生产模式运行 使用 Docker Compose。
入门¶
按照步骤原生安装 ZJUI-Learn,包括安装依赖项。然后,您可以运行 NODE_ENV=production make start 并从端口 3000 访问 ZJUI-Learn。
配置¶
ZJUI-Learn 可以通过存储库根目录中的 config.json 进行配置。您还可以在启动服务器时提供配置文件的路径:
NODE_ENV=production node apps/prairielearn/dist/server.js --config /path/to/config.json
config.json 文件应包含 lib/config.ts 中键的适当覆盖。至少,您可能需要更新各种 postgres* 选项以将其指向您的数据库。
处理未知的 SSH 主机¶
ZJUI-Learn 使用 SSH 进行所有 Git 操作 - 包括课程同步 (clone/fetch/push)、编辑器提交以及从远程存储库创建课程。如果主机不在 known_hosts 中,则与新 Git 主机的连接可能会失败,并出现“主机密钥验证失败”错误。要自动接受新主机的主机密钥,请在 config.json 中设置 gitSshCommand:
{
"gitSshCommand": "ssh -o StrictHostKeyChecking=accept-new"
}
这会在第一次连接时接受主机密钥并保存它们,但如果先前看到的主机密钥发生更改,仍然会拒绝连接。如果您需要指定自定义 SSH 密钥并接受新主机,请组合选项:
{
"gitSshCommand": "ssh -i /path/to/key -o StrictHostKeyChecking=accept-new"
}
反向代理¶
反向代理可以使用 Apache 或 NGINX 之类的东西来实现。
在 config.json 中配置您的域添加:
{
"serverCanonicalHost": "https://yourdomain"
}
验证¶
更多内容请参阅认证文档。
管理员用户¶
您需要成为 管理员用户 才能设置 ZJUI-Learn。
生产化¶
您可能需要在绑定到您自己的域或子域的 ZJUI-Learn 前面有一个负载均衡器。您可以通过config.json中的serverCanonicalHost配置域。如果您的负载均衡器支持运行状况检查,您可以将其指向 /pl/webhooks/ping。如果 ZJUI-Learn 服务器运行状况良好,则该路由将响应 200。
运行 ZJUI-Learn 服务器的单个实例可能适合数十或数百个用户。但是,对于需要数百或数千个并发用户的用例,您可能希望水平扩展 ZJUI-Learn。如果您运行多个服务器,则需要提供 Redis 集群 并使用 config.json 中的 redisUrl 配置对其的访问。您还可以启用对块的支持来部署不需要访问磁盘上的课程 Git 存储库的服务器;请参阅 lib/chunks.ts 以了解其工作原理以及如何配置它。
如果您想使用外部评分者 或工作区,您需要提供适当的基础设施和配置来支持它们。您可能希望在独立的机器组上运行 grader 主机 和 工作区主机,这些机器可以自动扩展以处理突发流量,并且可以自动替换不健康的主机。
升级中¶
部署新版本 ZJUI-Learn 的推荐方法是关闭所有正在运行的服务器,运行任何挂起的数据库迁移,然后再次启动服务器。
零停机部署是可能的(我们在 prairielearn.com 上进行),但它们需要专门的工具、基础设施和操作专业知识,因此目前尚未得到官方支持。
支持¶
由于自托管安装的自定义性质以及在生产中操作复杂软件的困难,我们不提供有关部署、操作或扩展自托管安装的任何具体建议或指导。在 prairielearn.com,我们为成千上万使用我们托管产品的教师和学生提供最有效的服务,一旦您的自托管安装成为一种负担而不是一种乐趣,我们很乐意与您合作。