试了三遍,终于挂载成功了DMOJ,随笔记录
Ubuntu20.04、Ubuntu20.04【WSL】适用
1.环境配置
apt update
# 大前置
apt install git gcc g++ make python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev gettext curl redis-server
# npm相关,这是官方方式,这里不推荐
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
apt install nodejs
# npm相关 推荐 一定要采用nvm的安装npm,或者记得npm+node==14.19.1,不然ubuntu20下面./make_style.sh会报错[会爆一种语法格式判断错误,if...,如果你也遇到了,那大概是这里的问题,具体原因暂时未知],导致css静态资源无法转换迁移
cd ~
git clone https://github.com/creationix/nvm.git .nvm
cd .nvm
git checkout v0.33.11
执行install.sh安装即可
nvm --version
# 用nvm安装node和npm
nvm install v14.19.1
nvm use 14.19.1
# 验证
node -v
npm -v
# 如果用npm下载其他包慢 更换国内源
npm config set registry https://registry.npm.taobao.org
# 几个sass转换工具[scss->css,目前我是这么理解的]
npm install -g sass postcss-cli postcss autoprefixer
2.数据库
官网用的这种,mysql其实也可以
PS:如果开发环境为wsl,而且你win上本来就有mysql了,大概会各种冲突,会有锁之类的问题,这里建议拉一个小型服务器,阿里云/腾讯云的,数据库单独部署。
apt update
# mariadbDB数据库下载
apt install mariadb-server libmysqlclient-dev
sudo mysql
# 创建dmoj数据库
mariadb> CREATE DATABASE dmoj DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
# <mariadb user password> -》 dmoj123.
# 这里注意一下,首先我们登陆了root用户,防止其他数据库暴露,创建了dmoj的子用户,%表示dmoj用户任何主机都能访问,你也可以锁自己IP,密码是dmoj123.
mariadb> GRANT ALL PRIVILEGES ON dmoj.* TO 'dmoj'@'%' IDENTIFIED BY 'dmoj123.';
mariadb> exit
自行下载anaonda3的sh文件,运行安装
创建名为dmojsite的python3.8的虚拟环境,并切换到新环境,如果后面没有说明,所有操作均在此环境下。
3.项目拉取
git clone https://github.com/DMOJ/online-judge.git
cd online-judge
git checkout v4.0.0 # 两种判断服务器方式,1.PyPi 2.docker,只有用1.才用此行命令,个人推荐测试先用PiPy,后面换docker
git submodule init
git submodule update
# 安装python依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 如果下面命令下不了或提示没有,pip装一个pymysql也行
# 官方这个命令不太懂 大概是在下mysql服务?!
pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple
python manage.py check
4.项目修改
在dmoj文件夹创建local_settings.py,官方案例:local_settings.py
SECRET_KEY按照上面注释的命令生成并替换
DEBUG正式运行记得关,我们测试可以先开着
注释的ALLOWED_HOST改成['*'],并取消注释
DATABASES密码改成你创建数据库设置的
CELERY的两个设置注释都取消
【一个个人感觉不太重要的:80多行EMAIL6个设置都打开,改成自己邮箱 密码】
5.项目资源迁移[最大事故区]
# 下面这个命令如果均是ok,不报错,算是到一段落了
./make_style.sh
python manage.py collectstatic
python manage.py compilemessages
python manage.py compilejsi18n
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata navbar
python manage.py loaddata language_small
python manage.py loaddata demo
# 创建后台管理员
python manage.py createsuperuser
# 起一下看看,没问题Ctrl+C关闭
python manage.py runserver
6.redis uwsgi supervisord nginx代理部署*
service redis-server start
# 测试后关闭
python manage.py runserver 0.0.0.0:8000
# 起一下等10s,不报错Ctrl+C关闭
python manage.py runbridged
celery -A dmoj_celery worker
# 安装uwsgi
pip install uwsgi
# uwsgi.ini文件官方案例 https://github.com/DMOJ/docs/blob/master/sample_files/uwsgi.ini
# 记得path改成你自己的,前两个是项目路径,第三个python路径,下面是我的,可以借鉴 不要直接copy
# chdir = /mnt/z/Aproject/online-judge
# pythonpath = /mnt/z/Aproject/online-judge
# virtualenv = /home/boy/anaconda3/envs/dmojsite
# 建议在新窗口拉起
uwsgi --ini uwsgi.ini
# 可以查到四个相关进程
ps -ef |grep uwsgi
# 杀死进程,但是上面我没杀掉,应该是杀死瞬间又拉起了新的
# 小问题,
kill -9 id
# 设置主管
apt install supervisor
sudo service supervisor start
# 查看下版本,这里注意最好脱离虚拟环境到base下查看版本,supervisor是装在全局的,
# 有时候他会去python环境下检测有没有此包,如果报错注意一下
supervisord -v
# 三个配置
# 新建三个文件
sudo vim /etc/supervisor/conf.d/site.conf
sudo vim /etc/supervisor/conf.d/bridged.conf
sudo vim /etc/supervisor/conf.d/celery.conf
# 官方案例,同样记得修改内容,改path即可
# https://github.com/DMOJ/docs/blob/master/sample_files/site.conf
# https://github.com/DMOJ/docs/blob/master/sample_files/bridged.conf
# https://github.com/DMOJ/docs/blob/master/sample_files/celery.conf
# 同上如果运行不了 退回base环境
supervisorctl update
supervisorctl status
nginx代理目前个人没有需求,未实验,可以去看官网
7.判断服务器设置PyPi
apt install python3-dev python3-pip build-essential libseccomp-dev
pip install dmoj
# 注意命令输出的runtime内容
dmoj-autoconf
创建一个judge.yml文件,手动创建problems文件夹
# id和key登陆你挂起的django服务,登陆进入管理后台,添加你的判断服务器,记得设置的id和key
# 碎碎念:id最好是judge,我之前用了judge01,一直连不上,换成judge瞬间连上了,痛苦面具,key记得复制全,因为随机生成的有时候会有两个/,
# 我鼠标点击复制了一部分,两个痛苦面具
id: <judge name>
key: <judge authentication key>
problem_storage_root:
- /mnt/problems
# 看dmoj-autoconf的输出
runtime:
...
# 进入管理后端,更改站点8081-》8000 或者vscode搜索下8081,改成8000也行,只需要改一个地方。
# 不然判断服务器连不上
# 本机测试
dmoj -c judge.yml localhost
# 如果是正式 指定端口 IP
dmoj -c judge.yml -p "$PORT" "$IP"
# PS:如果连接不到,回去检查nginx之前的配置,是否都正常。
后端挂起+判断服务器挂起,打开管理看到判断服务器绿色对勾,测试完毕。
标签:经验,https,python,DMOJ,py,三周,install,manage,dmoj From: https://www.cnblogs.com/KoiBana/p/18420466