/
Dockerfile
73 lines (68 loc) · 2.61 KB
/
Dockerfile
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
73
FROM --platform=$TARGETPLATFORM apluslms/service-base:django-1.18
COPY rootfs /
# Set container related configuration via environment variables
ENV CONTAINER_TYPE="grader" \
GRADER_LOCAL_SETTINGS="/srv/grader-cont-settings.py" \
GRADER_SECRET_KEY_FILE="/local/grader/secret_key.py" \
GRADER_AJAX_KEY_FILE="/local/grader/ajax_key.py" \
grader_NO_DATABASE="true"
ARG TARGETPLATFORM
ARG BRANCH=v1.23.0
RUN : \
&& apt_install \
apt-transport-https \
jq \
# temp
gnupg curl \
libmagic1 \
\
# install docker-ce
&& if [ "$TARGETPLATFORM" = "linux/amd64" ] ; then ARCH=amd64 ; elif [ "$TARGETPLATFORM" = "linux/arm64" ] ; then ARCH=arm64 ; else exit 1 ; fi \
&& curl -LSs https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg >/dev/null 2>&1 \
&& echo "deb [arch=$ARCH signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" > /etc/apt/sources.list.d/docker.list \
&& apt_install docker-ce \
\
# create user
&& adduser --system --no-create-home --disabled-password --gecos "MOOC-Grader webapp server,,," --home /srv/grader --ingroup nogroup grader \
&& mkdir /srv/grader && chown grader.nogroup /srv/grader \
&& git config --global --add safe.directory /srv/grader \
\
&& cd /srv/grader \
\
# clone. patch and prebuild .pyc files
&& git clone --quiet --single-branch --branch $BRANCH https://github.com/apluslms/mooc-grader.git . \
&& (echo "On branch $(git rev-parse --abbrev-ref HEAD) | $(git describe)"; echo; git log -n5) > GIT \
&& rm -rf .git \
&& patch -p1 < /srv/cors.patch \
&& python3 -m compileall -q . \
\
# install requirements, remove the file, remove unrequired locales and tests
&& pip_install -r requirements.txt \
&& rm requirements.txt \
&& find /usr/local/lib/python* -type d -regex '.*/locale/[a-z_A-Z]+' -not -regex '.*/\(en\|fi\|sv\)' -print0 | xargs -0 rm -rf \
&& find /usr/local/lib/python* -type d -name 'tests' -print0 | xargs -0 rm -rf \
\
&& export \
GRADER_SECRET_KEY="-" \
GRADER_AJAX_KEY="-" \
&& python3 manage.py compilemessages 2>&1 \
\
# default course link
&& mkdir -p /srv/grader/courses/ \
&& mkdir -p /srv/courses/default \
&& ln -s -T /srv/courses/default /srv/grader/courses/default \
&& chown -R grader.nogroup \
/srv/courses \
/srv/course_store \
/srv/grader \
\
# clean
&& rm -rf $GRADER_SECRET_KEY_FILE $GRADER_AJAX_KEY_FILE \
&& rm -rf /etc/init.d/ /tmp/* \
&& apt_purge \
gnupg curl \
&& :
VOLUME /srv/courses/default
WORKDIR /srv/grader/
EXPOSE 8080
CMD [ "manage", "runserver", "0.0.0.0:8080" ]