mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-19 21:26:05 -05:00
127 lines
4.3 KiB
Docker
127 lines
4.3 KiB
Docker
FROM python:3.13.5-slim-bookworm AS build-image
|
|
|
|
RUN apt-get update -y && \
|
|
apt-get install -y --no-install-recommends wget xz-utils unzip && \
|
|
rm -rf /var/lib/apt/lists/* && \
|
|
apt-get purge --auto-remove && \
|
|
apt-get clean
|
|
|
|
RUN wget -q https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
|
|
|
|
RUN mkdir -p ffmpeg-tmp && \
|
|
tar -xf ffmpeg-release-amd64-static.tar.xz --strip-components 1 -C ffmpeg-tmp && \
|
|
cp -v ffmpeg-tmp/ffmpeg ffmpeg-tmp/ffprobe ffmpeg-tmp/qt-faststart /usr/local/bin && \
|
|
rm -rf ffmpeg-tmp ffmpeg-release-amd64-static.tar.xz
|
|
|
|
RUN mkdir -p /home/mediacms.io/bento4 && \
|
|
wget -q http://zebulon.bok.net/Bento4/binaries/Bento4-SDK-1-6-0-637.x86_64-unknown-linux.zip && \
|
|
unzip Bento4-SDK-1-6-0-637.x86_64-unknown-linux.zip -d /home/mediacms.io/bento4 && \
|
|
mv /home/mediacms.io/bento4/Bento4-SDK-1-6-0-637.x86_64-unknown-linux/* /home/mediacms.io/bento4/ && \
|
|
rm -rf /home/mediacms.io/bento4/Bento4-SDK-1-6-0-637.x86_64-unknown-linux && \
|
|
rm -rf /home/mediacms.io/bento4/docs && \
|
|
rm Bento4-SDK-1-6-0-637.x86_64-unknown-linux.zip
|
|
|
|
############ BASE RUNTIME IMAGE ############
|
|
FROM python:3.13.5-slim-bookworm AS base
|
|
|
|
LABEL org.opencontainers.image.version="7.3"
|
|
LABEL org.opencontainers.image.title="MediaCMS"
|
|
LABEL org.opencontainers.image.description="Modern, scalable and open source video platform"
|
|
|
|
SHELL ["/bin/bash", "-c"]
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
CELERY_APP='cms' \
|
|
VIRTUAL_ENV=/home/mediacms.io \
|
|
PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
|
|
RUN apt-get update -y && \
|
|
apt-get -y upgrade && \
|
|
apt-get install --no-install-recommends -y \
|
|
imagemagick \
|
|
procps \
|
|
build-essential \
|
|
pkg-config \
|
|
zlib1g-dev \
|
|
zlib1g \
|
|
libxml2-dev \
|
|
libxmlsec1-dev \
|
|
libxmlsec1-openssl \
|
|
libpq-dev \
|
|
gosu \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN mkdir -p /home/mediacms.io/mediacms/{logs,media_files,static} && \
|
|
cd /home/mediacms.io && \
|
|
python3 -m venv $VIRTUAL_ENV
|
|
|
|
COPY requirements.txt requirements-dev.txt ./
|
|
|
|
ARG DEVELOPMENT_MODE=False
|
|
RUN pip install --no-cache-dir uv && \
|
|
uv pip install --no-binary lxml --no-binary xmlsec -r requirements.txt && \
|
|
if [ "$DEVELOPMENT_MODE" = "True" ]; then \
|
|
echo "Installing development dependencies..." && \
|
|
uv pip install -r requirements-dev.txt; \
|
|
fi && \
|
|
apt-get purge -y --auto-remove \
|
|
build-essential \
|
|
pkg-config \
|
|
libxml2-dev \
|
|
libxmlsec1-dev \
|
|
libpq-dev
|
|
|
|
COPY --from=build-image /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
|
|
COPY --from=build-image /usr/local/bin/ffprobe /usr/local/bin/ffprobe
|
|
COPY --from=build-image /usr/local/bin/qt-faststart /usr/local/bin/qt-faststart
|
|
COPY --from=build-image /home/mediacms.io/bento4 /home/mediacms.io/bento4
|
|
|
|
COPY --chown=www-data:www-data . /home/mediacms.io/mediacms
|
|
WORKDIR /home/mediacms.io/mediacms
|
|
|
|
# Copy imagemagick policy for sprite thumbnail generation
|
|
COPY config/imagemagick/policy.xml /etc/ImageMagick-6/policy.xml
|
|
|
|
# Create www-data user directories and set permissions
|
|
RUN mkdir -p /var/run/mediacms && \
|
|
chown -R www-data:www-data /home/mediacms.io/mediacms/logs \
|
|
/home/mediacms.io/mediacms/media_files \
|
|
/home/mediacms.io/mediacms/static \
|
|
/var/run/mediacms
|
|
|
|
# Collect static files during build
|
|
RUN python manage.py collectstatic --noinput && \
|
|
chown -R www-data:www-data /home/mediacms.io/mediacms/static
|
|
|
|
# Run container as www-data user
|
|
USER www-data
|
|
|
|
############ WEB IMAGE (Django/uWSGI) ############
|
|
FROM base AS web
|
|
|
|
# Install uWSGI
|
|
RUN uv pip install uwsgi
|
|
|
|
# Copy uWSGI configuration
|
|
COPY config/uwsgi/uwsgi.ini /home/mediacms.io/mediacms/uwsgi.ini
|
|
|
|
EXPOSE 9000
|
|
|
|
CMD ["/home/mediacms.io/bin/uwsgi", "--ini", "/home/mediacms.io/mediacms/uwsgi.ini"]
|
|
|
|
############ WORKER IMAGE (Celery) ############
|
|
FROM base AS worker
|
|
|
|
# CMD will be overridden in docker-compose for different worker types
|
|
|
|
############ FULL WORKER IMAGE (Celery with extra codecs) ############
|
|
FROM worker AS worker-full
|
|
|
|
COPY requirements-full.txt ./
|
|
RUN mkdir -p /root/.cache/ && \
|
|
chmod go+rwx /root/ && \
|
|
chmod go+rwx /root/.cache/ && \
|
|
uv pip install -r requirements-full.txt
|