|
|
|
|
@ -1,3 +1,52 @@
|
|
|
|
|
FROM ubuntu:20.04 as build-image
|
|
|
|
|
|
|
|
|
|
ARG http_proxy
|
|
|
|
|
ARG https_proxy
|
|
|
|
|
ARG no_proxy
|
|
|
|
|
ARG socks_proxy
|
|
|
|
|
ARG DJANGO_CONFIGURATION
|
|
|
|
|
|
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends install -yq \
|
|
|
|
|
apache2-dev \
|
|
|
|
|
build-essential \
|
|
|
|
|
curl \
|
|
|
|
|
libldap2-dev \
|
|
|
|
|
libsasl2-dev \
|
|
|
|
|
nasm \
|
|
|
|
|
git \
|
|
|
|
|
pkg-config \
|
|
|
|
|
python3-dev \
|
|
|
|
|
python3-pip \
|
|
|
|
|
python3-venv && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Compile Openh264 and FFmpeg
|
|
|
|
|
ARG PREFIX=/opt/ffmpeg
|
|
|
|
|
ARG PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
|
|
|
|
|
|
|
|
|
|
ENV FFMPEG_VERSION=4.3.1 \
|
|
|
|
|
OPENH264_VERSION=2.1.1
|
|
|
|
|
|
|
|
|
|
WORKDIR /tmp/openh264
|
|
|
|
|
RUN curl -sL https://github.com/cisco/openh264/archive/v${OPENH264_VERSION}.tar.gz --output openh264-${OPENH264_VERSION}.tar.gz && \
|
|
|
|
|
tar -zx --strip-components=1 -f openh264-${OPENH264_VERSION}.tar.gz && \
|
|
|
|
|
make -j5 && make install PREFIX=${PREFIX} && make clean
|
|
|
|
|
|
|
|
|
|
WORKDIR /tmp/ffmpeg
|
|
|
|
|
RUN curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
|
|
|
|
tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
|
|
|
|
./configure --disable-nonfree --disable-gpl --enable-libopenh264 --enable-shared --disable-static --prefix="${PREFIX}" && \
|
|
|
|
|
make -j5 && make install && make distclean
|
|
|
|
|
|
|
|
|
|
# Install requirements
|
|
|
|
|
RUN python3 -m venv /opt/venv
|
|
|
|
|
ENV PATH="/opt/venv/bin:${PATH}"
|
|
|
|
|
RUN python3 -m pip install --no-cache-dir -U pip==20.0.1 setuptools==49.6.0 wheel==0.35.1
|
|
|
|
|
COPY cvat/requirements/ /tmp/requirements/
|
|
|
|
|
RUN DATUMARO_HEADLESS=1 python3 -m pip install --no-cache-dir -r /tmp/requirements/${DJANGO_CONFIGURATION}.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FROM ubuntu:20.04
|
|
|
|
|
|
|
|
|
|
ARG http_proxy
|
|
|
|
|
@ -21,45 +70,42 @@ ENV DJANGO_CONFIGURATION=${DJANGO_CONFIGURATION}
|
|
|
|
|
|
|
|
|
|
# Install necessary apt packages
|
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
apt-get --no-install-recommends install -yq \
|
|
|
|
|
software-properties-common && \
|
|
|
|
|
apt-get update && \
|
|
|
|
|
DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends install -yq \
|
|
|
|
|
apache2 \
|
|
|
|
|
apache2-dev \
|
|
|
|
|
apt-utils \
|
|
|
|
|
build-essential \
|
|
|
|
|
libapache2-mod-xsendfile \
|
|
|
|
|
supervisor \
|
|
|
|
|
libavcodec-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libavdevice-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libavfilter-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libavformat-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libavutil-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libswresample-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libswscale-dev=7:4.2.4-1ubuntu0.1 \
|
|
|
|
|
libldap2-dev \
|
|
|
|
|
libsasl2-dev \
|
|
|
|
|
pkg-config \
|
|
|
|
|
python3-dev \
|
|
|
|
|
python3-pip \
|
|
|
|
|
libldap-2.4-2 \
|
|
|
|
|
libsasl2-2 \
|
|
|
|
|
libpython3-dev \
|
|
|
|
|
tzdata \
|
|
|
|
|
python3-distutils \
|
|
|
|
|
p7zip-full \
|
|
|
|
|
git \
|
|
|
|
|
git-lfs \
|
|
|
|
|
ssh \
|
|
|
|
|
poppler-utils \
|
|
|
|
|
ssh \
|
|
|
|
|
curl && \
|
|
|
|
|
python3 -m pip install --no-cache-dir -U pip==20.0.1 setuptools==49.6.0 wheel==0.35.1 && \
|
|
|
|
|
ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
|
|
|
|
dpkg-reconfigure -f noninteractive tzdata && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/* && \
|
|
|
|
|
echo 'application/wasm wasm' >> /etc/mime.types
|
|
|
|
|
|
|
|
|
|
ARG CLAM_AV
|
|
|
|
|
ENV CLAM_AV=${CLAM_AV}
|
|
|
|
|
RUN if [ "$CLAM_AV" = "yes" ]; then \
|
|
|
|
|
apt-get update && \
|
|
|
|
|
apt-get --no-install-recommends install -yq \
|
|
|
|
|
clamav \
|
|
|
|
|
libclamunrar9 && \
|
|
|
|
|
sed -i 's/ReceiveTimeout 30/ReceiveTimeout 300/g' /etc/clamav/freshclam.conf && \
|
|
|
|
|
freshclam && \
|
|
|
|
|
chown -R ${USER}:${USER} /var/lib/clamav && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/*; \
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Add a non-root user
|
|
|
|
|
ENV USER=${USER}
|
|
|
|
|
ENV HOME /home/${USER}
|
|
|
|
|
WORKDIR ${HOME}
|
|
|
|
|
RUN adduser --shell /bin/bash --disabled-password --gecos "" ${USER} && \
|
|
|
|
|
if [ -z ${socks_proxy} ]; then \
|
|
|
|
|
echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30\"" >> ${HOME}/.bashrc; \
|
|
|
|
|
@ -67,40 +113,41 @@ RUN adduser --shell /bin/bash --disabled-password --gecos "" ${USER} && \
|
|
|
|
|
echo export "GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 -o ProxyCommand='nc -X 5 -x ${socks_proxy} %h %p'\"" >> ${HOME}/.bashrc; \
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
COPY components /tmp/components
|
|
|
|
|
|
|
|
|
|
# Install and initialize CVAT, copy all necessary files
|
|
|
|
|
COPY cvat/requirements/ /tmp/requirements/
|
|
|
|
|
COPY supervisord.conf mod_wsgi.conf wait-for-it.sh manage.py ${HOME}/
|
|
|
|
|
RUN python3 -m pip install --no-cache-dir -r /tmp/requirements/${DJANGO_CONFIGURATION}.txt
|
|
|
|
|
|
|
|
|
|
ARG CLAM_AV
|
|
|
|
|
ENV CLAM_AV=${CLAM_AV}
|
|
|
|
|
RUN if [ "$CLAM_AV" = "yes" ]; then \
|
|
|
|
|
ARG INSTALL_SOURCES='no'
|
|
|
|
|
WORKDIR ${HOME}/sources
|
|
|
|
|
RUN if [ "$INSTALL_SOURCES" = "yes" ]; then \
|
|
|
|
|
sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list && \
|
|
|
|
|
apt-get update && \
|
|
|
|
|
apt-get --no-install-recommends install -yq \
|
|
|
|
|
clamav \
|
|
|
|
|
libclamunrar9 && \
|
|
|
|
|
sed -i 's/ReceiveTimeout 30/ReceiveTimeout 300/g' /etc/clamav/freshclam.conf && \
|
|
|
|
|
freshclam && \
|
|
|
|
|
chown -R ${USER}:${USER} /var/lib/clamav && \
|
|
|
|
|
dpkg --get-selections | while read -r line; do \
|
|
|
|
|
package=$(echo "$line" | awk '{print $1}'); \
|
|
|
|
|
mkdir "$package"; \
|
|
|
|
|
( \
|
|
|
|
|
cd "$package"; \
|
|
|
|
|
apt-get -q --download-only source "$package"; \
|
|
|
|
|
) \
|
|
|
|
|
done && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/*; \
|
|
|
|
|
fi
|
|
|
|
|
COPY --from=build-image /tmp/openh264/openh264*.tar.gz /tmp/ffmpeg/ffmpeg*.tar.bz2 ${HOME}/sources/
|
|
|
|
|
|
|
|
|
|
COPY ssh ${HOME}/.ssh
|
|
|
|
|
COPY utils ${HOME}/utils
|
|
|
|
|
COPY cvat/ ${HOME}/cvat
|
|
|
|
|
COPY cvat-core/ ${HOME}/cvat-core
|
|
|
|
|
COPY cvat-data/ ${HOME}/cvat-data
|
|
|
|
|
COPY tests ${HOME}/tests
|
|
|
|
|
# Copy python virtual enviroment and FFmpeg binaries from build-image
|
|
|
|
|
COPY --from=build-image /opt/venv /opt/venv
|
|
|
|
|
ENV PATH="/opt/venv/bin:${PATH}"
|
|
|
|
|
COPY --from=build-image /opt/ffmpeg /usr
|
|
|
|
|
|
|
|
|
|
RUN chown -R ${USER}:${USER} .
|
|
|
|
|
# Install and initialize CVAT, copy all necessary files
|
|
|
|
|
COPY --chown=${USER} components /tmp/components
|
|
|
|
|
COPY --chown=${USER} ssh ${HOME}/.ssh
|
|
|
|
|
COPY --chown=${USER} supervisord.conf mod_wsgi.conf wait-for-it.sh manage.py ${HOME}/
|
|
|
|
|
COPY --chown=${USER} cvat/ ${HOME}/cvat
|
|
|
|
|
COPY --chown=${USER} utils/ ${HOME}/utils
|
|
|
|
|
|
|
|
|
|
# RUN all commands below as 'django' user
|
|
|
|
|
USER ${USER}
|
|
|
|
|
WORKDIR ${HOME}
|
|
|
|
|
|
|
|
|
|
RUN mkdir data share media keys logs /tmp/supervisord
|
|
|
|
|
RUN python3 manage.py collectstatic
|
|
|
|
|
|
|
|
|
|
EXPOSE 8080 8443
|
|
|
|
|
EXPOSE 8080
|
|
|
|
|
ENTRYPOINT ["/usr/bin/supervisord"]
|
|
|
|
|
|