HOJ项目部署(前后端及其判题机)

news2024/10/5 19:17:31

文章目录

  • HOJ项目部署
    • 1 项目准备
      • 1.1 拉取HOJ项目到本地
      • 1.2 项目包结构解读
    • 2 后端部署DataBackup
      • 2.1 环境准备
        • 1)项目基本数据导入
        • 2)Nacos环境配置
      • 2.2 修改配置
        • 1)修改application-prod.yml
        • 2)修改bootstrap.yml
        • 3)修改上传文件路径
      • 2.3 启动环境
        • 1)检查Redis、Nacos是否启动
        • 2)启动服务器
    • 3 前端部署hoj-vue
      • 3.1 环境准备
        • 1)下载Node.js
        • 2)配置环境变量
        • 3)验证是否安装成功
      • 3.2 启动项目
    • 4 部署GoJudge判题机
      • 4.1 安装yum
      • 4.2 安装GoLang环境配置环境变量
      • 4.3 安装Docker
      • 4.4 安装git命令
      • 4.5 拉取GoJudge代码到云服务器
        • 4.6 根据Dockerfile拉取了gojudge镜像(不需要)
      • 4.7 根据镜像创建容器
      • 4.8 进入容器内安装编译环境
    • 5 部署JudgeServer
    • 6 将JudegeServer部署在云服务器
      • 6.1 安装JDK
        • 6.1.1 下载JDK
        • 6.1.2 配置环境变量
      • 6.2 将JudegeServe打成Jar包,上传到云服务器

HOJ项目部署

采用的是后端DataBackup和JudgeServer和前端在本地部署,判题机GoJudge在云服务器部署

1 项目准备

1.1 拉取HOJ项目到本地

项目拉取地址:

https://gitee.com/himitzh0730/hoj.git

1.2 项目包结构解读

在这里插入图片描述

包结构解读:

  • hoj-springboot包为项目后端
    在这里插入图片描述

    • api包为项目所需pojo
    • DataBackup包为后端业务
    • JudgeServer包为判题业务
  • hoj-vue包为项目前端Vue

  • sandbox包为沙箱判题机,使用的是go-judge

  • sqlAndsetting包为数据库文件和nacos配置文件

2 后端部署DataBackup

2.1 环境准备

1)项目基本数据导入

在这里插入图片描述

2)Nacos环境配置

运行nacos.sql文件创建好naos数据库后,在数据库的users表中修改nacos的用户名和密码,由于nacos密码为加密后的密码,下面给出字符串“nacos”的加密后对应的字符串

 $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcCCJ1KH-1681295296802)(assets/image-20230412163038104.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfWx2pVO-1681295296802)(assets/image-20230412163425293.png)]

修改nacos的配置文件,在conf文件夹内的application.properties里解开对应行的注释

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQPEg6ew-1681295296803)(assets/image-20230412163318078.png)]

配置完成后访问点击Console连接,按住Ctrl可以点击进去,账号密码均为nacos。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bVy12K3-1681295296803)(assets/image-20230412163438892.png)]

出现以上内容为配置成功

2.2 修改配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nP9qUEyK-1681295296803)(assets/image-20230412163614808.png)]

1)修改application-prod.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzJHVHnE-1681295296803)(assets/image-20230412164632481.png)]

修改application-prod.yml中的judge-token。将nacos中的judge-token配置copy到application-prod.yml中,否则会自动生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCzkohOU-1681295296804)(assets/image-20230412164816502.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttH9Spc2-1681295296804)(assets/image-20230412164706494.png)]

2)修改bootstrap.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vtd8namk-1681295296804)(assets/image-20230412165116843.png)]

3)修改上传文件路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ny5LW0eM-1681295296804)(assets/image-20230412171327266.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eX6Q4iQ6-1681295296805)(assets/image-20230412171340222.png)]

不修改会出现上传题目错误

2.3 启动环境

1)检查Redis、Nacos是否启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KZFSss1-1681295296805)(assets/image-20230412165313887.png)]

2)启动服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5A0KUWO-1681295296805)(assets/image-20230412165247256.png)]

出现以下信息为启动成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V7tX35X4-1681295296805)(assets/image-20230412165431404.png)]

3 前端部署hoj-vue

3.1 环境准备

1)下载Node.js

https://nodejs.org/zh-cn/download/

2)配置环境变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raPxDl2N-1681295296806)(assets/image-20230412165815587.png)]

