mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-22 13:28:41 +00:00
chore(install): separate services with docker-compose support
Without bundle, now you can choose to download single container. For example, you can only download judger container to setup a new judger. Also, the web container now no db and judger containing, except local sandbox. You can use docker-compose to get every single container work together from now. Single DB this time uses the latest MySQL 8 version, so some preferences are different.
This commit is contained in:
parent
28cd4ef8b8
commit
d413b746eb
@ -76,7 +76,7 @@ file_put_contents('/var/www/uoj/app/.config.php', "<?php\nreturn ".str_replace('
|
|||||||
UOJEOF
|
UOJEOF
|
||||||
#Import MySQL database
|
#Import MySQL database
|
||||||
service mysql restart
|
service mysql restart
|
||||||
mysql -u root --password=$_database_password_ <app_uoj233.sql
|
mysql -u root --password=$_database_password_ <../db/app_uoj233.sql
|
||||||
}
|
}
|
||||||
|
|
||||||
setJudgeConf(){
|
setJudgeConf(){
|
||||||
@ -84,10 +84,10 @@ setJudgeConf(){
|
|||||||
#Add local_main_judger user
|
#Add local_main_judger user
|
||||||
useradd -m local_main_judger && usermod -a -G www-data local_main_judger
|
useradd -m local_main_judger && usermod -a -G www-data local_main_judger
|
||||||
#Set uoj_data path
|
#Set uoj_data path
|
||||||
mkdir /var/uoj_data && mkdir /var/uoj_data/upload
|
mkdir -p /var/uoj_data/upload
|
||||||
chown -R www-data /var/uoj_data && chgrp -R www-data /var/uoj_data
|
chown -R www-data:www-data /var/uoj_data
|
||||||
#Compile uoj_judger and set runtime
|
#Compile uoj_judger and set runtime
|
||||||
chown -R local_main_judger /opt/uoj/judger && chgrp -R local_main_judger /opt/uoj/judger
|
chown -R local_main_judger:local_main_judger /opt/uoj/judger
|
||||||
su local_main_judger <<EOD
|
su local_main_judger <<EOD
|
||||||
ln -s /var/uoj_data /opt/uoj/judger/uoj_judger/data
|
ln -s /var/uoj_data /opt/uoj/judger/uoj_judger/data
|
||||||
cd /opt/uoj/judger && chmod +x judge_client
|
cd /opt/uoj/judger && chmod +x judge_client
|
||||||
@ -137,7 +137,7 @@ prepProgress(){
|
|||||||
getAptPackage;setLAMPConf;setWebConf;setJudgeConf
|
getAptPackage;setLAMPConf;setWebConf;setJudgeConf
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ $# -le 0 ] ;then
|
if [ $# -le 0 ]; then
|
||||||
echo 'Installing UOJ System bundle...'
|
echo 'Installing UOJ System bundle...'
|
||||||
prepProgress;initProgress
|
prepProgress;initProgress
|
||||||
fi
|
fi
|
||||||
|
47
install/compose/docker-compose.yml
Normal file
47
install/compose/docker-compose.yml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
|
||||||
|
uoj-db:
|
||||||
|
image: universaloj/uoj-system:db
|
||||||
|
container_name: uoj-db
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./uoj_data/db/mysql:/var/lib/mysql
|
||||||
|
environment:
|
||||||
|
- MYSQL_DATABASE=app_uoj233
|
||||||
|
- MYSQL_ROOT_PASSWORD=root
|
||||||
|
|
||||||
|
uoj-judger:
|
||||||
|
image: universaloj/uoj-system:judger
|
||||||
|
container_name: uoj-judger
|
||||||
|
restart: always
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
cap_add:
|
||||||
|
- SYS_PTRACE
|
||||||
|
volumes:
|
||||||
|
- ./uoj_data/judger/log:/opt/uoj/judger/log
|
||||||
|
environment:
|
||||||
|
- UOJ_PROTOCOL=http
|
||||||
|
- UOJ_HOST=uoj-web
|
||||||
|
- JUDGER_NAME=compose_judger
|
||||||
|
- JUDGER_PASSWORD=_judger_password_
|
||||||
|
- SOCKET_PORT=2333
|
||||||
|
- SOCKET_PASSWORD=_judger_socket_password_
|
||||||
|
|
||||||
|
uoj-web:
|
||||||
|
image: universaloj/uoj-system:web
|
||||||
|
container_name: uoj-web
|
||||||
|
restart: always
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
cap_add:
|
||||||
|
- SYS_PTRACE
|
||||||
|
depends_on:
|
||||||
|
- uoj-db
|
||||||
|
- uoj-judger
|
||||||
|
volumes:
|
||||||
|
- ./uoj_data/web/data:/var/uoj_data
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "3690:3690"
|
9
install/db/Dockerfile
Normal file
9
install/db/Dockerfile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
FROM mysql:latest
|
||||||
|
MAINTAINER MascoSkray <MascoSkray@gmail.com>
|
||||||
|
|
||||||
|
#Update apt and install curl
|
||||||
|
RUN apt-get update && apt-get install -y curl
|
||||||
|
#Run the latest UOJ Community verison db install script
|
||||||
|
RUN export RAW_URL=https://raw.githubusercontent.com/UniversalOJ/UOJ-System/master && curl $RAW_URL/install/db/install.sh | sh
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 TZ=Asia/Shanghai
|
29
install/db/install.sh
Normal file
29
install/db/install.sh
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
setLAMPConf(){
|
||||||
|
printf "\n\n==> Setting LAMP configs\n"
|
||||||
|
#Set MySQL connection config
|
||||||
|
cat >/etc/mysql/conf.d/uoj_mysqld.cnf <<UOJEOF
|
||||||
|
[mysqld]
|
||||||
|
default-time-zone='+8:00'
|
||||||
|
character-set-server=utf8mb4
|
||||||
|
collation-server=utf8mb4_unicode_ci
|
||||||
|
init_connect='SET NAMES utf8mb4'
|
||||||
|
init_connect='SET collation_connection = utf8mb4_unicode_ci'
|
||||||
|
skip-character-set-client-handshake
|
||||||
|
sql-mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
|
||||||
|
UOJEOF
|
||||||
|
}
|
||||||
|
|
||||||
|
setWebConf(){
|
||||||
|
printf "\n\n==> Setting web files\n"
|
||||||
|
#Import MySQL database
|
||||||
|
cat >/docker-entrypoint-initdb.d/000-native_password.sql <<UOJEOF
|
||||||
|
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
|
||||||
|
UOJEOF
|
||||||
|
curl $RAW_URL/install/db/app_uoj233.sql >/docker-entrypoint-initdb.d/001-app_uoj233.sql
|
||||||
|
curl $RAW_URL/install/judger/add_judger.sql >/docker-entrypoint-initdb.d/002-add_judger.sql
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'Preparing UOJ System db environment...'
|
||||||
|
setLAMPConf;setWebConf
|
@ -1,30 +0,0 @@
|
|||||||
FROM ubuntu:14.04
|
|
||||||
MAINTAINER vfleaking vfleaking@163.com
|
|
||||||
|
|
||||||
COPY docker/sources.list /etc/apt/sources.list
|
|
||||||
|
|
||||||
RUN apt-get update
|
|
||||||
RUN apt-get install -y vim \
|
|
||||||
ntp \
|
|
||||||
build-essential \
|
|
||||||
python \
|
|
||||||
python-requests \
|
|
||||||
git \
|
|
||||||
unzip
|
|
||||||
|
|
||||||
COPY docker/jdk-7u76-linux-x64.tar.gz \
|
|
||||||
docker/jdk-8u31-linux-x64.tar.gz \
|
|
||||||
docker/judge_client/conf.json \
|
|
||||||
/root/
|
|
||||||
COPY docker/judge_client/cur_install /root/install
|
|
||||||
|
|
||||||
RUN cd /root && chmod +x install
|
|
||||||
RUN cd /root && ./install && rm * -rf
|
|
||||||
|
|
||||||
COPY docker/judge_client/up /root/up
|
|
||||||
|
|
||||||
RUN chmod +x /root/up
|
|
||||||
|
|
||||||
EXPOSE 2333
|
|
||||||
|
|
||||||
CMD /root/up
|
|
@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
import sys, json, random, os
|
|
||||||
|
|
||||||
def translate(filename, target, tab):
|
|
||||||
with open(filename, 'r') as f:
|
|
||||||
content = f.read()
|
|
||||||
for k, v in tab.items():
|
|
||||||
content = content.replace('__' + k + '__', v)
|
|
||||||
with open(target, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
cid = raw_input('uoj container id: ')
|
|
||||||
ip = raw_input('uoj ip: ')
|
|
||||||
name = raw_input('judger name: ')
|
|
||||||
|
|
||||||
os.system("docker cp " + cid + ":/home/local_main_judger/judge_client/.conf.json conf.json")
|
|
||||||
|
|
||||||
with open('conf.json', 'r') as f:
|
|
||||||
conf = json.load(f)
|
|
||||||
|
|
||||||
conf['uoj_host'] = ip
|
|
||||||
conf['judger_name'] = name
|
|
||||||
conf['judger_password'] = ''.join(random.choice('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in range(32))
|
|
||||||
|
|
||||||
with open('conf.json', 'w') as f:
|
|
||||||
json.dump(conf, f, indent=4, separators=(',', ': '))
|
|
||||||
print >>f
|
|
||||||
|
|
||||||
translate_table = {
|
|
||||||
'uoj_host': ip
|
|
||||||
}
|
|
||||||
|
|
||||||
translate('install', 'cur_install', translate_table)
|
|
||||||
|
|
||||||
print "please modify the database after getting the judger server ready:"
|
|
||||||
print "insert into judger_info (judger_name, password, ip) values ('%s', '%s', '__judger_ip_here__');" % (name, conf['judger_password'])
|
|
@ -1,29 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
sudo adduser judger --gecos "" --disabled-password
|
|
||||||
|
|
||||||
mv /root/jdk-7u76-linux-x64.tar.gz /root/jdk-8u31-linux-x64.tar.gz /root/conf.json /home/judger
|
|
||||||
chown judger /home/judger/jdk-7u76-linux-x64.tar.gz /home/judger/jdk-8u31-linux-x64.tar.gz /home/judger/conf.json
|
|
||||||
chgrp judger /home/judger/jdk-7u76-linux-x64.tar.gz /home/judger/jdk-8u31-linux-x64.tar.gz /home/judger/conf.json
|
|
||||||
|
|
||||||
mkdir /var/uoj_data_copy
|
|
||||||
chown judger /var/uoj_data_copy
|
|
||||||
|
|
||||||
su judger <<EOD
|
|
||||||
cd ~
|
|
||||||
git clone https://github.com/Universal/UOJ-System.git
|
|
||||||
ln -s UOJ-System/judge_client/1 judge_client
|
|
||||||
cd judge_client
|
|
||||||
echo '#define UOJ_WORK_PATH "/home/judger/judge_client/uoj_judger"' >uoj_judger/include/uoj_work_path.h
|
|
||||||
make
|
|
||||||
ln -s /var/uoj_data_copy ~/judge_client/uoj_judger/data
|
|
||||||
|
|
||||||
mkdir ~/judge_client/uoj_judger/run/runtime
|
|
||||||
mv ~/jdk-7u76-linux-x64.tar.gz ~/jdk-8u31-linux-x64.tar.gz ~/judge_client/uoj_judger/run/runtime
|
|
||||||
cd ~/judge_client/uoj_judger/run/runtime
|
|
||||||
tar -xzf jdk-7u76-linux-x64.tar.gz
|
|
||||||
tar -xzf jdk-8u31-linux-x64.tar.gz
|
|
||||||
|
|
||||||
mv ~/conf.json ~/judge_client/.conf.json
|
|
||||||
chmod 600 ~/judge_client/.conf.json
|
|
||||||
EOD
|
|
@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
docker build -f Dockerfile .
|
|
@ -1,7 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
service ntp start
|
|
||||||
|
|
||||||
su judger -c '~/judge_client/judge_client start'
|
|
||||||
|
|
||||||
exec bash
|
|
22
install/judger/Dockerfile
Normal file
22
install/judger/Dockerfile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
MAINTAINER MascoSkray <MascoSkray@gmail.com>
|
||||||
|
ARG CLONE_ADDFLAG
|
||||||
|
|
||||||
|
WORKDIR /opt
|
||||||
|
#Update apt and install git
|
||||||
|
RUN apt-get update && apt-get install -y git
|
||||||
|
#Clone the latest UOJ Community verison to local
|
||||||
|
RUN git clone https://github.com/UniversalOJ/UOJ-System.git --depth 1 --single-branch ${CLONE_ADDFLAG} uoj
|
||||||
|
#Install environment and set startup script
|
||||||
|
RUN cd uoj/install/judger && sh install.sh -p && echo "\
|
||||||
|
#!/bin/sh\n\
|
||||||
|
if [ ! -f \"/opt/uoj/judger/.conf.json\" ]; then\n\
|
||||||
|
cd /opt/uoj/install/judger && sh install.sh -i\n\
|
||||||
|
fi\n\
|
||||||
|
service ntp start\n\
|
||||||
|
su judger -c \"/opt/uoj/judger/judge_client start\"\n\
|
||||||
|
exec bash\n" >/opt/up && chmod +x /opt/up
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 TZ=Asia/Shanghai
|
||||||
|
EXPOSE 2333
|
||||||
|
CMD /opt/up
|
2
install/judger/add_judger.sql
Normal file
2
install/judger/add_judger.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
USE `app_uoj233`;
|
||||||
|
insert into judger_info (judger_name, password, ip) values ('compose_judger', '_judger_password_', 'uoj-judger');
|
81
install/judger/install.sh
Normal file
81
install/judger/install.sh
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
getAptPackage(){
|
||||||
|
printf "\n\n==> Getting environment packages\n"
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
apt-get update && apt-get install -y vim ntp zip unzip curl wget build-essential fp-compiler python python3 python3-requests openjdk-8-jdk openjdk-11-jdk
|
||||||
|
}
|
||||||
|
|
||||||
|
setJudgeConf(){
|
||||||
|
printf "\n\n==> Setting judger files\n"
|
||||||
|
#Add judger user
|
||||||
|
adduser judger --gecos "" --disabled-password
|
||||||
|
#Set uoj_data path
|
||||||
|
mkdir /var/uoj_data_copy && chown judger /var/uoj_data_copy
|
||||||
|
#Compile uoj_judger and set runtime
|
||||||
|
chown -R judger:judger /opt/uoj/judger
|
||||||
|
su judger <<EOD
|
||||||
|
ln -s /var/uoj_data_copy /opt/uoj/judger/uoj_judger/data
|
||||||
|
cd /opt/uoj/judger && chmod +x judge_client
|
||||||
|
cat >uoj_judger/include/uoj_work_path.h <<UOJEOF
|
||||||
|
#define UOJ_WORK_PATH "/opt/uoj/judger/uoj_judger"
|
||||||
|
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
||||||
|
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
||||||
|
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
||||||
|
UOJEOF
|
||||||
|
cd uoj_judger && make -j$(($(nproc) + 1))
|
||||||
|
EOD
|
||||||
|
}
|
||||||
|
|
||||||
|
initProgress(){
|
||||||
|
printf "\n\n==> Doing initial config and start service\n"
|
||||||
|
#Check envs
|
||||||
|
if [ -z "$UOJ_PROTOCOL" -o -z "$UOJ_HOST" -o -z "$JUDGER_NAME" -o -z "$JUDGER_PASSWORD" -o -z "$SOCKET_PORT" -o -z "$SOCKET_PASSWORD" ]; then
|
||||||
|
echo "!! Environment variables not set! Please edit config file by yourself!"
|
||||||
|
else
|
||||||
|
#Set judge_client config file
|
||||||
|
cat >../../judger/.conf.json <<UOJEOF
|
||||||
|
{
|
||||||
|
"uoj_protocol": "$UOJ_PROTOCOL",
|
||||||
|
"uoj_host": "$UOJ_HOST",
|
||||||
|
"judger_name": "$JUDGER_NAME",
|
||||||
|
"judger_password": "$JUDGER_PASSWORD",
|
||||||
|
"socket_port": $SOCKET_PORT,
|
||||||
|
"socket_password": "$SOCKET_PASSWORD"
|
||||||
|
}
|
||||||
|
UOJEOF
|
||||||
|
chmod 600 ../../judger/.conf.json && chown judger ../../judger/.conf.json
|
||||||
|
chown -R judger:judger ../../judger/log
|
||||||
|
#Start services
|
||||||
|
service ntp restart
|
||||||
|
su judger -c '/opt/uoj/judger/judge_client start'
|
||||||
|
echo "please modify the database after getting the judger server ready:"
|
||||||
|
echo "insert into judger_info (judger_name, password, ip) values ('$JUDGER_NAME', '$JUDGER_PASSWORD', '__judger_ip_here__');"
|
||||||
|
printf "\n\n***Installation complete. Enjoy!***\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prepProgress(){
|
||||||
|
getAptPackage;setJudgeConf
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -le 0 ]; then
|
||||||
|
echo 'Installing UOJ System judger...'
|
||||||
|
prepProgress;initProgress
|
||||||
|
fi
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-p | --prep)
|
||||||
|
echo 'Preparing UOJ System judger environment...'
|
||||||
|
prepProgress
|
||||||
|
;;
|
||||||
|
-i | --init)
|
||||||
|
echo 'Initing UOJ System judger...'
|
||||||
|
initProgress
|
||||||
|
;;
|
||||||
|
-? | --*)
|
||||||
|
echo "Illegal option $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift $(( $#>0?1:0 ))
|
||||||
|
done
|
22
install/web/Dockerfile
Normal file
22
install/web/Dockerfile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
MAINTAINER MascoSkray <MascoSkray@gmail.com>
|
||||||
|
ARG CLONE_ADDFLAG
|
||||||
|
|
||||||
|
WORKDIR /opt
|
||||||
|
#Update apt and install git
|
||||||
|
RUN apt-get update && apt-get install -y git
|
||||||
|
#Clone the latest UOJ Community verison to local
|
||||||
|
RUN git clone https://github.com/UniversalOJ/UOJ-System.git --depth 1 --single-branch ${CLONE_ADDFLAG} uoj
|
||||||
|
#Install environment and set startup script
|
||||||
|
RUN cd uoj/install/web && sh install.sh -p && echo "\
|
||||||
|
#!/bin/sh\n\
|
||||||
|
if [ ! -f \"/var/uoj_data/.UOJSetupDone\" ]; then\n\
|
||||||
|
cd /opt/uoj/install/web && sh install.sh -i\n\
|
||||||
|
fi\n\
|
||||||
|
service ntp start\n\
|
||||||
|
service apache2 start\n\
|
||||||
|
exec bash\n" >/opt/up && chmod +x /opt/up
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 TZ=Asia/Shanghai
|
||||||
|
EXPOSE 80 3690
|
||||||
|
CMD /opt/up
|
115
install/web/install.sh
Normal file
115
install/web/install.sh
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
genRandStr(){
|
||||||
|
cat /dev/urandom | tr -dc [:alnum:] | head -c $1
|
||||||
|
}
|
||||||
|
#Set some vars
|
||||||
|
_database_host_=uoj-db
|
||||||
|
_database_password_=root
|
||||||
|
_judger_socket_port_=2333
|
||||||
|
_judger_socket_password_=_judger_socket_password_
|
||||||
|
|
||||||
|
getAptPackage(){
|
||||||
|
printf "\n\n==> Getting environment packages\n"
|
||||||
|
#Update apt sources and install
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
dpkg -s gnupg 2>/dev/null || (apt-get update && apt-get install -y gnupg)
|
||||||
|
echo "deb http://ppa.launchpad.net/stesie/libv8/ubuntu bionic main" | tee /etc/apt/sources.list.d/stesie-libv8.list && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D858A0DF
|
||||||
|
apt-get update && apt-get install -y vim ntp zip unzip curl wget apache2 libapache2-mod-xsendfile libapache2-mod-php php php-dev php-pear php-zip php-mysql php-mbstring g++ cmake re2c libv8-7.5-dev libyaml-dev
|
||||||
|
#Install PHP extensions
|
||||||
|
printf "/opt/libv8-7.5\n\n" | pecl install v8js yaml
|
||||||
|
}
|
||||||
|
|
||||||
|
setLAMPConf(){
|
||||||
|
printf "\n\n==> Setting LAMP configs\n"
|
||||||
|
#Set Apache UOJ site conf
|
||||||
|
cat >/etc/apache2/sites-available/000-uoj.conf <<UOJEOF
|
||||||
|
<VirtualHost *:80>
|
||||||
|
#ServerName local_uoj.ac
|
||||||
|
ServerAdmin opensource@uoj.ac
|
||||||
|
DocumentRoot /var/www/uoj
|
||||||
|
|
||||||
|
SetEnvIf Request_URI "^/judge/.*$" judgelog
|
||||||
|
#LogLevel info ssl:warn
|
||||||
|
ErrorLog \${APACHE_LOG_DIR}/uoj_error.log
|
||||||
|
CustomLog \${APACHE_LOG_DIR}/uoj_judge.log common env=judgelog
|
||||||
|
CustomLog \${APACHE_LOG_DIR}/uoj_access.log combined env=!judgelog
|
||||||
|
|
||||||
|
XSendFile On
|
||||||
|
XSendFilePath /var/uoj_data
|
||||||
|
XSendFilePath /var/www/uoj/app/storage
|
||||||
|
XSendFilePath /opt/uoj/judger/uoj_judger/include
|
||||||
|
</VirtualHost>
|
||||||
|
UOJEOF
|
||||||
|
#Enable modules and make UOJ site conf enabled
|
||||||
|
a2ensite 000-uoj.conf && a2dissite 000-default.conf
|
||||||
|
a2enmod rewrite headers && sed -i -e '172s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
|
||||||
|
#Create UOJ session save dir and make PHP extensions available
|
||||||
|
mkdir --mode=733 /var/lib/php/uoj_sessions && chmod +t /var/lib/php/uoj_sessions
|
||||||
|
sed -i -e '865a\extension=v8js.so\nextension=yaml.so' /etc/php/7.2/apache2/php.ini
|
||||||
|
}
|
||||||
|
|
||||||
|
setWebConf(){
|
||||||
|
printf "\n\n==> Setting web files\n"
|
||||||
|
#Set webroot path
|
||||||
|
ln -sf /opt/uoj/web /var/www/uoj
|
||||||
|
chown -R www-data /var/www/uoj/app/storage
|
||||||
|
#Set web config file
|
||||||
|
php -a <<UOJEOF
|
||||||
|
\$config = include '/var/www/uoj/app/.default-config.php';
|
||||||
|
\$config['database']['host']='$_database_host_';
|
||||||
|
\$config['database']['password']='$_database_password_';
|
||||||
|
\$config['judger']['socket']['port']='$_judger_socket_port_';
|
||||||
|
file_put_contents('/var/www/uoj/app/.config.php', "<?php\nreturn ".str_replace('\'_httpHost_\'','UOJContext::httpHost()',var_export(\$config, true)).";\n");
|
||||||
|
UOJEOF
|
||||||
|
#Prepare local sandbox
|
||||||
|
cd ../../judger/uoj_judger
|
||||||
|
cat >include/uoj_work_path.h <<UOJEOF
|
||||||
|
#define UOJ_WORK_PATH "/opt/uoj/judger/uoj_judger"
|
||||||
|
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
||||||
|
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
||||||
|
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
||||||
|
UOJEOF
|
||||||
|
make -j$(($(nproc) + 1)) && cd ../../install/web
|
||||||
|
}
|
||||||
|
|
||||||
|
initProgress(){
|
||||||
|
printf "\n\n==> Doing initial config and start service\n"
|
||||||
|
#Set uoj_data path
|
||||||
|
mkdir -p /var/uoj_data/upload
|
||||||
|
chown -R www-data:www-data /var/uoj_data
|
||||||
|
#Replace password placeholders
|
||||||
|
sed -i -e "s/salt0/$(genRandStr 32)/g" -e "s/salt1/$(genRandStr 16)/g" -e "s/salt2/$(genRandStr 16)/g" -e "s/salt3/$(genRandStr 16)/g" -e "s/_judger_socket_password_/$_judger_socket_password_/g" /var/www/uoj/app/.config.php
|
||||||
|
#Using cli upgrade to latest
|
||||||
|
php /var/www/uoj/app/cli.php upgrade:latest
|
||||||
|
#Start services
|
||||||
|
service ntp restart
|
||||||
|
service apache2 restart
|
||||||
|
#Touch SetupDone flag file
|
||||||
|
touch /var/uoj_data/.UOJSetupDone
|
||||||
|
printf "\n\n***Installation complete. Enjoy!***\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepProgress(){
|
||||||
|
getAptPackage;setLAMPConf;setWebConf
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -le 0 ]; then
|
||||||
|
echo 'Installing UOJ System web...'
|
||||||
|
prepProgress;initProgress
|
||||||
|
fi
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-p | --prep)
|
||||||
|
echo 'Preparing UOJ System web environment...'
|
||||||
|
prepProgress
|
||||||
|
;;
|
||||||
|
-i | --init)
|
||||||
|
echo 'Initing UOJ System web...'
|
||||||
|
initProgress
|
||||||
|
;;
|
||||||
|
-? | --*)
|
||||||
|
echo "Illegal option $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift $(( $#>0?1:0 ))
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user