HydroOJ 从入门到入土(4)控制面板-系统设置详解

发布时间 2023-12-07 13:39:57作者: Bowen404

控制面板内众多配置项眼花缭乱, 至于说明文档...这个真没有!

这里的配置有很多, 如果装了插件, 有一些插件的配置项也是在这里修改, 所以很有必要了解一下这些选项都是干什么的.

SMTP 设置

smtp.user / SMTP 用户名: 这里填邮箱用户名, 如 udf@hydro.ac

smtp.pass / SMTP 密码: 填好保存之后, 如果没有修改, 会显示 未更改

smtp.host / SMTP 服务器地址: 一般是 smtp.xxx.xx.com, 可以填 qq 的, 163 的, 也可以申请免费的自定义域名的, 比如阿里云的企业邮箱(阿里云免费企业邮箱申请链接(新)(2023.12 可用)), 腾讯云的企业邮箱(免费注册企业邮箱(不需要审核但需要使用企业微信))

smtp.port / SMTP 服务器端口: 一般开了下边的 SSL 的话, 就是465

smtp.from / 发件人: 可以自定义显示名称, 如 HydroOJ<udf@hydro.ac>, 别人收到邮件就会显示是 HydroOJ 发送的邮件.

smtp.secure / SSL: 发信开启 SSL, 一般都要求开

smtp.verify / 注册需邮件验证: 很多学生没有邮箱, 此项可以关闭, 但是点注册依然会出现邮箱页面, 需要让学生按邮箱格式随便填写一个邮箱, 再点验证就好.

服务器设置

server.name / Server Name: 站名

server.name / Server Name (Global Display): 全局站名, 会显示在网页 title 上, 以及帮助和服务条款等各种地方.

server.url / Server BaseURL: 填写网站域名, 末尾加/. 对外发邮件, 对内使用相对路径都会用到.

server.upload / Max upload file size: 最大上传(单个)文件大小

server.cdn / CDN 路径前缀: 不懂不要瞎改, 可能会导致 UI 崩掉. 不慎改坏的话, 可以进服务器用命令行改回来:

hydrooj cli system set server.cdn /  # 注意不要漏了这个/
pm2 restart hydrooj # 重启hydrooj

另外, cdn 配置需要在云服务商的控制台里配置 referer白名单和cors域名, 一般在 cdn安全里.

server.ws / WebSocket Prefix: WebSocket 相关, 不明觉厉.

server.port / Server Port: 服务实际运行端口, 注意, 这个不要和其他的冲突, 不然服务无法启动, 以及, 改了这个需要在 Caddyfile 中进行同步修改. 不慎改坏的话, 可以进服务器用命令行改回来:

hydrooj cli system set server.port 8888
pm2 restart hydrooj

server.xff / IP Header: 不明觉厉.

server.xhost / Hostname Header: 不明觉厉.

server.xproxy / Use reverse_proxy: 不明觉厉.

server.cors / CORS domains: 跨域相关, 不明觉厉.

server.language / 默认显示语言: 默认改简体中文之后, 用户注册好之后的偏好设置依然会默认英文, 不注意直接保存会界面全变英文.

server.login / 启用内置登录: 危险!!! 如果点掉就关掉了全站登录功能, 包括管理员! 不慎启用的话, 可以进服务器用命令行改回来:

hydrooj cli system set server.login true
pm2 restart hydrooj # 重启hydrooj

server.message / 允许用户使用私信: 还有一个私信的开关在 控制面板->用户权限 里边, PRIV_SEND_MESSAGE.

server.checkUpdate / 每日自动检查更新: 不会自动更新, 只会检查, 有更新会以站内私信的形式发送给管理员, 前提是没有关闭私信开关.

server.ignoreUA / ignoredUA: 忽略一些搜索爬虫的访问

preference.codeLang / 默认代码语言: 全站默认, 除非用户自己设置了偏好语言.

setting_limits 各种保护性限制

limit.by_user / Use per-user limits instead of per ip limits: 限制用户而非 IP

limit.problem_files_max / 单题最大文件数量: 题目附件, 如图片/pdf 等, 不包括数据点数量. 如需修改测试点数量, 需要去下边改. 本页面ctrl+f 搜索 testcases_max.

