# 快速部署
前提:已经在上一步准备好docker与docker-compose
# 一、单机部署
选择好需要安装的位置,运行下面命令
git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
1进入文件夹,使用docker-compose启动各容器服务
cd standAlone
1standAlone
文件夹文件有以下:├── docker-compose.yml ├── .env
1
2主要配置请修改
.env
文件,内容如下:注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network
# redis的配置 REDIS_HOST=172.20.0.2 REDIS_PORT=6379 REDIS_PASSWORD=hoj123456 # mysql的配置 MYSQL_HOST=172.20.0.3 MYSQL_PUBLIC_HOST=172.20.0.3 # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip MYSQL_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 JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥 JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新 JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥 EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip EMAIL_SERVER_PORT=465 EMAIL_USERNMAE=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= # judgeserver的配置 JUDGE_SERVER_IP=172.20.0.7 JUDGE_SERVER_PORT=8088 JUDGE_SERVER_NAME=judger-alone # 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如果不改动,则以默认参数启动
docker-compose up -d
1根据网速情况,大约十到二十分钟拉取镜像,全程无需人工干预,拉取完毕后,自动启动容器服务,大概需要一至两分钟的初始化。
等待命令执行完毕后,查看容器状态
docker ps -a
1当看到所有的容器的状态status都为
UP
或healthy
就代表 OJ 已经启动成功。以下默认参数说明
- 默认超级管理员账号与密码:root / hoj123456
- 默认redis密码:hoj123456
- 默认mysql账号与密码:root / hoj123456
- 默认nacos管理员账号与密码:root / hoj123456
- 默认不开启https,开启需修改文件同时提供证书文件
- 判题并发数默认:cpu核心数*2
- 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!
- vj判题并发数默认:cpu核心数*4
登录root账号到后台查看服务状态以及到http://ip/admin/conf
修改服务配置!
注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。
(如果已经在启动在.env文件配置了邮件服务即不用再次修改)
Host: smtp.qq.com
Port: 465
Username: qq邮箱账号
Password: 开启SMTP服务后生成的随机授权码
2
3
4
# 二、分布式部署
选择好需要安装的位置,运行下面命令
git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy
1进入文件夹
cd distributed
1distributed
文件夹有以下:├── judgeserver ├── main
1
2首先部署主服务,即是数据后台服务(DataBackup)
cd main
1该文件夹下有:
├── docker-compose.yml ├── .env
1
2修改
.env
文件中的配置vim .env
1注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network
# redis的配置 REDIS_HOST=172.20.0.2 REDIS_PORT=6379 REDIS_PASSWORD=hoj123456 # mysql的配置 MYSQL_HOST=172.20.0.3 MYSQL_PUBLIC_HOST=172.20.0.3 # 请提供当前mysql所在服务器的公网ip MYSQL_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 JWT_TOKEN_SECRET=default # token加密秘钥 默认则生成32位随机密钥 JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新 JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥 EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip EMAIL_SERVER_PORT=465 EMAIL_USERNMAE=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= # 评测数据同步的配置 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配置修改保存后,当前路径下启动该服务
docker-compose up -d
1根据网速情况,大约十分钟即可安装完毕,全程无需人工干预。
等待命令执行完毕后,查看容器状态
docker ps -a
1当看到所有的容器的状态status都为
UP
或healthy
就代表 OJ 已经启动成功。接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入
judgeserver
文件夹,修改.env
的配置# nacos的配置 NACOS_HOST=NACOS_HOST # 修改为nacos所在服务的ip,即主服务器的公网ip NACOS_PORT=8848 # 修改为nacos启动端口号,默认为8848 NACOS_USERNAME=root # 修改为nacos的管理员账号 NACOS_PASSWORD=hoj123456 # 修改为nacos的管理员密码 # judgeserver的配置 JUDGE_SERVER_IP=172.20.0.7 # 修改为当前的服务器公网ip JUDGE_SERVER_PORT=8088 # judgeserver启动端口号 JUDGE_SERVER_NAME=judger-1 MAX_TASK_NUM=-1 # -1表示最大并行任务数为cpu核心数*2 REMOTE_JUDGE_OPEN=true # 当前判题服务器是否开启远程虚拟判题功能 REMOTE_JUDGE_MAX_TASK_NUM=-1 # -1表示最大并行任务数为(cpu核心数*2)*2 # rsync评测数据同步的配置 RSYNC_MASTER_ADDR=127.0.0.1 # 写入主服务器ip RSYNC_PASSWORD=hoj123456 # 与主服务器的rsync密码一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17配置修改保存后,当前路径下启动该服务
docker-compose up -d
1提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。
两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。
# 三、开启Https
单机部署:
提供server.crt和server.key证书与密钥文件放置
/standAlone
目录下,与docker-compose.yml
和.env
文件放置同一位置,然后修改docker-compose.yml
中的hoj-frontend的配置分布式部署:
提供server.crt和server.key证书与密钥文件放置
/distributed/main目录下,与
docker-compose.yml和
.env文件放置同一位置,然后修改
docker-compose.yml`中的hoj-frontend的配置
hoj-frontend:
image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_frontend
container_name: hoj-frontend
restart: always
# 开启https,请提供证书
volumes:
- ./server.crt:/etc/nginx/etc/crt/server.crt
- ./server.key:/etc/nginx/etc/crt/server.key
# 修改前端logo
# - ./logo.a0924d7d.png:/usr/share/nginx/html/assets/img/logo.a0924d7d.png
# - ./backstage.8bce8c6e.png:/usr/share/nginx/html/assets/img/backstage.8bce8c6e.png
environment:
- SERVER_NAME=localhost # 提供你的域名!!!!
- BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址
- BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号
- USE_HTTPS=true # 使用https请设置为true
ports:
- "80:80"
- "443:443"
networks:
hoj-network:
ipv4_address: 172.20.0.6
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 四、更新最新版本
请在对应的docker-compose.yml当前文件夹下执行docker-compose pull
拉取最新镜像,然后重新docker-compose up -d
即可。