# stage 1 FROM python:3.9-bullseye as backend RUN apt-get update && apt-get install -y --no-install-recommends \ vim \ curl \ && rm -rf /var/lib/apt/lists/* WORKDIR /app RUN mkdir /app/src RUN mkdir /app/logs RUN mkdir /app/media COPY ./requirements /app/requirements RUN pip install -r requirements/production.txt # stage 2 FROM node:current-bullseye AS frontend-build RUN apt-get update && apt-get install -y --no-install-recommends \ git \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY ./build /app/build/ COPY ./*.json ./*.js ./.babelrc /app/ RUN npm ci COPY ./src /app/src RUN npm run build # stage 3 FROM python:3.9-bullseye as production RUN apt-get update && apt-get install -y --no-install-recommends \ postgresql-client \ 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 /usr/local/lib/python3.9 /usr/local/lib/python3.9 COPY --from=backend /usr/local/bin/gunicorn /usr/local/bin/gunicorn COPY --from=backend /usr/local/bin/celery /usr/local/bin/celery COPY --from=backend /app/src/ /app/src/ 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 useradd -M -u 1000 newsreader RUN chown -R newsreader:newsreader /app USER newsreader ARG COMMIT_HASH ARG RELEASE=latest ENV RELEASE=${RELEASE} \ GIT_SHA=${COMMIT_HASH} \ PYTHONUNBUFFERED=1 \ DJANGO_SETTINGS_MODULE=newsreader.conf.production ARG SECRET_KEY=dummy RUN python src/manage.py collectstatic --noinput \ && python src/manage.py compilemessages # (optional) stage 4 FROM python:3.9-bullseye as development RUN apt-get update && apt-get install -y --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 ./requirements /app/requirements COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh COPY --from=backend /usr/local/lib/python3.9 /usr/local/lib/python3.9 COPY --from=backend /usr/local/bin/celery /usr/local/bin/celery COPY --from=backend /app/src/ /app/src/ RUN pip install -r requirements/development.txt RUN useradd -M -u 1000 newsreader RUN chown -R newsreader:newsreader /app USER newsreader