mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-20 13:36:05 -05:00
Docker story refactoring
This commit is contained in:
81
Dockerfile
81
Dockerfile
@@ -1,6 +1,5 @@
|
||||
FROM python:3.13.5-slim-bookworm AS build-image
|
||||
|
||||
# Install system dependencies needed for downloading and extracting
|
||||
RUN apt-get update -y && \
|
||||
apt-get install -y --no-install-recommends wget xz-utils unzip && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
@@ -14,7 +13,6 @@ RUN mkdir -p 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
|
||||
|
||||
# Install Bento4 in the specified location
|
||||
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 && \
|
||||
@@ -26,20 +24,21 @@ RUN mkdir -p /home/mediacms.io/bento4 && \
|
||||
############ 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
|
||||
ENV PYTHONDONTWRITEBYTECODE=1
|
||||
ENV CELERY_APP='cms'
|
||||
ENV VIRTUAL_ENV=/home/mediacms.io
|
||||
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
CELERY_APP='cms' \
|
||||
VIRTUAL_ENV=/home/mediacms.io \
|
||||
PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
|
||||
# Install system dependencies first
|
||||
RUN apt-get update -y && \
|
||||
apt-get -y upgrade && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
supervisor \
|
||||
nginx \
|
||||
imagemagick \
|
||||
procps \
|
||||
build-essential \
|
||||
@@ -50,18 +49,16 @@ RUN apt-get update -y && \
|
||||
libxmlsec1-dev \
|
||||
libxmlsec1-openssl \
|
||||
libpq-dev \
|
||||
gosu \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Set up virtualenv first
|
||||
RUN mkdir -p /home/mediacms.io/mediacms/{logs} && \
|
||||
RUN mkdir -p /home/mediacms.io/mediacms/{logs,media_files,static} && \
|
||||
cd /home/mediacms.io && \
|
||||
python3 -m venv $VIRTUAL_ENV
|
||||
|
||||
# Copy requirements files
|
||||
COPY requirements.txt requirements-dev.txt ./
|
||||
|
||||
# Install Python dependencies using pip (within virtualenv)
|
||||
ARG DEVELOPMENT_MODE=False
|
||||
RUN pip install --no-cache-dir uv && \
|
||||
uv pip install --no-binary lxml --no-binary xmlsec -r requirements.txt && \
|
||||
@@ -76,38 +73,54 @@ RUN pip install --no-cache-dir uv && \
|
||||
libxmlsec1-dev \
|
||||
libpq-dev
|
||||
|
||||
# Copy ffmpeg and Bento4 from build image
|
||||
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 application files
|
||||
COPY . /home/mediacms.io/mediacms
|
||||
COPY --chown=www-data:www-data . /home/mediacms.io/mediacms
|
||||
WORKDIR /home/mediacms.io/mediacms
|
||||
|
||||
# required for sprite thumbnail generation for large video files
|
||||
COPY deploy/docker/policy.xml /etc/ImageMagick-6/policy.xml
|
||||
# Copy imagemagick policy for sprite thumbnail generation
|
||||
COPY config/imagemagick/policy.xml /etc/ImageMagick-6/policy.xml
|
||||
|
||||
# Set process control environment variables
|
||||
ENV ENABLE_UWSGI='yes' \
|
||||
ENABLE_NGINX='yes' \
|
||||
ENABLE_CELERY_BEAT='yes' \
|
||||
ENABLE_CELERY_SHORT='yes' \
|
||||
ENABLE_CELERY_LONG='yes' \
|
||||
ENABLE_MIGRATIONS='yes'
|
||||
# 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
|
||||
|
||||
EXPOSE 9000 80
|
||||
# Collect static files during build
|
||||
RUN python manage.py collectstatic --noinput && \
|
||||
chown -R www-data:www-data /home/mediacms.io/mediacms/static
|
||||
|
||||
RUN chmod +x ./deploy/docker/entrypoint.sh
|
||||
# Run container as www-data user
|
||||
USER www-data
|
||||
|
||||
ENTRYPOINT ["./deploy/docker/entrypoint.sh"]
|
||||
CMD ["./deploy/docker/start.sh"]
|
||||
############ 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
|
||||
|
||||
############ FULL IMAGE ############
|
||||
FROM base AS full
|
||||
COPY requirements-full.txt ./
|
||||
RUN mkdir -p /root/.cache/ && \
|
||||
chmod go+rwx /root/ && \
|
||||
chmod go+rwx /root/.cache/
|
||||
RUN uv pip install -r requirements-full.txt
|
||||
chmod go+rwx /root/.cache/ && \
|
||||
uv pip install -r requirements-full.txt
|
||||
|
||||
Reference in New Issue
Block a user