102 lines
2.3 KiB
Text
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
|