Hydro OJ部署完全指南!

写在前面

Hydro是什么

Hydro是一个社区活跃、现代化的OJ平台,仓库在github.com/hydro-dev/Hydro

你需要自建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
相关推荐
小政同学2 小时前
【NFS故障】共享的文件无法执行
linux·运维·服务器
不会写DN2 小时前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
服务器
AI木马人2 小时前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
挽安学长3 小时前
保姆级教程,通过GACCode使用Claude Code Desktop!
运维·服务器
firstacui4 小时前
MGRE实验
运维·服务器·网络
大卡片5 小时前
IO模型与并发服务器设计
运维·服务器·网络
莎士比亚的文学花园5 小时前
Linux驱动开发(1)——系统移植
linux·运维·服务器
PH = 75 小时前
OverlayFS联合文件系统使用示例
java·linux·服务器
志栋智能6 小时前
超自动化巡检:解锁运维数据的深层价值
运维·服务器·数据库·自动化