123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- ###########
- # BUILDER #
- ###########
- # pull official base image
- FROM python:3.9.6-alpine as builder
- # set work directory
- WORKDIR /usr/src/app
- # 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/app/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/web
- RUN mkdir $APP_HOME
- RUN mkdir $APP_HOME/staticfiles
- RUN mkdir $APP_HOME/mediafiles
- WORKDIR $APP_HOME
- # install dependencies
- RUN apk update && apk add libpq
- COPY --from=builder /usr/src/app/wheels /wheels
- COPY --from=builder /usr/src/app/requirements.txt .
- RUN pip install --no-cache /wheels/*
- # copy entrypoint.prod.sh
- COPY ./entrypoint.prod.sh .
- RUN sed -i 's/\r$//g' $APP_HOME/entrypoint.prod.sh
- RUN chmod +x $APP_HOME/entrypoint.prod.sh
- # 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
- # run entrypoint.prod.sh
- ENTRYPOINT ["/home/app/web/entrypoint.prod.sh"]
|