首页 > 其他分享 >QDUOJ手动部署心得

QDUOJ手动部署心得

时间:2024-09-19 14:13:22浏览次数:1  
标签:compose postgres 手动 redis dev server QDUOJ docker 心得

手动QDUOJ部署

[更推荐官网一键部署,手动有失败率,但是能更深入理解部署过程]

目录

★标记的部分很重要

一、需求环境

Docker,Docker-compose,python=3.8[推荐]

# 查看版本
docker -v
docker-compose -v

环境配置[Ubuntu20.04,不推荐22原因:前端很多前置包22不支持]:

# 1.docker安装
# 卸载原有Docker并清除相关文件
sudo apt-get remove docker docker-engine
rm -fr /var/lib/docker/

# curl方式安装docker,如果第一条多次安装失败可尝试用国外脚本;两个有一个成功既可
sudo curl -sSL https://get.daocloud.io/docker | sh
sudo curl -sSL get.docker.com | sh

# 2.安装Docker-Compose,如果提示权限不够“root -i”模式下运行以下两条命令
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 如果上面指令一直下载速度为0,https://get.daocloud.io/docker/compose/releases进入官网,找到自己需要的版本自行改掉链接既可
chmod +x /usr/local/bin/docker-compose

# 如果运行docker失败,查看是否docker运行中,如果也运行了,请尝试一下命令
sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker    #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用

# 最后通过查看版本验证安装是否成功
docker -v
docker-compose -v

PS:附带另一种docker-compose安装:可采用pip install docker-compose安装在python下也是能用的

# 3.python推荐Anaconda虚拟环境的方式
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
bash Anaconda3-2023.03-Linux-x86_64.sh
# 安装过程回车,提示全部yes即可;成功后重启终端即可看到base环境了

conda create -n onlinejudge python=3.8
# conda或者pip慢自行添加加速源

# 切换环境,如果使用python/pip命令,注意是否在此环境下
conda activate onlinejudge

二、clone相关仓库

# 后端仓库
git clone https://github.com/QingdaoU/OnlineJudge.git
# 前端仓库
git clone https://github.com/QingdaoU/OnlineJudgeFE.git

三、后端部署

cd OnlineJudge

# 1.pip安装前置包
pip install --no-cache-dir -r deploy/requirements.txt
# pip如果psycopg2安装有问题大概率是缺少以下前置:
sudo apt-get install python3-dev
sudo apt-get install gcc

# 2.docker-compose挂载redis+postgres
# .dockerignore加入data_dev
# 添加redis-postgres.yml
vim redis-postgres.yml
# 添加内容如下面代码块内容★注意端口是否打开且未被占用

docker-compose -f redis-postgres.yml up -d

# 查看redis和postgres是否成功健康挂起
docker ps -a

# 3.后端迁移,初始化数据库并挂起
# 修改成你自己的TOKEN,不知道直接用下面命令也可以,与后面一致即可
export JUDGE_SERVER_TOKEN=TOKEN
echo `cat /dev/urandom | head -1 | md5sum | head -c 32` > data/config/secret.key
python manage.py migrate
python manage.py inituser --username root --password rootroot --action create_super_admin
python manage.py runserver

redis-postgres.yml:

# redis-postgres.yml
version: "3"
services:

  oj-redis:
    image: redis:4.0-alpine
    container_name: oj-redis
    restart: always
    volumes:
      - ./data_dev/redis:/data
# 暴露redis服务端口
    ports:
      - "0.0.0.0:6380:6379"

  oj-postgres:
    image: postgres:10-alpine
    container_name: oj-postgres
    restart: always
    volumes:
      - ./data_dev/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=onlinejudge
      - POSTGRES_USER=onlinejudge
      - POSTGRES_PASSWORD=onlinejudge
# 暴露postgres端口
    ports:
      - "0.0.0.0:5435:5432"
# 添加判断服务器
vim judge-server.yml
# 添加以下代码块内容

docker-compose -f judge-server.yml -p judge-server up -d

judge-server.yml:

version: "3"
services:

  judge-server:
    image: registry.cn-hangzhou.aliyuncs.com/onlinejudge/judge_server
    container_name: judge-server
    restart: always
    read_only: true
    cap_drop:
      - SETPCAP
      - MKNOD
      - NET_BIND_SERVICE
      - SYS_CHROOT
      - SETFCAP
      - FSETID
    tmpfs:
      - /tmp
    volumes:
      - ./data_dev/backend/test_case:/test_case:ro
      - ./data_dev/judge_server/log:/log
      - ./data_dev/judge_server/run:/judger
    environment:
# 修改SERVICE_URL
      - SERVICE_URL=http://127.0.0.1:8080
# 修改BACKEND_URL
      - BACKEND_URL=http://127.0.0.1:8000/api/judge_server_heartbeat/
# TOKEN和运行后端时设置的TOKEN相同
      - TOKEN=TOKEN
      # - judger_debug=1
    network_mode: "host"

四、前端部署

# 安装nodejs+npm
nvm install v8.12.0
nvm use 8.12.0
# 验证
node -v
npm -v
# 更换国内源
npm config set registry https://registry.npm.taobao.org

# 安装package.json中依赖,注意highlight.js版本会提示9过低要求安装10,此时可以先关闭highlight.js,其他安装好最后再安装它,10版本的这个OJ不支持
npm install

export NODE_ENV=development 
npm run build:dll