3)验证是否安装成功

查看node.js版本

node -v

3.2 启动项目

1)npm项目依赖组件安装

cmd进入前端vue项目的根目录(hoj/hoj-vue),输入命令

cnpm install

会根据前端项目的依赖关系下载好相关的组件,存在项目目录的node_modules文件夹下。

注意:一般git库会gitignore依赖组件,没有node_modules文件夹,这个文件夹太大,一般不push

2)npm项目编译

第一次启动需要编译,后续再启动,只需要进行第三步启动项目

cmd进入前端vue项目的根目录(hoj/hoj-vue),输入命令

npm run build

此时会对根目录下的package.json对build命令的定义进行编译,一般"build" = “webpack -p”。

3)启动项目:

cmd进入前端vue项目的根目录(hoj/hoj-vue),输入命令

npm run serve

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVgFg3VG-1681295296806)(assets/image-20230412170534833.png)]

出现以上内容,为启动成功

4 部署GoJudge判题机

注意使用校园网的话,Xshell会连不上的云服务器的,校园网屏蔽了一系列端口,包括20端口。
使用校园网可以将20端口改成别的。使用宝塔或VNC连接没问题

4.1 安装yum

sudo apt-get update
sudo apt-get install yum

4.2 安装GoLang环境配置环境变量

cd /usr/local/
#下载安装包
wget https://studygolang.com/dl/golang/go1.14.1.linux-amd64.tar.gz
#解压安装包
tar -zxvf go1.14.1.linux-amd64.tar.gz
#建立工作目录
mkdir -p /home/go/bin /home/go/pkg /home/go/src
配置环境变量:
#打开配置
vi /etc/profile
 
#在最下面添加
export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
 
#保存退出
:wq
 
#配置生效
source /etc/profile

#查看Go版本
go version

#查看配置
go env

4.3 安装Docker

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

4.4 安装git命令

sudo apt-get install git
sudo apt-get update

4.5 拉取GoJudge代码到云服务器

git clone https://github.com/criyle/go-judge.git

4.6 根据Dockerfile拉取了gojudge镜像(不需要)

docker build -f ./Dockerfile.exec -t go-Judge

4.7 根据镜像创建容器

docker run -d -it --rm --privileged --shm-size=256m -p 5050:5050 -p 5051:5051 criyle/executorserver -enable-grpc

查看进程是否存在

netstat -anp | grep 5050
netstat -anp | grep 5051

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9P2lrUc-1681295296806)(assets/image-20230412173223903.png)]

4.8 进入容器内安装编译环境

查看容器名

docker ps

进入容器

docker exec -it [容器名] /bin/bash

容器内安装gcc/g++ 编译环境

# 更新安装 apt
apt-get update
apt update
apt install gcc
apt install g++

5 部署JudgeServer

修改SandBoxRun中的SANBOX_BASE_URL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NaSyzz4-1681295296806)(assets/image-20230412181902610.png)]

修改后可以进行判题。可以上传个题目,自测测一下C++编译环境。或者利用Postman进行测试

6 将JudegeServer部署在云服务器

把JudgeServer部署在本地会出现一系列问题:
题目上传到本地testcase文件夹里 而判题要在服务器里读testcase里的测试数据,路径不一致。
解决方案就是:将JudgeServer和GoJudge都部署在云服务器

6.1 安装JDK

6.1.1 下载JDK

sudo apt install openjdk-8-jre-headless
sudo apt install openjdk-8-jdk-headless

输入:java,javac 检验是否安装成功

6.1.2 配置环境变量

vim /etc/profile

进入后在文件末尾添加以下内容

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

source /etc/profile

重新加载配置文件

6.2 将JudegeServe打成Jar包,上传到云服务器

1)使用Maven工具进行打包,打包前进行clean,后点击package
打包过程中会出现

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.0.5:
repackage (default) on project hoj-judgeServer:
Execution default of goal
org.springframework.boot:spring-boot-maven-plugin:3.0.5:
repackage failed: Unable to load the mojo 'repackage' 
in the plugin 'org.springframework.boot:spring-boot-maven-plugin:3.0.5' due to an API incompatibility: 
org.codehaus.plexus.component.repository.exception.ComponentLookupException: 
org/springframework/boot/maven/RepackageMojo has been compiled by
a more recent version of the Java Runtime (class file version 61.0), 
this version of the Java Runtime only recognizes class file versions up to 52.0

