########### # BUILDER # ########### # pull official base image FROM python:3.9.6-alpine as builder # set work directory WORKDIR /usr/src/gmba_django # set environment variables ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # install psycopg2 dependencies RUN apk update \ && apk add postgresql-dev gcc python3-dev musl-dev # lint RUN pip install --upgrade pip RUN pip install flake8==3.9.2 COPY . . #RUN flake8 --ignore=E501,F401 . # install dependencies COPY ./requirements.txt . RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/gmba_django/wheels -r requirements.txt ######### # FINAL # ######### # pull official base image FROM python:3.9.6-alpine # create directory for the app user RUN mkdir -p /home/app # create the app user RUN addgroup -S app && adduser -S app -G app # create the appropriate directories ENV HOME=/home/app ENV APP_HOME=/home/app/gmba_django RUN mkdir $APP_HOME RUN mkdir $APP_HOME/static RUN mkdir $APP_HOME/media #ADD gmba_django /data/app #WORKDIR /data/app/gmba_django # install dependencies RUN apk update && apk add libpq COPY --from=builder /usr/src/gmba_django/wheels /wheels COPY --from=builder /usr/src/gmba_django/requirements.txt . RUN pip install --no-cache /wheels/* # copy entrypoint.prod.sh COPY ./entrypoint.prod.sh /entrypoint.prod.sh COPY ./init.sh /init.sh RUN sed -i 's/\r$//g' /entrypoint.prod.sh RUN chmod +x /entrypoint.prod.sh # copy project #COPY . $APP_HOME ADD . /home/app/gmba_django WORKDIR /home/app/gmba_django # chown all the files to the app user RUN chown -R app:app $APP_HOME # change to the app user USER app #RUN python manage.py collectstatic --noinput # run entrypoint.prod.sh ENTRYPOINT ["/entrypoint.prod.sh"] EXPOSE 8000 CMD ["gunicorn", "--bind", "[::]:8000", "--chdir", "/home/app/gmba_django", "--workers", "3", "gmba_django.wsgi:application"]