# 后端接口★注意django挂的端口多少,这就是多少
export TARGET=http://127.0.0.1:8000

# ★不能与已有服务冲突,包括但不限于 6380 5435 8000 8080
# 如果需要暴露,改成合适的端口,并且build/dev-server.js,里面localhost改成自己IP
export PORT=8088

# 前端运行在8088端口下
npm run dev

五、其他注意事项

1.Anaconda安装最后conda init提示初始化失败,具体为路径配置失败
sudo vim ~/.bashrc
export PATH=/home/boy/anaconda3/bin:$PATH【★注意改成你自己目录】
source ~/.bashrc
2.python manage.py migrate报错:
django migrate Error loading psycopg2 module: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0
安装pip包:pip install psycopg2-binary

标签:compose,postgres,手动,redis,dev,server,QDUOJ,docker,心得
From: https://www.cnblogs.com/KoiBana/p/18420487

相关文章

  • 阿里云服务器手动部署LNMP环境(Alibaba Cloud Linux 3/2、CentOS 7/8)
    LNMP是目前主流的网站服务器架构之一,适合运行大型和高并发的网站应用,例如电子商务网站、社交网络、内容管理系统等。LNMP分别代表Linux、Nginx、MySQL和PHP。本文介绍如何在AlibabaCloudLinux3/2、CentOS7/8操作系统的ECS实例上搭建LNMP环境。部署环境的实例要求手动部署LNMP环......
  • 第一次使用爬虫心得
    随手记录,第一次用爬虫首先说一下环境部分我的环境:python3.7Anconda虚拟环境所应用库:pandas,json,requests,time(time库因为要爬取数据类型而用的,非必须库)环境不同不会影响太大(似乎基本没啥影响)爬虫开始这里只说一些基础中的基础,适合python没怎么用过的小白食用。费话不多少,......
  • Nacos学习心得
            最近面试发现现在面试不仅要求会用常用的微服务组件,还需要能说出原理和各种什么功能。遂产生了开始学习《Nacos架构&原理》的念头,以下为学习笔记。0.Nacos的一些背景介绍Nacos的前身是阿里的三个产品CongigServer,VIPServer,Diamond。阿里在18年开源Nacos的......
  • PyQt5 使用 QStackedWidget 实现轮播展示动画(自动与手动)
    PyQt5使用QStackedWidget实现轮播展示动画(自动与手动)在PyQt5中,如果需要用QStackedWidget展示图片比较生硬,参考网络上的一些内容,发现用QPropertyAnimation属性动画可实现想要的效果,于是记录在这里代码结构本文中全部代码全在test_QStackedWidget_Animation.py这一个文件中......
  • 在 MySQL InnoDB 中,允许开发人员在 MySQL 事务中手动控制锁 - 称之为“用户级锁”。
    在MySQLInnoDB中,允许开发人员在MySQL事务中手动控制锁-称之为“用户级锁”。用户级锁不直接与InnoDB的内部行或表锁定机制交互。用户级锁使用GET_LOCK()、RELEASE_LOCK()函数进行管理。用户级锁提供了更细粒度的控制,让你能在应用层实施自定义加锁策略。主要函数包括:GET_L......
  • 三丰云免费云服务器试用心得‌
     试用三丰云的免费云服务器后,我对其整体表现感到非常满意。服务器性能出色,无论是处理日常任务还是应对高峰期的流量,都能保持流畅稳定的运行,访问速度快,用户体验良好。同时,三丰云提供的免费服务器配置良心,对于初学者来说非常方便,尤其是CentOS里可以选择自带宝塔面板,极大地方便了网站......
  • c++入门(七万字心得体会!!)分上下两篇(初阶+进阶)
    目录c++入门c++关键字命名空间命名空间定义命名空间使用c++输入输出缺省参数缺省参数概念缺省参数分类函数重载函数重载概念c++支持函数重载原理--名字修饰(name)引用引用概念引用特性常引用使用场景传值,传引用效率对比引用和指针的区别内联函数概念特性a......
  • mongo集群同步数据异常,手动同步节点副本数据
    转载请注明出处:数据同步方案当副本集节点的复制进程落后太多,以至于主节点覆盖了该节点尚未复制的oplog条目时,副本集节点就会变为“陈旧”。节点跟不上,就会变得“陈旧”。出现这种情况时,必须删除副本集节点的数据,然后执行初始同步,从而完全重新同步该节点。MongoDB提供了......
  • 11.2.0.4 RAC,手动方式安装PSU补丁
    1、前言注意:Oracle不建议客户使用手动方式进行补丁安装,客户应该使用opatchauto方式进行补丁安装工作。但是,在opatchauto的过程中如果出现问题,我们可以将本文档中的步骤作为临时解决方法。 2、故障描述客户有一套Exadata环境下的11.2.0.4RAC,近期进行安全扫描时,提示一些数据......
  • 大学生必备10个AI工具网站,辅助完成辩论/开题/实践/形势政策报告、创新创业计划书、思
    大学新生和学长学姐们都已经开学了,忙碌的课程和多样的作业也随之开始,下面将给大学生们介绍10个辅助完成作业、寻找灵感,提升学习专注力和学术表现的AI工具~1、笔墨写作笔墨写作-领先的写作智能AI创作平台|官方首页笔墨写作是一款专注于各种文体写作的智能AI创作平台,提供全......