这样一个错误,原因是:在spring-boot-maven-plugin:3.0.0-M1这个版本中没有goal这个api了
所以在pom.xml中添加spring-boot-maven-plugin的版本号即可

<version>2.3.3.RELEASE</version>

2)在需要部署判题服务的云服务器上创建文件夹来存储jar包和沙盒文件,同时还要判题过程中需要的文件夹

# 存放jar包与安全判题沙盒的目录
mkdir -p /hoj/server
# 存放用户提交的源代码
mkdir -p /hoj/run
# 存放题目的特殊判题源代码
mkdir -p /hoj/spj
# 判题过程中的日志文件夹
mkdir -p /hoj/log
# 存放题目的测试数据
mkdir -p /hoj/testcase

将打好的jar包放在/hoj/server
使用宝塔Java项目一键部署工具进行部署

自定义参数 --server.port=8088的前面要添加一个空格
要不然系统以为我们要运行的文件是xxx.jar–server.port=xxx 而不是 xxx.jar
(我们运行jar会执行java-jar xxx.jar --server.port=xxxx)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【模板特性补充】

目录&#xff1a;前言一、非类型模板参数使用方法使用场景二、模板特化&#xff08;一&#xff09;函数模板特化&#xff08;二&#xff09;类模板特化1.全特化2.偏特化使用场景三、模板分离编译1. 什么是分离编译2.模板的分离编译3.解决方法四、模板总结前言 打怪升级&#x…

你知道多少接口性能优化的方案?

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c; 二、接口优化方案总结 1.批处理 批量思想&#xff1a;批量操作数据库&#xff0c;这个很好理解&#xff0c;我们在循环插入场景的接口中&#xff0c;可以在批处理执行完成后一次性插入或更新数据库…

Springboot的自动注入

一、开篇 在平时的开发过程中用的最多的莫属springboot了&#xff0c;都知道springboot中有自动注入的功能&#xff0c;在面试过程中也会问到自动注入&#xff0c;你知道自动注入是怎么回事吗&#xff0c;springboot是如何做到自动注入的&#xff0c;自动注入背后的原理是什么&…

基于 RocketMQ Connect 构建数据流转处理平台

作者&#xff1a;周波&#xff0c;阿里云智能高级开发工程师&#xff0c; Apache RocketMQ Committer 01 从问题中来的 RocketMQ Connect 在电商系统、金融系统及物流系统&#xff0c;我们经常可以看到 RocketMQ 的身影。原因不难理解&#xff0c;随着数字化转型范围的扩大及…

Linux学习笔记——多线程

文章目录补充知识Linux线程概念线程的优点线程的缺点线程异常线程用途多进程的应用场景Linux进程VS线程重新理解进程进程和线程线程共享的进程资源和环境为什么线程切换的成本更低进程和线程的关系Linux线程控制POSIX线程库创建线程线程ID及进程地址空间布局线程终止线程等待线…

pycharm常用的插件

pycharm等IDE 无法编辑bat文件 Chinese Language Pack 汉化插件 vim CodeGlance 右侧地图 将类似于Sublime中的代码小地图嵌入到编辑器窗格中。使用自定义颜色进行语法高亮&#xff0c;同时使用明暗主题。 Rainbow Brackets&#xff08;必备推荐&#xff09;收费了 这个插件…

【数据库原理 • 六】数据库备份与恢复

前言 数据库技术是计算机科学技术中发展最快&#xff0c;应用最广的技术之一&#xff0c;它是专门研究如何科学的组织和存储数据&#xff0c;如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进&#xff0c;最常用的技术。 当前…

Baumer工业相机堡盟工业相机中预处理相机的特性优势以及行业应用

Baumer工业相机堡盟工业相机如何通过BGAPISDK里显示彩色相机和黑白相机的图像&#xff08;C#&#xff09;Baumer工业相机Baumer工业相机的预处理相机的技术背景Baumer工业相机中预处理相机的特性Baumer工业相机中图像压缩相机的特性Baumer工业相机中3D激光相机的特性Baumer工业…

ESP32设备驱动-MAX30102脉搏血氧饱和度和心率监测传感器驱动

