newsreader/docker/django
Sonny Bakker f3ba0f1d09
Some checks failed
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/tests Pipeline was successful
Update ruff & uv usage
2025-03-23 16:19:15 +01:00

102 lines
2.3 KiB
Text

# stage 1
FROM python:3.11-bookworm AS backend
RUN apt-get update && apt-get install --yes --no-install-recommends \
vim \
curl \
gettext \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN mkdir /app/src
RUN mkdir /app/logs
RUN mkdir /app/media
COPY uv.lock pyproject.toml /app/
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
RUN uv sync --frozen --no-default-groups --no-install-project
# stage 2
FROM node:lts AS frontend-build
WORKDIR /app
COPY ./*.json ./*.js ./babel.config.js /app/
RUN npm ci
COPY ./src /app/src
RUN npm run build:prod
# stage 3
FROM python:3.11-bookworm AS production
RUN apt-get update && apt-get install --yes --no-install-recommends \
postgresql-client \
vim \
curl \
gettext \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN mkdir /app/logs
RUN mkdir /app/media
RUN mkdir /app/bin
COPY --from=backend /app/.venv /app/.venv
COPY --from=backend /app/uv.lock /app/pyproject.toml /app/
COPY --from=backend /bin/uv /bin/uv
COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh
COPY --from=frontend-build /app/src/newsreader/static /app/src/newsreader/static
COPY ./src /app/src
RUN uv sync --frozen --only-group production --extra sentry
RUN useradd -M -u 1000 newsreader
RUN chown -R newsreader:newsreader /app
USER newsreader
ARG POSTGRES_HOST
ARG POSTGRES_PORT
ARG POSTGRES_DB
ARG POSTGRES_USER
ARG POSTGRES_PASSWORD
ARG DJANGO_SECRET_KEY
ARG DJANGO_SETTINGS_MODULE
# Note that the static volume will have to be recreated to be pre-populated
# correctly with the latest static files. See
# https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container
RUN /app/.venv/bin/python src/manage.py collectstatic --noinput
# (optional) stage 4
FROM python:3.11-bookworm AS development
RUN apt-get update && apt-get install --yes --no-install-recommends \
vim \
curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN mkdir /app/logs
RUN mkdir /app/media
RUN mkdir /app/bin
COPY --from=backend /app/.venv /app/.venv
COPY --from=backend /app/uv.lock /app/pyproject.toml /app/
COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh
COPY --from=backend /app/src/ /app/src/
COPY --from=backend /bin/uv /bin/uv
RUN uv sync --frozen --group development