快速部署


# 快速部署

前提:已经在上一步准备好docker与docker-compose

Warning

注意:如果正式部署运用HOJ,请修改默认配置的密码,例如Redis、MySQL、Nacos的密码!!!
使用默认密码可能会导致数据泄露,网站极其不安全!

如果当前服务器系统为CentOS7请先看:centos7部署HOJ可能遇到的问题

# 一、单机部署

  1. 选择好需要安装的位置,运行下面命令

    git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
    
    1
  2. 进入文件夹,使用docker-compose启动各容器服务

    cd standAlone
    
    1

    standAlone文件夹文件有以下:

    ├── docker-compose.yml
    ├── .env
    
    1
    2

    主要配置请修改.env文件,一般请修改Redis、MySQL、Nacos的默认密码即可,内容如下:

    注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network

    # hoj全部数据存储的文件夹位置(默认当前路径生成hoj文件夹)
    HOJ_DATA_DIRECTORY=./hoj
    
    # redis的配置
    REDIS_HOST=172.20.0.2
    REDIS_PORT=6379
    REDIS_PASSWORD=hoj123456
    
    # mysql的配置
    MYSQL_HOST=172.20.0.3
    # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip
    MYSQL_PUBLIC_HOST=172.20.0.3
    MYSQL_PUBLIC_PORT=3306
    MYSQL_ROOT_PASSWORD=hoj123456
    
    # nacos的配置
    NACOS_HOST=172.20.0.4
    NACOS_PORT=8848
    NACOS_USERNAME=root
    NACOS_PASSWORD=hoj123456
    
    # backend后端服务的配置
    BACKEND_HOST=172.20.0.5
    BACKEND_PORT=6688
    # token加密秘钥 默认则生成32位随机密钥
    JWT_TOKEN_SECRET=default
    # token过期时间默认为24小时 86400s
    JWT_TOKEN_EXPIRE=86400
    # token默认12小时可自动刷新
    JWT_TOKEN_FRESH_EXPIRE=43200
    # 调用判题服务器的token 默认则生成32位随机密钥
    JUDGE_TOKEN=default
    # 请使用邮件服务的域名或ip
    EMAIL_SERVER_HOST=smtp.qq.com
    EMAIL_SERVER_PORT=465
    EMAIL_USERNAME=your_email_username
    EMAIL_PASSWORD=your_email_password
    # 开启虚拟判题请提供对应oj的账号密码 格式为 
    # username1,username2,...
    # password1,password2,...
    HDU_ACCOUNT_USERNAME_LIST=
    HDU_ACCOUNT_PASSWORD_LIST=
    CF_ACCOUNT_USERNAME_LIST=
    CF_ACCOUNT_PASSWORD_LIST=
    POJ_ACCOUNT_USERNAME_LIST=
    POJ_ACCOUNT_PASSWORD_LIST=
    ATCODER_ACCOUNT_USERNAME_LIST=
    ATCODER_ACCOUNT_PASSWORD_LIST=
    SPOJ_ACCOUNT_USERNAME_LIST=
    SPOJ_ACCOUNT_PASSWORD_LIST=
    # 是否强制使用上面配置的账号覆盖系统原有的账号列表
    FORCED_UPDATE_REMOTE_JUDGE_ACCOUNT=false
    
    # judgeserver的配置
    JUDGE_SERVER_IP=172.20.0.7
    JUDGE_SERVER_PORT=8088
    JUDGE_SERVER_NAME=judger-alone
    # -1表示可接收最大判题任务数为cpu核心数+1
    MAX_TASK_NUM=-1
    # 当前判题服务器是否开启远程虚拟判题功能
    REMOTE_JUDGE_OPEN=true
    # -1表示可接收最大远程判题任务数为cpu核心数*2+1
    REMOTE_JUDGE_MAX_TASK_NUM=-1
    # 默认沙盒并行判题程序数为cpu核心数
    PARALLEL_TASK=default
    
    # docker network的配置
    SUBNET=172.20.0.0/16
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68

Tips

提示:如果服务器的内存在4G或4G以上,请去掉JVM限制才能大大提高并发量,操作如下:

vim docker-compose.yml
1

注释或去掉图中选中的行

① hoj-backend模块

在这里插入图片描述

② hoj-judgeserver模块

在这里插入图片描述

