2023-08-19 13:40:20 +01:00
|
|
|
FROM node:20-slim as frontend
|
2022-07-28 14:42:12 +01:00
|
|
|
|
2023-07-16 16:22:35 +01:00
|
|
|
RUN apt-get update --yes --quiet && apt-get install --yes --quiet curl
|
|
|
|
|
2022-07-28 14:42:12 +01:00
|
|
|
COPY package.json package-lock.json ./
|
2022-08-27 18:22:58 +01:00
|
|
|
RUN npm ci --no-audit - -progress=false --omit=dev
|
2022-07-28 14:42:12 +01:00
|
|
|
|
|
|
|
# Compile static files
|
|
|
|
COPY ./scripts ./scripts
|
|
|
|
COPY ./static/src ./static/src
|
|
|
|
RUN npm run build
|
|
|
|
|
|
|
|
# The actual container
|
2024-01-05 17:09:04 +00:00
|
|
|
FROM python:3.12-slim as production
|
2022-07-28 14:42:12 +01:00
|
|
|
|
|
|
|
ENV VIRTUAL_ENV=/venv
|
|
|
|
|
2022-07-28 18:22:07 +01:00
|
|
|
RUN useradd website --create-home -u 1000 && mkdir /app $VIRTUAL_ENV && chown -R website /app $VIRTUAL_ENV
|
2022-07-28 14:42:12 +01:00
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
2022-08-27 18:22:58 +01:00
|
|
|
RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \
|
|
|
|
build-essential \
|
|
|
|
libpq-dev \
|
2022-08-27 20:22:20 +01:00
|
|
|
curl \
|
2022-09-29 19:12:21 +01:00
|
|
|
git \
|
2023-02-21 21:41:31 +00:00
|
|
|
nginx \
|
2023-11-23 13:54:57 +00:00
|
|
|
libnginx-mod-http-headers-more-filter \
|
2022-09-29 19:12:21 +01:00
|
|
|
# wand dependencies
|
2022-09-30 16:04:52 +01:00
|
|
|
libmagickwand-6.q16-6 libmagickwand-6.q16hdri-6 \
|
|
|
|
&& apt-get autoremove && rm -rf /var/lib/apt/lists/*
|
2022-08-27 18:22:58 +01:00
|
|
|
|
|
|
|
RUN curl -fsSL https://github.com/aptible/supercronic/releases/download/v0.2.1/supercronic-linux-amd64 -o /usr/local/bin/supercronic && chmod +x /usr/local/bin/supercronic
|
2022-08-20 20:48:27 +01:00
|
|
|
|
2022-08-27 15:11:18 +01:00
|
|
|
ENV PATH=$VIRTUAL_ENV/bin:$PATH \
|
2022-07-28 14:42:12 +01:00
|
|
|
PYTHONUNBUFFERED=1
|
|
|
|
|
|
|
|
EXPOSE 8000
|
|
|
|
|
2023-02-21 21:41:31 +00:00
|
|
|
RUN ln -fs /app/etc/nginx.conf /etc/nginx/sites-available/default
|
|
|
|
|
2022-07-28 14:42:12 +01:00
|
|
|
USER website
|
|
|
|
|
|
|
|
RUN python -m venv $VIRTUAL_ENV
|
2022-11-03 13:54:31 +00:00
|
|
|
COPY --chown=website requirements.txt ./
|
2022-09-19 21:34:27 +01:00
|
|
|
|
2022-11-03 13:54:31 +00:00
|
|
|
RUN pip install --no-cache -r requirements.txt
|
2022-07-28 14:42:12 +01:00
|
|
|
|
|
|
|
COPY --chown=website --from=frontend ./static/build ./static/build
|
|
|
|
|
2022-07-29 08:29:50 +01:00
|
|
|
COPY --chown=website ./etc ./etc
|
2022-07-28 14:42:12 +01:00
|
|
|
COPY --chown=website ./manage.py ./manage.py
|
|
|
|
COPY --chown=website ./website ./website
|
|
|
|
|
2023-10-27 17:37:58 +01:00
|
|
|
RUN cat ./etc/bashrc.sh >> ~/.bashrc
|
|
|
|
|
2022-10-30 19:16:25 +00:00
|
|
|
RUN SECRET_KEY=none python manage.py collectstatic --noinput --clear
|
2022-07-28 14:42:12 +01:00
|
|
|
|
2023-02-22 08:53:42 +00:00
|
|
|
CMD ["/app/etc/entrypoints/web"]
|
2022-07-28 14:53:22 +01:00
|
|
|
|
2022-07-28 14:42:12 +01:00
|
|
|
# Just dev stuff
|
|
|
|
FROM production as dev
|
|
|
|
|
2023-10-27 17:37:58 +01:00
|
|
|
COPY --chown=website .nvmrc ./
|
|
|
|
RUN curl https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash \
|
|
|
|
&& bash --login -c "nvm install --no-progress && nvm alias default $(nvm run --silent --version)"
|
|
|
|
|
2022-07-28 14:42:12 +01:00
|
|
|
# Swap user, so the following tasks can be run as root
|
|
|
|
USER root
|
2023-10-27 17:37:58 +01:00
|
|
|
|
|
|
|
RUN apt-get update --yes --quiet && apt-get install -y postgresql-client inotify-tools
|
2022-07-28 14:42:12 +01:00
|
|
|
RUN curl -sSf https://just.systems/install.sh | bash -s -- --to /usr/bin
|
|
|
|
|
|
|
|
# Restore user
|
|
|
|
USER website
|
|
|
|
|
2022-11-03 13:54:31 +00:00
|
|
|
COPY --chown=website dev-requirements.txt ./
|
|
|
|
RUN pip install --no-cache -r dev-requirements.txt
|
2022-07-28 14:42:12 +01:00
|
|
|
|
|
|
|
CMD sleep infinity
|