From 2de8a47b2de18b88388353e2712ad1cb16244c64 Mon Sep 17 00:00:00 2001 From: NaGaii1994 Date: Thu, 3 Nov 2022 21:21:38 +0900 Subject: [PATCH 1/2] [fix]Change docker image from alpine to slim-bullseye. --- Dockerfile | 30 ++++++++++++++--------------- docker-compose.yml | 6 ++++-- test/example/requirements.txt | 2 ++ wait_for_postgres.py | 36 +++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 wait_for_postgres.py diff --git a/Dockerfile b/Dockerfile index 24afeb95..2cd803eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,19 @@ -FROM python:3.8-alpine +FROM python:3.10-slim-bullseye -RUN apk update \ - && apk add --virtual build-deps gcc python3-dev musl-dev \ - && apk add bash \ - && apk add postgresql \ - && apk add postgresql-dev \ - && pip install psycopg2 \ - && apk add jpeg-dev zlib-dev libjpeg \ - && pip install Pillow \ - && apk del build-deps +# Install apt packages +RUN apt-get update && apt-get install --no-install-recommends -y \ + # dependencies for building Python packages + build-essential \ + # psycopg2 dependencies + libpq-dev \ + # Translations dependencies + gettext \ + # cleaning up unused files + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -rf /var/lib/apt/lists/* -WORKDIR /code/ COPY . /code/ WORKDIR /code/ -RUN pip install -r /code/test/example/requirements.txt - -RUN apk add --no-cache postgresql-libs - -ENTRYPOINT ["/code/docker-entrypoint.sh"] +RUN pip install -r /code/test/example/requirements.txt \ + && python -m pip install django-comments-dab[markdown] diff --git a/docker-compose.yml b/docker-compose.yml index 923a3474..1c7b3972 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,9 @@ services: build: context: . dockerfile: Dockerfile - command: python manage.py runserver 0.0.0.0:8000 + command: > + bash -c "python wait_for_postgres.py && + /code/docker-entrypoint.sh" ports: - "8000:8000" volumes: @@ -26,7 +28,7 @@ services: DB_PORT: 5432 DB_USER: postgres db: - image: postgres:9.6 + image: postgres:14 ports: - "5432:5432" environment: diff --git a/test/example/requirements.txt b/test/example/requirements.txt index 1cece856..2101f488 100644 --- a/test/example/requirements.txt +++ b/test/example/requirements.txt @@ -10,3 +10,5 @@ cssselect coverage flake8 tox +# used for postgresql connection +psycopg2 diff --git a/wait_for_postgres.py b/wait_for_postgres.py new file mode 100644 index 00000000..2c4d6028 --- /dev/null +++ b/wait_for_postgres.py @@ -0,0 +1,36 @@ +import os +import logging +from time import time, sleep +import psycopg2 +check_timeout = os.getenv("POSTGRES_CHECK_TIMEOUT", 30) +check_interval = os.getenv("POSTGRES_CHECK_INTERVAL", 1) +interval_unit = "second" if check_interval == 1 else "seconds" +config = { + "dbname": os.getenv("DB_NAME", "postgres"), + "user": os.getenv("DB_USER", "postgres"), + "password": os.getenv("DB_PASSWORD", "django-comments-dab"), + "host": os.getenv("DB_HOST", "db") +} + +start_time = time() +logger = logging.getLogger() +logger.setLevel(logging.INFO) +logger.addHandler(logging.StreamHandler()) + + +def pg_isready(host, user, password, dbname): + while time() - start_time < check_timeout: + try: + conn = psycopg2.connect(**vars()) + logger.info("Postgres is ready! ✨ 💅") + conn.close() + return True + except psycopg2.OperationalError: + logger.info(f"Postgres isn't ready. Waiting for {check_interval} {interval_unit}...") + sleep(check_interval) + + logger.error(f"We could not connect to Postgres within {check_timeout} seconds.") + return False + + +pg_isready(**config) From 02ee66a0fb98b6ffe83e026bcecba387dcbdc4fa Mon Sep 17 00:00:00 2001 From: NaGaii1994 Date: Sat, 5 Nov 2022 15:49:10 +0900 Subject: [PATCH 2/2] fix(#260): Remain installation of psycopg2 on Dockerfile. --- Dockerfile | 1 + test/example/requirements.txt | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2cd803eb..9a524ee6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,4 +16,5 @@ COPY . /code/ WORKDIR /code/ RUN pip install -r /code/test/example/requirements.txt \ + && pip install psycopg2 \ && python -m pip install django-comments-dab[markdown] diff --git a/test/example/requirements.txt b/test/example/requirements.txt index 2101f488..972b934e 100644 --- a/test/example/requirements.txt +++ b/test/example/requirements.txt @@ -9,6 +9,4 @@ beautifulsoup4 cssselect coverage flake8 -tox -# used for postgresql connection -psycopg2 +tox \ No newline at end of file