如果不改动,则以默认参数启动(测试可以不改,但正式部署请修改默认配置的密码!

docker-compose up -d
1

根据网速情况,大约十到二十分钟拉取镜像,全程无需人工干预,拉取完毕后,自动启动容器服务,大概需要一至两分钟的初始化。

等待命令执行完毕后,查看容器状态

docker ps -a
1

当看到所有的容器的状态status都为UPhealthy就代表 OJ 已经启动成功。

以下默认参数说明

Note

  • 默认超级管理员账号与密码:root / hoj123456

  • 默认redis密码:hoj123456(正式部署请修改

  • 默认mysql账号与密码:root / hoj123456(正式部署请修改

  • 默认nacos管理员账号与密码:root / hoj123456(正式部署请修改

  • 默认不开启https,开启需修改文件同时提供证书文件

  • 判题并发数默认:cpu核心数+1

  • 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!

  • vj判题并发数默认:cpu核心数*2+1

登录root账号到后台查看服务状态以及到http://ip/admin/conf修改服务配置!

注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。

(如果已经在启动在.env文件配置了邮件服务即不用再次修改)

Host: smtp.qq.com
Port: 465
Username: qq邮箱账号
Password: 开启SMTP服务后生成的随机授权码
1
2
3
4

# 二、分布式部署

Tips

主服务器(运行nacos,backend, frontend,redis)的服务器防火墙请开 8848,3306,873端口号
从服务器(运行judgeserver)的服务器防火墙请开8088端口号

  1. 选择好需要安装的位置,运行下面命令

    git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
    
    1
  2. 进入文件夹

    cd distributed
    
    1

    distributed文件夹有以下:

    ├── judgeserver
    ├── main
    
    1
    2
  3. 首先部署主服务,即是数据后台服务(DataBackup)

    cd main
    
    1

    该文件夹下有:

    ├── docker-compose.yml
    ├── .env
    
    1
    2

    修改.env文件中的配置,一般请修改Redis、MySQL、Nacos的默认密码和RSYNC_PASSWORD即可。

    vim .env
    
    1

    注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network

    # hoj全部数据存储的文件夹位置(默认当前路径生成hoj文件夹)
    HOJ_DATA_DIRECTORY=./hoj
    
    # redis的配置
    REDIS_HOST=172.20.0.2
    REDIS_PORT=6379
    REDIS_PASSWORD=hoj123456
    
    # mysql的配置
    MYSQL_HOST=172.20.0.3
    # 请提供当前mysql所在服务器的公网ip
    MYSQL_PUBLIC_HOST=172.20.0.3
    MYSQL_PUBLIC_PORT=3306
    MYSQL_ROOT_PASSWORD=hoj123456
    
    # nacos的配置
    NACOS_HOST=172.20.0.4
    NACOS_PORT=8848
    NACOS_USERNAME=root
    NACOS_PASSWORD=hoj123456
    
    # backend后端服务的配置
    BACKEND_HOST=172.20.0.5
    BACKEND_PORT=6688
    # token加密秘钥 默认则生成32位随机密钥
    JWT_TOKEN_SECRET=default
    # token过期时间默认为24小时 86400s
    JWT_TOKEN_EXPIRE=86400
    # token默认12小时可自动刷新
    JWT_TOKEN_FRESH_EXPIRE=43200
    # 调用判题服务器的token 默认则生成32位随机密钥
    JUDGE_TOKEN=default
    # 请使用邮件服务的域名或ip
    EMAIL_SERVER_HOST=smtp.qq.com
    EMAIL_SERVER_PORT=465
    EMAIL_USERNAME=your_email_username
    EMAIL_PASSWORD=your_email_password
    # 开启虚拟判题请提供对应oj的账号密码 格式为 
    # username1,username2,...
    # password1,password2,...
    HDU_ACCOUNT_USERNAME_LIST=username1,username2
    HDU_ACCOUNT_PASSWORD_LIST=password1,password2
    CF_ACCOUNT_USERNAME_LIST=
    CF_ACCOUNT_PASSWORD_LIST=
    POJ_ACCOUNT_USERNAME_LIST=
    POJ_ACCOUNT_PASSWORD_LIST=
    ATCODER_ACCOUNT_USERNAME_LIST=
    ATCODER_ACCOUNT_PASSWORD_LIST=
    SPOJ_ACCOUNT_USERNAME_LIST=
    SPOJ_ACCOUNT_PASSWORD_LIST=
    # 是否强制使用上面配置的账号覆盖系统原有的账号列表
    FORCED_UPDATE_REMOTE_JUDGE_ACCOUNT=false
    
    # 评测数据同步的配置
    # 请修改数据同步密码
    RSYNC_PASSWORD=hoj123456
    
    # docker network的配置
    SUBNET=172.20.0.0/16
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59

    配置修改保存后,当前路径下启动该服务

    docker-compose up -d
    
    1

    根据网速情况,大约十分钟即可安装完毕,全程无需人工干预。

    等待命令执行完毕后,查看容器状态

    docker ps -a
    
    1

    当看到所有的容器的状态status都为UPhealthy就代表 OJ 已经启动成功。

  4. 接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入judgeserver文件夹,修改.env的配置,将NACOS_HOSTNACOS_PORTNACOS_USERNAMENACOS_PASSWORDRSYNC_MASTER_ADDRRSYNC_PASSWORD按照提示修改,然后JUDGE_SERVER_IP改成当前判题机器的公网ip。

    # hoj全部数据存储的文件夹位置(默认当前路径生成judge文件夹)
    HOJ_JUDGESERVER_DATA_DIRECTORY=./judge
    
    # nacos的配置
    # 修改为nacos所在服务的ip
    NACOS_HOST=NACOS_HOST
    # 修改为nacos启动端口号,默认为8848
    NACOS_PORT=8848
    # 修改为nacos的管理员账号
    NACOS_USERNAME=root
    # 修改为nacos的管理员密码
    NACOS_PASSWORD=hoj123456
    
    # judgeserver的配置
    #修改服务器公网ip
    JUDGE_SERVER_IP=172.20.0.7
    JUDGE_SERVER_PORT=8088
    JUDGE_SERVER_NAME=judger-1
    # -1表示可接收最大判题任务数为cpu核心数+1
    MAX_TASK_NUM=-1
    # 当前判题服务器是否开启远程虚拟判题功能
    REMOTE_JUDGE_OPEN=true
    # -1表示可接收最大远程判题任务数为cpu核心数*2+1
    REMOTE_JUDGE_MAX_TASK_NUM=-1
    # 默认沙盒并行判题程序数为cpu核心数
    PARALLEL_TASK=default
    
    # rsync评测数据同步的配置
    # 写入主服务器ip
    RSYNC_MASTER_ADDR=127.0.0.1
    # 与主服务器的rsync密码一致
    RSYNC_PASSWORD=hoj123456
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    配置修改保存后,当前路径下启动该服务

    docker-compose up -d
    
    1

    Tips

    提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。

  5. 两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。

Last update: July 23, 2022 00:44
Contributors: Himit_ZH