MAX30102脉搏血氧饱和度和心率监测传感器驱动 文章目录 MAX30102脉搏血氧饱和度和心率监测传感器驱动1、MAX30102介绍2、硬件准备3、软件准备4、驱动实现1、MAX30102介绍 MAX30102是一款集成脉搏血氧饱和度和心率监测生物传感器模块。 它包括内部 LED、光电探测器、光学元件和…

网页滚动体验,IScroll滚动插件,你安装了类似的滚动页面插件吗

IScroll是一款基于JavaScript的插件&#xff0c;用于在网页中实现平滑滚动效果。 这个插件可以帮助用户创建回到页面顶部和底部的按钮、生成页面导航快照&#xff0c;以及设置滚动时间等功能&#xff0c;从而提升网页的用户体验。 IScroll的特点在于&#xff0c;它能够平滑地…

【15】数据操作reshape、张量的运算

1. N维数组 ① 机器学习用的最多的是N维数组&#xff0c;N维数组是机器学习和神经网络的主要数据结构。 2. 创建数组 ① 创建数组需要&#xff1a;形状、数据类型、元素值。 3. 访问元素 ① 可以根据切片&#xff0c;或者间隔步长访问元素。 ② [::3,::2]是每隔3行、2列访问…

考研数据结构--线性表

线性表 文章目录线性表概述线性表的特点线性表的基本操作线性表的顺序表示概述优缺点操作顺序表的定义顺序表的初始化顺序表的插入顺序表的删除顺序表的查找顺序表的输出顺序表的判空顺序表的销毁main方法测试线性表的链式表示概述优缺点单链表操作单链表的定义单链表的初始化单…

自动化面试题3

1、PLC输入输出如何接线&#xff0c;源性漏型如何看&#xff1f; 所谓“源型输入”&#xff0c;是指电流从模块的公共端流入&#xff0c;从模块的输入通道流出的接线方式。源型输入的公共端作为电源正极&#xff08;共阳极&#xff09;。源型输入可以等效为在输入模块外部连接…

C# | 上位机开发新手指南(九)加密算法——RSA

上位机开发新手指南&#xff08;九&#xff09;加密算法——RSA 文章目录上位机开发新手指南&#xff08;九&#xff09;加密算法——RSA前言RSA的特性非对称性安全性可逆性签名速度较慢密钥管理RSA算法的参数公钥公钥指数e模数n私钥私钥指数d模数n质数p和qdp和dqqInv质数填充方…

性能测试,python 内存分析工具 -memray

Memray是一个由彭博社开发的、开源内存剖析器&#xff1b;开源一个多月&#xff0c;已经收获了超8.4k的star&#xff0c;是名副其实的明星项目。今天我们就给大家来推荐这款python内存分析神器。 Memray可以跟踪python代码、本机扩展模块和python解释器本身中内存分配&#xf…

yolov5-v7.0实例分割快速体验

简介 &#x1f680;yolov5-v7.0版本正式发布&#xff0c;本次更新的v7.0则是全面的大版本升级&#xff0c;最主要的功能就是全面集成支持了实例分割&#xff0c;yolov5已经集成检测、分类、分割任务。 前面几篇文章已经介绍过关于Yolov5的一些方面 yolov5目标检测:https://bl…

[计算机图形学]几何:曲线和曲面(前瞻预习/复习回顾)

一、曲线 1.Bzier Curves—贝塞尔曲线 贝塞尔曲线也是一种显式的几何表示方法。贝塞尔曲线定义了一系列的控制点&#xff0c;致使确定满足这些控制点关系的唯一一条曲线&#xff1a;如上图定义的贝塞尔曲线满足 起始点为p0&#xff0c;结束点为p3&#xff0c;起始点的切线方向…

ABB机械臂和RobotStudio编程简介

ABB机械臂和RobotStudio编程简介机械臂ABB机械臂ABB示教器RobotStudio与编程简介RobotStudio简介与安装RobotStudio使用RAPID程序指令机械臂 一种能够进行编程并在自动控制下执行某些操作和 移动作业任务的机械装置。 —— 美国国家标准局(NSB) 一种用于移动各种材料、零部件、…

基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

家政服务小程序实战开发教程017-我的页面未注册功能开发

顾客在家政服务小程序可以在线提交预约信息&#xff0c;预约成功后可以查看订单的进度。我们本篇就来实现一下我的页面的功能。 1 新建页面 进入编辑器&#xff0c;在组件页面区域点击号&#xff0c;创建我的页面 2 未登录页面开发 我的页面的逻辑是如果用户未注册&#…