mirror of
https://github.com/QingdaoU/JudgeServer.git
synced 2024-12-27 12:21:44 +00:00
127 lines
3.9 KiB
Docker
127 lines
3.9 KiB
Docker
FROM debian:trixie-slim AS builder
|
|
ARG TARGETARCH
|
|
ARG TARGETVARIANT
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
WORKDIR /app
|
|
|
|
RUN --mount=type=cache,target=/var/cache/apt,id=apt-cahce-1-$TARGETARCH$TARGETVARIANT-builder,sharing=locked \
|
|
--mount=type=cache,target=/var/lib/apt,id=apt-cahce-2-$TARGETARCH$TARGETVARIANT-builder,sharing=locked \
|
|
<<EOS
|
|
set -ex
|
|
rm -f /etc/apt/apt.conf.d/docker-clean
|
|
echo 'Binary::apt::APT::Keep-Downloaded-Packages "1";' > /etc/apt/apt.conf.d/keep-cache
|
|
echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/no-recommends
|
|
echo 'APT::AutoRemove::RecommendsImportant "0";' >> /etc/apt/apt.conf.d/no-recommends
|
|
apt-get update
|
|
apt-get install -y libtool make cmake libseccomp-dev gcc python3 python3-venv
|
|
EOS
|
|
|
|
COPY Judger/ /app/
|
|
RUN <<EOS
|
|
set -ex
|
|
mkdir /app/build
|
|
cmake -S . -B build
|
|
cmake --build build --parallel $(nproc)
|
|
EOS
|
|
|
|
RUN <<EOS
|
|
set -ex
|
|
cd bindings/Python
|
|
python3 -m venv .venv
|
|
.venv/bin/pip3 install build
|
|
.venv/bin/python3 -m build -w
|
|
EOS
|
|
|
|
FROM debian:trixie-slim
|
|
ARG TARGETARCH
|
|
ARG TARGETVARIANT
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
WORKDIR /app
|
|
|
|
RUN --mount=type=cache,target=/var/cache/apt,id=apt-cahce-1-$TARGETARCH$TARGETVARIANT-final,sharing=locked \
|
|
--mount=type=cache,target=/var/lib/apt,id=apt-cahce-2-$TARGETARCH$TARGETVARIANT-final,sharing=locked \
|
|
<<EOS
|
|
set -ex
|
|
rm -f /etc/apt/apt.conf.d/docker-clean
|
|
echo 'Binary::apt::APT::Keep-Downloaded-Packages "1";' > /etc/apt/apt.conf.d/keep-cache
|
|
echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/no-recommends
|
|
echo 'APT::AutoRemove::RecommendsImportant "0";' >> /etc/apt/apt.conf.d/no-recommends
|
|
needed="python3.12-minimal \
|
|
python3.12-venv \
|
|
libpython3.12-stdlib \
|
|
libpython3.12-dev \
|
|
golang-1.22-go \
|
|
temurin-21-jdk \
|
|
gcc-13 \
|
|
g++-13 \
|
|
nodejs \
|
|
strace"
|
|
savedAptMark="$(apt-mark showmanual) $needed"
|
|
apt-get update
|
|
apt-get install -y ca-certificates curl gnupg
|
|
curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /etc/apt/keyrings/adoptium.gpg
|
|
cat > /etc/apt/sources.list.d/adoptium.sources <<EOF
|
|
Types: deb
|
|
URIs: https://packages.adoptium.net/artifactory/deb
|
|
Suites: bookworm
|
|
Components: main
|
|
Signed-By: /etc/apt/keyrings/adoptium.gpg
|
|
EOF
|
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
|
cat > /etc/apt/sources.list.d/nodesource.sources <<EOF
|
|
Types: deb
|
|
URIs: https://deb.nodesource.com/node_20.x
|
|
Suites: nodistro
|
|
Components: main
|
|
Signed-By:/etc/apt/keyrings/nodesource.gpg
|
|
EOF
|
|
apt-get update
|
|
apt-get install -y $needed
|
|
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13
|
|
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13
|
|
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 12
|
|
update-alternatives --install /usr/bin/go go /usr/lib/go-1.22/bin/go 22
|
|
rm -rf /usr/lib/jvm/temurin-21-jdk-*/jmods
|
|
rm -rf /usr/lib/jvm/temurin-21-jdk-*/lib/src.zip
|
|
apt-mark auto '.*' > /dev/null
|
|
apt-mark manual $savedAptMark
|
|
apt-get purge -y --auto-remove
|
|
EOS
|
|
|
|
COPY --from=builder --chmod=755 --link /app/output/libjudger.so /usr/lib/judger/libjudger.so
|
|
COPY --from=builder /app/bindings/Python/dist/ /app/
|
|
RUN --mount=type=cache,target=/root/.cache/pip,id=pip-cahce-$TARGETARCH$TARGETVARIANT-final \
|
|
<<EOS
|
|
set -ex
|
|
python3 -m venv .venv
|
|
CC=gcc .venv/bin/pip3 install --compile --no-cache-dir flask gunicorn idna psutil requests
|
|
.venv/bin/pip3 install *.whl
|
|
EOS
|
|
|
|
COPY server/ /app/
|
|
RUN <<EOS
|
|
set -ex
|
|
chmod -R u=rwX,go=rX /app/
|
|
chmod +x /app/entrypoint.sh
|
|
gcc -shared -fPIC -o unbuffer.so unbuffer.c
|
|
useradd -u 901 -r -s /sbin/nologin -M compiler
|
|
useradd -u 902 -r -s /sbin/nologin -M code
|
|
useradd -u 903 -r -s /sbin/nologin -M -G code spj
|
|
mkdir -p /usr/lib/judger
|
|
EOS
|
|
|
|
RUN <<EOS
|
|
set -ex
|
|
gcc --version
|
|
g++ --version
|
|
python3 --version
|
|
java -version
|
|
node --version
|
|
EOS
|
|
|
|
HEALTHCHECK --interval=5s CMD [ "/app/.venv/bin/python3", "/app/service.py" ]
|
|
EXPOSE 8080
|
|
ENTRYPOINT [ "/app/entrypoint.sh" ]
|