diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c074f6a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.venv +db.sqlite3 diff --git a/Dockerfile.traefik b/Dockerfile.traefik new file mode 100644 index 0000000..aa83b5c --- /dev/null +++ b/Dockerfile.traefik @@ -0,0 +1,3 @@ +FROM traefik:v2.9.6 + +COPY ./traefik.prod.toml ./etc/traefik/traefik.toml diff --git a/app/Dockerfile b/app/Dockerfile new file mode 100644 index 0000000..b174d63 --- /dev/null +++ b/app/Dockerfile @@ -0,0 +1,18 @@ +# app/Dockerfile + +# pull the official docker image +FROM python:3.11.2-slim + +# set work directory +WORKDIR /app + +# set env variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# install dependencies +COPY requirements.txt . +RUN pip install -r requirements.txt + +# copy project +COPY . . diff --git a/app/Dockerfile.prod b/app/Dockerfile.prod new file mode 100644 index 0000000..b6788eb --- /dev/null +++ b/app/Dockerfile.prod @@ -0,0 +1,62 @@ +########### +# BUILDER # +########### + +# pull official base image +FROM python:3.11-slim as builder + +# set work directory +WORKDIR /app + +# set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# install system dependencies +RUN apt-get update && \ + apt-get install -y --no-install-recommends gcc + +# lint +RUN pip install --upgrade pip +RUN pip install flake8==6.0.0 +COPY . . +RUN flake8 --ignore=E501,F401 . + +# install python dependencies +COPY requirements.txt . +RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt + + +######### +# FINAL # +######### + +# pull official base image +FROM python:3.11-slim + +# create directory for the app user +RUN mkdir -p /home/app + +# create the app user +RUN addgroup --system app && adduser --system --group app + +# create the appropriate directories +ENV HOME=/home/app +ENV APP_HOME=/home/app/web +RUN mkdir $APP_HOME +WORKDIR $APP_HOME + +# install dependencies +COPY --from=builder /usr/src/app/wheels /wheels +COPY --from=builder /app/requirements.txt . +RUN pip install --upgrade pip +RUN pip install --no-cache /wheels/* + +# copy project +COPY . $APP_HOME + +# chown all the files to the app user +RUN chown -R app:app $APP_HOME + +# change to the app user +USER app diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..2ecf2e2 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,53 @@ +version: '3.8' + +services: + web: + build: + context: ./app + dockerfile: Dockerfile.prod + command: bash -c 'while !