HydroOJ 从入门到入土(4)控制面板-系统设置详解
控制面板内众多配置项眼花缭乱, 至于说明文档...这个真没有!
这里的配置有很多, 如果装了插件, 有一些插件的配置项也是在这里修改, 所以很有必要了解一下这些选项都是干什么的.
SMTP 设置
smtp.user / SMTP 用户名: 这里填邮箱用户名, 如 udf@hydro.ac
smtp.pass / SMTP 密码: 填好保存之后, 如果没有修改, 会显示 未更改
smtp.host / SMTP 服务器地址: 一般是 smtp.xxx.xx.com, 如果使用 qq / 163 等服务商, 参考各家对应的配置.
如果是申请的免费的自定义域名邮箱, 比如阿里云的企业邮箱(阿里云免费企业邮箱申请链接(新)(2023.12 可用)), 腾讯云的企业邮箱(免费注册企业邮箱(不需要审核但需要使用企业微信)), 则按照邮箱提供商(如阿里云和腾讯云)给出的 smtp 配置说明来配置
部分邮箱的 smtp 设置:
邮箱名 | smtp host | 备注 |
---|---|---|
qq 邮箱 | smtp.qq.com | 注意授权码 |
163 邮箱 | smtp.163.com | 注意授权码 |
126 邮箱 | smtp.126.com | 注意授权码 |
阿里云自定义域名邮箱 | smtp.qiye.aliyun.com | |
腾讯云自定义域名邮箱 | smtp.exmail.qq.com |
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
首页 / 主页设置:
-
注意缩进和空格, 很严格, 不会 yaml 的话小心照着写
-
上下是有顺序的
-
width 是版块宽度, 总宽 12, 可以自己调整分配
-
这里边的版块只要出现了, 就会显示在外边, 不论是 true 还是 false. 所以如果不想让他出现, 要么直接删掉, 要么前边加
#
注释掉, 比如# hitokoto: false
而不是hitokoto: false
. -
里边的每一个大类, 都对应一个模版 HTML 文件, 存放在
/templates/partials/homepage/
文件夹中, 如果需要写一些需要自定义显示的插件, 可以在这里定义好类名称之后, 去插件里边新建一个同名 HTML 文件.如:
sidebar_nav:
对应/templates/partials/homepage/sidebar_nav.html
的模版文件此类首页公告板插件的选项、信息配置也基本都在这里.
-
下附名称对照
- 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 / 评测机运行进程数: 同时评测的任务数,跟 cpu 核数一样的话效率比较高。安装脚本自己配好这个值了(简称自适应),一般不需要改。
singleTaskParallelism: 跟上一个不同,这个选项负责同一道题内同时评测几个点。
parallelism: ${Math.max(1, Math.floor(cpus().length / 4))}
singleTaskParallelism:2
rate / (?): 让评测机性能变强 rate 倍. 功能是让评测机运行后返回的时间结果除以 rate, 也就是t/=rate
, 这样可以让评测机"变快"rate倍, 虽然有点自欺欺人, 但确实能让性能较低的服务器的评测结果符合某些比赛的时限要求, 能节约大量的服务器成本! 填个 2 就可以打爆洛谷评测机了
rerun / 每个提交最多重测 TLE 测试点的次数: 一般不用. 不过如果服务器评测时间不是很稳定,可以把这个选项调为2或者3, 可以有效避免 cpu 波动带来的评测失败.
原理: "如果时限是5s以下并且返回值是TLE就重测, 在源码里面重测次数是一个和单次提交相关的全局变量, 也就是说假设设置为 2 的话,有 10 个点,那么第一个点重测两次 TLE 就会把次数用完,之后的就不会重测了." (感谢@criyle, 相关源码地址)
disable / 禁用内置评测机: 如果配置了独立评测机, 就可以把内置的禁用掉.
strict_memory / 严格内存限制: 默认使用cgroup2
. 注意, 如果Linux内核版本不到5.19, 则会因为没有内存计量而并不精确, 需要配置 cgroup v1
.
可以使用uname -r
查看内核版本号. 常见的ubuntu2204是cgroup2和5.15内核.
开启 cgroup v1
可以参考官方文档: 内存计量不准确
env / Sandbox Env: 沙箱环境变量. 如果用 nix 装了其他 Python 包, 这里需要添加相应的环境
secret: 评测机secret
detail: 勾选显示测试点错误详情
个人信息
Enable lsp support (paid): 代码补全服务, 找群主付钱
YBTBAS RemoteJudge (free): 一本通启蒙篇远程评测, 免费, 注意看使用说明