From e6852d6c773bd8f062b9707f82e2cbc705453038 Mon Sep 17 00:00:00 2001 From: rlacko <rlacko@sch.bme.hu> Date: Tue, 4 Feb 2020 21:06:27 +0100 Subject: [PATCH] production Dockerfile and script --- Dockerfile | 2 +- Dockerfile.prod | 69 ++++++++++++++++++++++++++++ src/entrypoint.prod.sh | 14 ++++++ src/entrypoint.sh | 2 +- src/kszkepzes/settings/production.py | 2 +- src/manage.py | 2 +- 6 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 Dockerfile.prod create mode 100755 src/entrypoint.prod.sh diff --git a/Dockerfile b/Dockerfile index e1e843b..0dd2d90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # pull official base image -FROM python:3.8.0 +FROM python:3.8.1 # set work directory WORKDIR /usr/src/app diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..ef6ac28 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,69 @@ +########### +# BUILDER # +########### + +# pull official base image +FROM python:3.8.1 as builder + +# set work directory +WORKDIR /usr/src/app + +# set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# install dependencies +RUN apt-get -y update +RUN apt-get install -y python python-pip python-dev python-django-extensions postgresql-client netcat +RUN apt-get -y update && apt-get -y autoremove + +# lint +RUN pip install --upgrade pip +RUN pip install flake8 +COPY ./src /usr/src/app/ +#RUN flake8 --max-line-length=125 --exclude=kszkepzes,migrations . + +# install dependencies +COPY ./requirements/production.txt /usr/src/app/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.8.1 + +# create directory for the app user +RUN mkdir -p /home/app + +# create the app user +RUN groupadd app && useradd -g app app + +# create the appropriate directories +ENV HOME=/home/app +ENV APP_HOME=/home/app/kszkepzes-backend +RUN mkdir $APP_HOME +WORKDIR $APP_HOME + +# install dependencies +RUN apt-get -y update && apt-get install netcat -y +COPY --from=builder /usr/src/app/wheels /wheels +COPY --from=builder /usr/src/app/requirements.txt . +RUN pip install --upgrade pip +RUN pip install --no-cache /wheels/* + +# copy entrypoint-prod.sh +COPY ./src/entrypoint.prod.sh $APP_HOME + +# copy project +COPY ./src $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.sh +ENTRYPOINT ["/home/app/kszkepzes-backend/entrypoint.prod.sh"] \ No newline at end of file diff --git a/src/entrypoint.prod.sh b/src/entrypoint.prod.sh new file mode 100755 index 0000000..5236bfa --- /dev/null +++ b/src/entrypoint.prod.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ "$DJANGO_SETTINGS_MODULE" = "kszkepzes.settings.production" ] +then + echo "Waiting for postgres..." + + while ! nc -z $DB_HOST $DB_PORT; do + sleep 0.1 + done + + echo "PostgreSQL started" +fi + +exec "$@" \ No newline at end of file diff --git a/src/entrypoint.sh b/src/entrypoint.sh index 08fe051..84c4515 100755 --- a/src/entrypoint.sh +++ b/src/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ "$DATABASE" = "postgres" ] +if [ "$DJANGO_SETTINGS_MODULE" = "kszkepzes.settings.production" ] then echo "Waiting for postgres..." diff --git a/src/kszkepzes/settings/production.py b/src/kszkepzes/settings/production.py index 7c121b5..785c982 100644 --- a/src/kszkepzes/settings/production.py +++ b/src/kszkepzes/settings/production.py @@ -6,7 +6,7 @@ ALLOWED_HOSTS = ['*'] DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql', + 'ENGINE': os.getenv('DB_ENGINE', 'django.db.backends.postgresql'), 'NAME': os.getenv('DB_NAME', 'kszkepzes'), 'USER': os.getenv('DB_USER'), 'PASSWORD': os.getenv('DB_PASSWORD'), diff --git a/src/manage.py b/src/manage.py index 57605e1..e4402b7 100755 --- a/src/manage.py +++ b/src/manage.py @@ -3,7 +3,7 @@ import os import sys if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kszkepzes.settings.production") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kszkepzes.settings.local") try: from django.core.management import execute_from_command_line except ImportError: -- GitLab