mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-09-07 23:55:19 +00:00
refactor: docker compose
This commit is contained in:
parent
e46ff8b152
commit
84503130db
9
db/Dockerfile
Normal file
9
db/Dockerfile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
FROM mysql:latest
|
||||||
|
|
||||||
|
ADD . /opt/uoj_db
|
||||||
|
WORKDIR /opt/uoj_db
|
||||||
|
|
||||||
|
# Run the latest UOJ Community verison db install script
|
||||||
|
RUN sh install.sh
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 TZ=Asia/Shanghai
|
@ -21,8 +21,8 @@ setWebConf(){
|
|||||||
cat >/docker-entrypoint-initdb.d/000-native_password.sql <<UOJEOF
|
cat >/docker-entrypoint-initdb.d/000-native_password.sql <<UOJEOF
|
||||||
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
|
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
|
||||||
UOJEOF
|
UOJEOF
|
||||||
curl $RAW_URL/install/db/app_uoj233.sql >/docker-entrypoint-initdb.d/001-app_uoj233.sql
|
cp 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
|
cp add_judger.sql /docker-entrypoint-initdb.d/002-add_judger.sql
|
||||||
}
|
}
|
||||||
|
|
||||||
echo 'Preparing UOJ System db environment...'
|
echo 'Preparing UOJ System db environment...'
|
@ -2,7 +2,9 @@ version: "3"
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
uoj-db:
|
uoj-db:
|
||||||
image: universaloj/uoj-system:db
|
build:
|
||||||
|
context: ./db/
|
||||||
|
dockerfile: Dockerfile
|
||||||
container_name: uoj-db
|
container_name: uoj-db
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
@ -12,7 +14,9 @@ services:
|
|||||||
- MYSQL_ROOT_PASSWORD=root
|
- MYSQL_ROOT_PASSWORD=root
|
||||||
|
|
||||||
uoj-judger:
|
uoj-judger:
|
||||||
image: universaloj/uoj-system:judger
|
build:
|
||||||
|
context: ./judger/
|
||||||
|
dockerfile: Dockerfile
|
||||||
container_name: uoj-judger
|
container_name: uoj-judger
|
||||||
restart: always
|
restart: always
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
@ -20,7 +24,7 @@ services:
|
|||||||
cap_add:
|
cap_add:
|
||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
volumes:
|
volumes:
|
||||||
- ./uoj_data/judger/log:/opt/uoj/judger/log
|
- ./uoj_data/judger/log:/opt/uoj_judger/log
|
||||||
environment:
|
environment:
|
||||||
- UOJ_PROTOCOL=http
|
- UOJ_PROTOCOL=http
|
||||||
- UOJ_HOST=uoj-web
|
- UOJ_HOST=uoj-web
|
||||||
@ -30,7 +34,9 @@ services:
|
|||||||
- SOCKET_PASSWORD=_judger_socket_password_
|
- SOCKET_PASSWORD=_judger_socket_password_
|
||||||
|
|
||||||
uoj-web:
|
uoj-web:
|
||||||
image: universaloj/uoj-system:web
|
build:
|
||||||
|
context: ./
|
||||||
|
dockerfile: web/Dockerfile
|
||||||
container_name: uoj-web
|
container_name: uoj-web
|
||||||
restart: always
|
restart: always
|
||||||
stdin_open: true
|
stdin_open: true
|
@ -1,25 +0,0 @@
|
|||||||
FROM ubuntu:20.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/renbaoshuo/UOJ-System.git --depth 1 --single-branch ${CLONE_ADDFLAG} uoj
|
|
||||||
#Install environment and set startup script
|
|
||||||
RUN cd uoj/install/bundle && sh install.sh -p && echo "\
|
|
||||||
#!/bin/sh\n\
|
|
||||||
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld\n\
|
|
||||||
if [ ! -f \"/var/uoj_data/.UOJSetupDone\" ]; then\n\
|
|
||||||
cd /opt/uoj/install/bundle && sh install.sh -i\n\
|
|
||||||
fi\n\
|
|
||||||
service ntp start\n\
|
|
||||||
service mysql start\n\
|
|
||||||
service apache2 start\n\
|
|
||||||
su local_main_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 80 3690
|
|
||||||
CMD /opt/up
|
|
@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
CLONE_ADDFLAG="-b $DOCKER_TAG"
|
|
||||||
if [ "$DOCKER_TAG" = "latest" ]; then
|
|
||||||
CLONE_ADDFLAG="-b master"
|
|
||||||
fi
|
|
||||||
docker build -t $IMAGE_NAME --build-arg CLONE_ADDFLAG="$CLONE_ADDFLAG" .
|
|
@ -1,162 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
genRandStr(){
|
|
||||||
cat /dev/urandom | tr -dc [:alnum:] | head -c $1
|
|
||||||
}
|
|
||||||
#Set some vars
|
|
||||||
_database_password_=root
|
|
||||||
_judger_socket_port_=2333
|
|
||||||
_judger_socket_password_=$(genRandStr 32)
|
|
||||||
_main_judger_password_=$(genRandStr 32)
|
|
||||||
|
|
||||||
getAptPackage(){
|
|
||||||
printf "\n\n==> Getting environment packages\n"
|
|
||||||
#Set MySQL root password
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
(echo "mysql-server mysql-server/root_password password $_database_password_";echo "mysql-server mysql-server/root_password_again password $_database_password_") | debconf-set-selections
|
|
||||||
#Update apt sources and install
|
|
||||||
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 php-gd php-intl php-xsl mysql-server cmake fp-compiler re2c libv8-7.5-dev libyaml-dev python python3 python3-requests openjdk-8-jdk openjdk-11-jdk
|
|
||||||
#Install PHP extensions
|
|
||||||
yes | pecl install yaml
|
|
||||||
git clone https://github.com/phpv8/v8js.git --depth=1 /tmp/pear/download/v8js-master && cd /tmp/pear/download/v8js-master
|
|
||||||
phpize && ./configure --with-php-config=/usr/bin/php-config --with-v8js=/opt/libv8-7.5 && make install && cd -
|
|
||||||
}
|
|
||||||
|
|
||||||
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 '912a\extension=v8js.so\nextension=yaml.so' /etc/php/7.4/apache2/php.ini
|
|
||||||
#Set MySQL user directory and connection config
|
|
||||||
usermod -d /var/lib/mysql/ mysql
|
|
||||||
cat >/etc/mysql/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"
|
|
||||||
#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']['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
|
|
||||||
#Import MySQL database
|
|
||||||
service mysql restart
|
|
||||||
mysql -u root --password=$_database_password_ <../db/app_uoj233.sql
|
|
||||||
echo "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$_database_password_';" | mysql -u root --password=$_database_password_
|
|
||||||
}
|
|
||||||
|
|
||||||
setJudgeConf(){
|
|
||||||
printf "\n\n==> Setting judger files\n"
|
|
||||||
#Add local_main_judger user
|
|
||||||
useradd -m local_main_judger && usermod -a -G www-data local_main_judger
|
|
||||||
#Set uoj_data path
|
|
||||||
mkdir -p /var/uoj_data/upload
|
|
||||||
chown -R www-data:www-data /var/uoj_data
|
|
||||||
#Compile uoj_judger and set runtime
|
|
||||||
chown -R local_main_judger:local_main_judger /opt/uoj/judger
|
|
||||||
su local_main_judger <<EOD
|
|
||||||
ln -s /var/uoj_data /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.8"
|
|
||||||
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
|
||||||
UOJEOF
|
|
||||||
cd uoj_judger && make -j$(($(nproc) + 1))
|
|
||||||
EOD
|
|
||||||
#Set judge_client config file
|
|
||||||
cat >../../judger/.conf.json <<UOJEOF
|
|
||||||
{
|
|
||||||
"uoj_protocol": "http",
|
|
||||||
"uoj_host": "127.0.0.1",
|
|
||||||
"judger_name": "main_judger",
|
|
||||||
"judger_password": "_main_judger_password_",
|
|
||||||
"socket_port": $_judger_socket_port_,
|
|
||||||
"socket_password": "_judger_socket_password_"
|
|
||||||
}
|
|
||||||
UOJEOF
|
|
||||||
chmod 600 ../../judger/.conf.json && chown local_main_judger ../../judger/.conf.json
|
|
||||||
}
|
|
||||||
|
|
||||||
initProgress(){
|
|
||||||
printf "\n\n==> Doing initial config and start service\n"
|
|
||||||
#Replace password placeholders
|
|
||||||
sed -i -e "s/_main_judger_password_/$_main_judger_password_/g" -e "s/_judger_socket_password_/$_judger_socket_password_/g" /opt/uoj/judger/.conf.json
|
|
||||||
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
|
|
||||||
#Import judge_client to MySQL database
|
|
||||||
service mysql start
|
|
||||||
echo "insert into judger_info (judger_name, password) values (\"main_judger\", \"$_main_judger_password_\")" | mysql app_uoj233 -u root --password=$_database_password_
|
|
||||||
#Using cli upgrade to latest
|
|
||||||
php /var/www/uoj/app/cli.php upgrade:latest
|
|
||||||
#Start services
|
|
||||||
service ntp restart
|
|
||||||
service mysql restart
|
|
||||||
service apache2 restart
|
|
||||||
su local_main_judger -c '/opt/uoj/judger/judge_client start'
|
|
||||||
#Touch SetupDone flag file
|
|
||||||
touch /var/uoj_data/.UOJSetupDone
|
|
||||||
printf "\n\n***Installation complete. Enjoy!***\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepProgress(){
|
|
||||||
getAptPackage;setLAMPConf;setWebConf;setJudgeConf
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ $# -le 0 ]; then
|
|
||||||
echo 'Installing UOJ System bundle...'
|
|
||||||
prepProgress;initProgress
|
|
||||||
fi
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-p | --prep)
|
|
||||||
echo 'Preparing UOJ System bundle environment...'
|
|
||||||
prepProgress
|
|
||||||
;;
|
|
||||||
-i | --init)
|
|
||||||
echo 'Initing UOJ System bundle...'
|
|
||||||
initProgress
|
|
||||||
;;
|
|
||||||
-? | --*)
|
|
||||||
echo "Illegal option $1"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift $(( $#>0?1:0 ))
|
|
||||||
done
|
|
@ -1,9 +0,0 @@
|
|||||||
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
|
|
@ -1,22 +0,0 @@
|
|||||||
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/renbaoshuo/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
|
|
@ -1,22 +0,0 @@
|
|||||||
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/renbaoshuo/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
|
|
20
judger/Dockerfile
Normal file
20
judger/Dockerfile
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
ARG CLONE_ADDFLAG
|
||||||
|
|
||||||
|
ADD . /opt/uoj_judger
|
||||||
|
WORKDIR /opt/uoj_judger
|
||||||
|
|
||||||
|
# Install environment and set startup script
|
||||||
|
RUN sh install.sh -p && echo "\
|
||||||
|
#!/bin/sh\n\
|
||||||
|
if [ ! -f \"/opt/uoj_judger/.conf.json\" ]; then\n\
|
||||||
|
cd /opt/uoj_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
judger/add_judger.sql
Normal file
2
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');
|
@ -13,12 +13,12 @@ setJudgeConf(){
|
|||||||
#Set uoj_data path
|
#Set uoj_data path
|
||||||
mkdir /var/uoj_data_copy && chown judger /var/uoj_data_copy
|
mkdir /var/uoj_data_copy && chown judger /var/uoj_data_copy
|
||||||
#Compile uoj_judger and set runtime
|
#Compile uoj_judger and set runtime
|
||||||
chown -R judger:judger /opt/uoj/judger
|
chown -R judger:judger /opt/uoj_judger
|
||||||
su judger <<EOD
|
su judger <<EOD
|
||||||
ln -s /var/uoj_data_copy /opt/uoj/judger/uoj_judger/data
|
ln -s /var/uoj_data_copy /opt/uoj_judger/uoj_judger/data
|
||||||
cd /opt/uoj/judger && chmod +x judge_client
|
cd /opt/uoj_judger && chmod +x judge_client
|
||||||
cat >uoj_judger/include/uoj_work_path.h <<UOJEOF
|
cat >uoj_judger/include/uoj_work_path.h <<UOJEOF
|
||||||
#define UOJ_WORK_PATH "/opt/uoj/judger/uoj_judger"
|
#define UOJ_WORK_PATH "/opt/uoj_judger/uoj_judger"
|
||||||
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
||||||
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
||||||
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
||||||
@ -29,12 +29,12 @@ EOD
|
|||||||
|
|
||||||
initProgress(){
|
initProgress(){
|
||||||
printf "\n\n==> Doing initial config and start service\n"
|
printf "\n\n==> Doing initial config and start service\n"
|
||||||
#Check envs
|
# 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
|
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!"
|
echo "!! Environment variables not set! Please edit config file by yourself!"
|
||||||
else
|
else
|
||||||
#Set judge_client config file
|
# Set judge_client config file
|
||||||
cat >../../judger/.conf.json <<UOJEOF
|
cat >.conf.json <<UOJEOF
|
||||||
{
|
{
|
||||||
"uoj_protocol": "$UOJ_PROTOCOL",
|
"uoj_protocol": "$UOJ_PROTOCOL",
|
||||||
"uoj_host": "$UOJ_HOST",
|
"uoj_host": "$UOJ_HOST",
|
||||||
@ -44,11 +44,11 @@ initProgress(){
|
|||||||
"socket_password": "$SOCKET_PASSWORD"
|
"socket_password": "$SOCKET_PASSWORD"
|
||||||
}
|
}
|
||||||
UOJEOF
|
UOJEOF
|
||||||
chmod 600 ../../judger/.conf.json && chown judger ../../judger/.conf.json
|
chmod 600 .conf.json && chown judger .conf.json
|
||||||
chown -R judger:judger ../../judger/log
|
chown -R judger:judger ./log
|
||||||
#Start services
|
#Start services
|
||||||
service ntp restart
|
service ntp restart
|
||||||
su judger -c '/opt/uoj/judger/judge_client start'
|
su judger -c '/opt/uoj_judger/judge_client start'
|
||||||
echo "please modify the database after getting the judger server ready:"
|
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__');"
|
echo "insert into judger_info (judger_name, password, ip) values ('$JUDGER_NAME', '$JUDGER_PASSWORD', '__judger_ip_here__');"
|
||||||
printf "\n\n***Installation complete. Enjoy!***\n"
|
printf "\n\n***Installation complete. Enjoy!***\n"
|
20
web/Dockerfile
Normal file
20
web/Dockerfile
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
ARG CLONE_ADDFLAG
|
||||||
|
|
||||||
|
ADD . /opt/uoj
|
||||||
|
WORKDIR /opt/uoj
|
||||||
|
|
||||||
|
# Install environment and set startup script
|
||||||
|
RUN sh web/install.sh -p && echo "\
|
||||||
|
#!/bin/sh\n\
|
||||||
|
if [ ! -f \"/var/uoj_data/.UOJSetupDone\" ]; then\n\
|
||||||
|
cd /opt/uoj/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
|
@ -15,7 +15,7 @@ getAptPackage(){
|
|||||||
dpkg -s gnupg 2>/dev/null || (apt-get update && apt-get install -y gnupg)
|
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
|
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 php-gd php-intl php-xsl g++ cmake re2c libv8-7.5-dev libyaml-dev
|
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 php-gd php-intl php-xsl g++ cmake re2c libv8-7.5-dev libyaml-dev
|
||||||
#Install PHP extensions
|
# Install PHP extensions
|
||||||
printf "/opt/libv8-7.5\n\n" | pecl install v8js yaml
|
printf "/opt/libv8-7.5\n\n" | pecl install v8js yaml
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,10 +50,10 @@ UOJEOF
|
|||||||
|
|
||||||
setWebConf(){
|
setWebConf(){
|
||||||
printf "\n\n==> Setting web files\n"
|
printf "\n\n==> Setting web files\n"
|
||||||
#Set webroot path
|
# Set webroot path
|
||||||
ln -sf /opt/uoj/web /var/www/uoj
|
ln -sf /opt/uoj/web /var/www/uoj
|
||||||
chown -R www-data /var/www/uoj/app/storage
|
chown -R www-data /var/www/uoj/app/storage
|
||||||
#Set web config file
|
# Set web config file
|
||||||
php -a <<UOJEOF
|
php -a <<UOJEOF
|
||||||
\$config = include '/var/www/uoj/app/.default-config.php';
|
\$config = include '/var/www/uoj/app/.default-config.php';
|
||||||
\$config['database']['host']='$_database_host_';
|
\$config['database']['host']='$_database_host_';
|
||||||
@ -61,15 +61,15 @@ setWebConf(){
|
|||||||
\$config['judger']['socket']['port']='$_judger_socket_port_';
|
\$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");
|
file_put_contents('/var/www/uoj/app/.config.php', "<?php\nreturn ".str_replace('\'_httpHost_\'','UOJContext::httpHost()',var_export(\$config, true)).";\n");
|
||||||
UOJEOF
|
UOJEOF
|
||||||
#Prepare local sandbox
|
# Prepare local sandbox
|
||||||
cd ../../judger/uoj_judger
|
cd ../judger/uoj_judger
|
||||||
cat >include/uoj_work_path.h <<UOJEOF
|
cat >include/uoj_work_path.h <<UOJEOF
|
||||||
#define UOJ_WORK_PATH "/opt/uoj/judger/uoj_judger"
|
#define UOJ_WORK_PATH "/opt/uoj/judger/uoj_judger"
|
||||||
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
#define UOJ_JUDGER_BASESYSTEM_UBUNTU1804
|
||||||
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
#define UOJ_JUDGER_PYTHON3_VERSION "3.6"
|
||||||
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
#define UOJ_JUDGER_FPC_VERSION "3.0.4"
|
||||||
UOJEOF
|
UOJEOF
|
||||||
make runner -j$(($(nproc) + 1)) && cd ../../install/web
|
make runner -j$(($(nproc) + 1)) && cd ../../web
|
||||||
}
|
}
|
||||||
|
|
||||||
initProgress(){
|
initProgress(){
|
Loading…
Reference in New Issue
Block a user