limit.problem_files_max_size / 单题最大总文件大小: 单位是字节, 默认 268435456 (256MB)

limit.user_files / 单用户最大文件数量: 开通文件权限的话要注意

limit.user_files_size / 单用户最大总文件大小: 开通文件权限的话要注意

limit.contest_files / Max files for contest or training: 比赛 / (作业?) / 训练能保存的最大文件数

limit.contest_files_size / Max total file size for contest or training: 比赛 / (作业?) / 训练能保存的文件的最大总大小

limit.submission / 每分钟提交数量限制: 全站提交数限制(包括所有域), 如果需要举办比赛, 此项需要改大.

limit.submission_user / Max submission count per user per minute: 每个用户提交数限制, 含自测和递交.

注意, 在线编程模式下, 自测间隔(5s)和提交间隔(8s)是写死的, 每次都会有的固定间隔.

limit.pretest / 每分钟自测数量限制: 全站自测数限制(包括所有域), 如果需要举办比赛, 此项需要改大.


以上 3 个提交和自测的限制, 适用于所有提交模式(在线编程模式, 递交模式, api / 远程评测等等)

基础设置

avatar.gravatar_url / Gravatar地址前缀: 注意, Gravatar 国内无法访问, 可以设置为 //dn-qiniu-avatar.qbox.me/avatar/

discussion.nodes / 讨论节点: 相当于论坛版块, 改完之后要在“管理域”选项卡中点击“初始化讨论节点”按钮初始化讨论节点, 才可以开启论坛。

problem.categories / 题目标签: 选题和建题的时候都会用到, 比如:

语法基础: ['顺序', '选择', '循环', '函数', '数组', '字符数组&字符串', '结构体']

前边的 语法基础是一级标签, 会直接显示在侧边栏中; 后边的 [...]的部分是二级标签, 鼠标指到一级标签上会弹出来.

如果题目中用到了一个二级标签, 那么会自动加上他所属的一级标签.

不在这个清单中的标签, 不受题库列表中的 显示/隐藏标签 的功能限制, 会一直显示.

pagination.problem / 每页展示的题目数量: 少点加载会快, 但如果需要下载大量题目, 可以直接改到超过题目数量的数, 比如 10000, 然后全选下载.

pagination.contest / 每页展示的比赛数量: 酌情修改

pagination.discussion / 每页展示的讨论数量: 酌情修改

pagination.record / 每页展示的评测记录数量: 酌情修改

pagination.solution / 每页展示的题解数量: 酌情修改

pagination.training / 每页展示的训练数量: 酌情修改

pagination.reply / 每页展示的回复数量: 酌情修改

Session 设置

session.saved_expire_seconds / 保存的会话的过期秒数: 如果在登录页点了 记住我, 保持登录的时间, 默认为 2592000 (30 天).

session.unsaved_expire_seconds / 未保存的会话的过期秒数: 如果在登录页没勾选 记住我, 保持登录的时间, 默认为 10800 (3 小时).


如果需要同一时间只能同一客户端登录账号, 可以看这里: P16 如何限制同一账号多端登录?

hydrooj

首页 / 主页设置:

  1. 注意缩进和空格, 很严格, 不会 yaml 的话小心照着写

  2. 上下是有顺序的

  3. width 是版块宽度, 总宽 12, 可以自己调整分配

  4. 这里边的版块只要出现了, 就会显示在外边, 不论是 true 还是 false. 所以如果不想让他出现, 要么直接删掉, 要么前边加 # 注释掉, 比如 # hitokoto: false 而不是 hitokoto: false.

  5. 里边的每一个大类, 都对应一个模版 HTML 文件, 存放在 /templates/partials/homepage/ 文件夹中, 如果需要写一些需要自定义显示的插件, 可以在这里定义好类名称之后, 去插件里边新建一个同名 HTML 文件.

    如: sidebar_nav: 对应 /templates/partials/homepage/sidebar_nav.html的模版文件

    此类首页公告板插件的选项、信息配置也基本都在这里.

  6. 下附名称对照

