写在前面
Hydro是什么
Hydro是一个社区活跃、现代化的OJ平台,仓库在github.com/hydro-dev/Hydro。
- 官方Demo:hydro.ac
- 我的Demo:oj.patrickyao.top
你需要自建OJ吗?
自建OJ通常可以拿来自己和朋友们分享题目,也可以作为机构的内部训练。如果你只是一个OIer,想刷题提升,那么就不需要自建OJ,可以去洛谷、AtCoder等各种平台训练。
Hydro需要服务器吗?
一般来说需要,此教程在VPS上做演示,当然你也可以在内网的服务器上部署。
部署环境
部署需要满足以下条件:
- CPU:至少1核(更好的CPU可以带来更好的编译效果)
- RAM:至少2G(2G官方说可以供100人同时使用,当然也是越多越好)
- 系统:很重要! Hydro官方不支持RHEL及其衍生系(CentOS/RockyLinux和部分国产linux),所以需要选择Deb系或者Alpine Linux,本教程在Debian 13上演示
- 预装环境:最好是纯净的预装任何服务器环境的,如果你已经安装过其他软件如1Panel、宝塔等,那么就需要注意后续步骤,有所不同
这里推荐雨云VPS,经测评很适合OJ的性能,还有无限8折,欢迎使用!
开始安装
先再次确认你的系统版本:
bash
cat /etc/os-release
Debian、Ubuntu、Alpine都可以,CentOS RockyLinux TencentOS OpenCloudOS等官方均不再支持
运行脚本
Hydro的安装方式特别简单,只需要运行:
bash
sudo -i
LANG=zh . <(curl https://hydro.ac/setup.sh)
程序会自动开始下载并安装。
但是如果像前面说的,你有了HTTP服务器,那么需要:
bash
LANG=zh . <(curl https://hydro.ac/setup.sh) --no-caddy


出现 Hydro 安装成功!的字样,说明安装成功了!
测试安装是否正常
如果你是纯环境用户:
bash
lsof -i:80
确认这条命令有输出,然后直接浏览器访问即可。
如果你是预装过服务器用户:
bash
lsof -i:8888
正常后还需要按下面配置代理。
配置代理(仅预装过服务器用户)
Hydro默认跑在了8888端口,接下去安装不同的服务器配置。
由于Hydro需要WebSocket支持,所以配置中有WebSocket的Upgrade支持。
官方文档:
若您使用 Nginx,请注意配置 WebSocket 协议的反向代理,否则会导致评测状态无法自动刷新,在线 IDE 无法正常使用等问题。
同时,如果你需要HTTPS,请自行修改相关配置。
Nginx/Openresty
nginx
server {
listen 80 ;
server_name <replace this>;
location ^~ / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
}
}
Apache
apache
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
<VirtualHost *:80>
ServerName <replace this>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:8888/
ProxyPassReverse / http://127.0.0.1:8888/
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Forwarded-Port expr=%{SERVER_PORT}
ProxyPass / ws://127.0.0.1:8888/ upgrade=websocket
Header set X-Cache "%{CACHE_STATUS}e" env=!CACHE_STATUS
</VirtualHost>
Caddy
以下配置是来自官方的
nginx
hydro.ac {
log {
output file /data/access.log {
roll_size 1gb
roll_keep_for 72h
}
format json
}
root * /root/.hydro/static
@static {
file {
try_files {path}
}
}
handle @static {
file_server
}
handle {
reverse_proxy http://127.0.0.1:8888
}
}
1Panel
参考以下配置:

创建管理用户
首先,在右上角注册一个用户:

这里虽然有"发送验证邮件",但默认并不会执行。

填写:

按需修改:

然后在终端执行:
nginx
hydrooj cli user setSuperAdmin 2

恭喜你,部署好了!(什么,遇到问题了?欢迎联系QQ 3821661994)
更多功能
修改配置
点击右上方的"控制面板",进入后点击"系统设置",按需填写:

创建题目
先进入到菜单中的"题库":

创建题目有两种方法:
手动创建
进入到"创建题目"模式:

你可以安装需求填写,填写后会跳转到一个新的界面。
接下来需要准备测试数据,将你的所有测试数据(比如 1.in 1.out 2.in 2.out ...)打包成zip文件并上传到界面即可。

默认是测试数据平均分配分数,比如这里4组数据,满分100分,每个数据25分。当然你可以详细配置,点击那个笔的标志即可。
导入
Hydro支持从FPS文件(兼容HustOJ)和Hydro官方题库导入。这里就不赘述了,FPS文件可以从TK题库下载,Hydro直接导入即可。
可以导入后继续配置题目信息,比如更改题面等等。
更多的编程语言
默认Hydro只有python c++ pascal的编译/解释器,其他语言虽然在列表里列出了,但是实际上并不能用,你可以在系统设置里的 hydrooj.langs禁用掉不需要的语言(看一下前面的 __hint__)。但是最好不要直接删掉。
如果你需要其他语言的支持,可以安装对应的包(以下对应来自官方):
bash
nix-env -iA nixpkgs.coreutils nixpkgs.bash nixpkgs.gawk nixpkgs.unzip # 基础组件,已预装,不建议删除
nix-env -iA nixpkgs.gcc nixpkgs.fpc # C/C++ 和 Pascal,已预装,不建议删除
nix-env -iA nixpkgs.ghc # Haskell
nix-env -iA nixpkgs.rustc # Rust
nix-env -iA nixpkgs.python3Minimal
nix-env -iA nixpkgs.python3Packages.numpy
nix-env -iA nixpkgs.pypy3
nix-env -iA nixpkgs.php
nix-env -iA nixpkgs.go # Golang
nix-env -iA nixpkgs.nodejs
nix-env -iA nixpkgs.openjdk_headless # Java
nix-env -iA nixpkgs.ruby
nix-env -iA nixpkgs.mono # C#
nix-env -iA nixpkgs.julia_17-bin # Julia
nix-env -iA nixpkgs.iverilog # Verilog