QDUOJ手动部署心得

手动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

作者:KoiBana

出处:https://www.cnblogs.com/KoiBana/p/18420487

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   绯色鱼  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示