- width: 9  # 左侧版块, 宽度为 9 
  bulletin: true  # 公告板, 在编辑域资料中修改内容
  contest: 1  # 比赛, 保留最新 1 条
  homework: 10  # 作业, 仅能看到自己的最新 10 条
  training: 10  # 训练, 最新 10 条
  ranking: 20  # 排名, 最新 20 条
  discussion: 20  # 讨论, 最新 20 条
- width: 3  # 右侧导航版块, 宽度为 3 
  homework: 1  # 右边也可以放作业, 其他同理
  countdown:  # 如果装了倒计时插件, 大概这么配置
    title: 咕咕倒计时
    max_dates: 3  # 只显示最近 3 条
    dates:
      - name: 放寒假
        date: 2024-02-02
      - name: NOIP 2023
        date: 2023-11-18  # 过期的不会显示
  # hitokoto: false  # 不要的话要注释掉或者删掉, 改 false 没用
  # starred_problems: 50  # 收藏的问题
  # recent_problems: 10  # 本域最新更新的题目
  # discussion_nodes: true  # 讨论节点
  # suggestion: true  # 推荐

语言 / 编程语言设置:

HydroOJ 使用 nix 来解决沙箱的安全问题, 如果需要新增编程语言, 需要使用 nix, 不能直接 apt install. Python, 也不能直接 pip, 如果需要安装什么包, 不如直接手动挪到相应的Python 环境里.

具体参考官方文档: 编译器

如果需要安装 GCC 9.3.0 跟 CCF 保持一致, 参考 这里这里, 但是不要装gcc-unwrapped, 就装gcc, 否则会报错 Compile Error /nix/.../ld: cannot find crtl.o: No such file or directory.

实在不会去群里问.

ui-default

footer_extra_html / Footer Extra HTML: 用来放备案信息和一些统计代码什么的.

注意, 如果备案信息放不下, 可以写个插件把底部左侧的 legacy 选项去掉, 地方就够了. legacy 相关代码在 /templates/partials/footer.html 里边的 60-66 行.

nav_logo_dark / 左上角小图标(暗): 不要被这个名称迷惑, 没错, 这个就是整站左上角的 logo!

修改参见官方文档: 如何修改网站图标? (favicon)

preload: 不明觉厉

关于: 注意修改网址链接, 联系我们等, 上边设置的网站名称会自动填入到 {{ name }}中.

显示偏好

domainNavigation / Show Domain Navigation: 右上角用户名旁边的域导航, 不用可以关掉.

hydrojudge

sandbox_host / 沙箱地址: 如果评测机分离的话就改成自己的地址, 不需要内置评测机了, 可以勾选下边的 禁用内置评测机.

相关官方文档: 创建评测账号

tmp_dir / 临时目录: 如果磁盘占用过大, 可能需要手动清理

stdio_size / 标准输出/错误流输出大小限制: 默认 32m, 一般不用改

processLimit / Process Limit: 进程限制

testcases_max / 单题最多测试点数量: 测试点太多要改这里

total_time_limit / 单题最多总评测时长: 有的题数据量太大, 测评时间太长, 这个改大点, 单位是秒

memoryMax:

cache_dir / 测试数据缓存目录: 缓存30天, 实在没空间可以手动删 hydrojudge cache prune

parallelism / 评测机运行进程数: 安装脚本自己配好这个值了(简称自适应)

singleTaskParallelism: 安装脚本自己配好这个值了(简称自适应)

parallelism: ${Math.max(1, Math.floor(cpus().length / 4))}
singleTaskParallelism:2

rate / (?): 不明觉厉

rerun / 每个提交最多重测 TLE 测试点的次数: 一般不用

disable / 禁用内置评测机: 如果配置了独立评测机, 就可以把内置的禁用掉

strict_memory / 严格内存限制: 似乎需要配置 cgroup v1.

开启 cgroup v1 可以参考官方文档: 内存计量不准确

env / Sandbox Env: 沙箱环境变量. 如果用 nix 装了其他 Python 包, 这里需要添加相应的环境

secret: 评测暗号, 不明觉厉

detail: 勾选显示测试点错误详情

个人信息

Enable lsp support (paid): 代码补全服务, 找群主付钱

YBTBAS RemoteJudge (free): 一本通启蒙篇远程评测, 免费, 注意看使用说明