ZKZH-OJ说明文档
# OnlineJudeg—ZKZH
需要时打开翻看
# 一、项目了解
# 1. 技术栈构成
- 前端:VUE框架
- vue2-2.5.16
- UI-----elementui
- 后端:Django框架 + DRF框架
- django-2.1.7
- django-restframework
- aliyun
- 数据库:PostgreSQL + redis
- 运维部署:nginx+docker(在线编译的沙箱环境)
- docker沙箱编译环境
# 2. 碰到的问题
# 1. Docker
项目中docker用到镜像不是ubuntu而是alpine
docker inspect --format
#输出running则为运行 d5f1da0223fb为容器id
- docker 进入不同的容器命令不同,正常进入:docker exec -it 容器名 /bin/bash alpine制作的镜像得:docker exec -it 容器名 /bin/sh
# 2. 数据库
postgresql 数据库之前没有怎么了解过,需要重新学习
由于这个数据库是和ubuntu账户单独分离的,所以第一步要更换账户
更换账户
sudo -i -u postgres
1登录到postgresql数据库中
psql
1创建用户和密码
CREATE USER onlinejudge WITH PASSWORD 'onlinejudge';
1创建数据库
CREATE DATABASE XXXXXX;
1更换数据库所有权
GRANT ALL PRIVILEGES ON DATABASE XXXXXX to onlinejudge;
1
# 3. 服务器路径问题
nginx
- /app/deploy/nginx
- 目录中https文件里最后一个的指定的 / 是vue打包生成的dist后的文件夹
4个固定容器的位置
- /var/lib/docker/containers
# 4. 本地部署前端问题
前置准备
- npm install 的时候会碰见GitHub无法访问的情况
- 需要手动安装一下git(可能去仓库拉去) 去git官网下载那个gitbash即可
- npm install 的时候会碰见GitHub无法访问的情况
重跑流程
删除 node_modul 和package-lock && npm cache clean --force 强制清楚所有缓存
项目文件夹中需要初始化git
git init
去.git文件夹中找到config文件添加以下内容
[user] email=your email name=your name
1
2
3git commit --allow-empty -n -m "Commit"
set NODE_ENV=development
npm run build:dll
export TARGET=http://127.0.0.1
npm run dev
# 5. 导包问题
- can not import six 把导包from django.utils import six 直接改为 import six 是因为djagno 3 版本中吧这个six单独作为了一个包
# 二、开发流程文档
# 1. 修改后端代码
# 1.1 修改yml文件
修改文件中注释掉的部分,将本地的后端代码挂载进去
version: "3"
services:
oj-redis:
image: redis:4.0-alpine
container_name: oj-redis
restart: always
volumes:
- ./data/redis:/data
oj-postgres:
image: postgres:10-alpine
container_name: oj-postgres
restart: always
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=onlinejudge
- POSTGRES_USER=onlinejudge
- POSTGRES_PASSWORD=onlinejudge
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/backend/test_case:/test_case:ro
- ./data/judge_server/log:/log
- ./data/judge_server/run:/judger
environment:
- SERVICE_URL=http://judge-server:8080
- BACKEND_URL=http://oj-backend:8000/api/judge_server_heartbeat/
- TOKEN=CHANGE_THIS
- judger_debug=1
oj-backend:
image: registry.cn-hangzhou.aliyuncs.com/zkzh/zkoj_backend
container_name: oj-backend
restart: always
depends_on:
- oj-redis
- oj-postgres
- judge-server
volumes:
- ./data/backend:/data
# 后端开发的时候把前面的部分改成后端代码所在文件夹
# - /home/xxx/yyy/OnlineJudge:/app
environment:
- PYTHONUNBUFFERED=TRUE
- POSTGRES_DB=onlinejudge
- POSTGRES_USER=onlinejudge
- POSTGRES_PASSWORD=onlinejudge
- JUDGE_SERVER_TOKEN=CHANGE_THIS
- ACCESS_KEY_ID=LTAI5tE1GeJcBFwwTaGC1FhF
- ACCESS_KEY_SECRET=rfw20Qst3N8mFTtW5ZPFgJvjUnvEfX
- APPID=wxf267110a56485ab3
- APPSECRET=e3c748c66b121323f7ffc2ff856f1009
# 强制HTTPS注释掉,为了防止跨域
# - FORCE_HTTPS=1
# - STATIC_CDN_HOST=cdn.oj.com
ports:
- "0.0.0.0:80:8000"
- "0.0.0.0:443:1443"
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
69
70
71
72
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
69
70
71
72
# 1.2启动Docker
docker stop $(docker ps -q)
docker rm -f $(docker ps -aq)
docker-compose up -d
1
2
3
2
3
# 1.3 修改后端代码
- 重启docker则修改生效
# 1.4 修改model
如果修改的是后端的model部分,需要执行以下操作
docker exec -it oj-backend /bin/sh
docker exec -it yjy-backend /bin/sh
python manage.py makemigrations
python manage.py migrate
exit
1
2
3
4
5
2
3
4
5
# 1.5 启动失败等异常
查看 /data/backend/log 下面的日志
# 2. 修改前端代码
# 2.1 步骤
npm install
set NODE_ENV=development
// 这一步用来生成vendor-manifest.json文件的
npm run build:dll
export TARGET=http://127.0.0.1/
npm run dev
npm run build
打包为dist文件放到后端根目录下
打包之后的dist文件,需要将static目录复制到mobile中一份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 2.2 附件页面路径
- 在 /src/pages/oj/views/attachment 下添加新的页面
- 在 /src/pages/oj/views/index.js 中导出
- 在 /src/pages/oj/router/routes.js 中添加路由
# 2.3 Git 提交流程
git add . 提交所有变动
git commit -am '修改信息注释'
git push https://gitee.com/zkzh8888/OnlineJudgeFE.git BrandNew:BrandNew 后面是分支名
1
2
3
2
3
# 3.打包镜像重新上传
- 注意这里阿里云会自动检测后端代码的提交
git commit -am '提交信息'
git push 本地分支:远程分支
1
2
3
2
3
# 4. 打包状态查看
登录阿里云查看
等待自动构建镜像成功
# 5. 服务器部署
- 切换到项目所在文件夹
cd /home/admin/OnlineJudgeDeploy/
1
- 执行以下docker命令
docker stop $(docker ps -q)
docker rm -f $(docker ps -aq)
docker pull registry.cn-hangzhou.aliyuncs.com/zkzh/zkoj_backend
docker-compose up -d
1
2
3
4
2
3
4
# 三、其他
# widows 相关指令
export 在win下无用应该用: set TARGET
win下查看端口:
1
2
2
# Git
初始化
git init
删除远程仓库
git remote rm origin
新增远程仓库
git remote add origin https://github.com/test/test.git
设置全局账号
git config --global user.email xxxx@.com
git config --global user.name xxxx
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 四、TODO
async await
mapGetters
$confirm 原理
调用api之后的.catch()方法
this.$store 中间存的是什么
1
2
3
4
5
6
2
3
4
5
6
上次更新: 2022/12/28, 07:42:52