From fbe07b34fbd542ddaaaec42fd32733f9af51a09e Mon Sep 17 00:00:00 2001 From: Vova Date: Wed, 13 May 2026 13:55:12 +0200 Subject: [PATCH 1/3] Code Write --- .dockerignore | 0 Dockerfile | 0 cinema/management/__init__.py | 0 cinema/management/commands/__init__.py | 0 cinema/management/commands/wait_for_db.py | 22 ++++++++++++++++++++++ docker-compose.yml | 0 6 files changed, 22 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 cinema/management/__init__.py create mode 100644 cinema/management/commands/__init__.py create mode 100644 cinema/management/commands/wait_for_db.py create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..e69de29b diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e69de29b diff --git a/cinema/management/__init__.py b/cinema/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cinema/management/commands/__init__.py b/cinema/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cinema/management/commands/wait_for_db.py b/cinema/management/commands/wait_for_db.py new file mode 100644 index 00000000..a3073665 --- /dev/null +++ b/cinema/management/commands/wait_for_db.py @@ -0,0 +1,22 @@ +import time + +from django.core.management import BaseCommand +from django.db import connections +from django.db.utils import OperationalError + + +class Command(BaseCommand): + help = "Wait for database to become available" + + def handle(self, *args, **options): + self.stdout.write("Waiting for database...") + db_conn = None + while not db_conn: + try: + db_conn = connections["default"] + db_conn.ensure_connection() + self.stdout.write(self.style.SUCCESS("Database available")) + except OperationalError: + self.stdout.write("Database unavailable, waiting 1 second...") + time.sleep(1) + return diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..e69de29b From 84fd041df771921cc20ecceba6b31611dcf509bb Mon Sep 17 00:00:00 2001 From: Vova Date: Wed, 13 May 2026 13:55:37 +0200 Subject: [PATCH 2/3] Code Write --- .dockerignore | 4 ++++ Dockerfile | 13 +++++++++++ cinema/management/commands/wait_for_db.py | 1 - cinema_service/settings.py | 12 +++++++--- docker-compose.yml | 27 +++++++++++++++++++++++ requirements.txt | 2 ++ 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/.dockerignore b/.dockerignore index e69de29b..83fcc92a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -0,0 +1,4 @@ +.venv +Dockerfile +README.md +.idea \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e69de29b..db46f879 100644 --- a/Dockerfile +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.13.13-alpine3.23 +LABEL maintainer="vovakucin082@gmail.com" + +ENV PYTHOUNNBUFFERED 1 + +WORKDIR app/ + +COPY requirements.txt requirements.txt +RUN pip install -r requirements.txt + +COPY . . + +RUN mkdir -p /app/files/media diff --git a/cinema/management/commands/wait_for_db.py b/cinema/management/commands/wait_for_db.py index a3073665..cb20e340 100644 --- a/cinema/management/commands/wait_for_db.py +++ b/cinema/management/commands/wait_for_db.py @@ -6,7 +6,6 @@ class Command(BaseCommand): - help = "Wait for database to become available" def handle(self, *args, **options): self.stdout.write("Waiting for database...") diff --git a/cinema_service/settings.py b/cinema_service/settings.py index 90dde772..8f15ada2 100644 --- a/cinema_service/settings.py +++ b/cinema_service/settings.py @@ -9,6 +9,7 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/4.0/ref/settings/ """ +import os from datetime import timedelta from pathlib import Path @@ -86,8 +87,12 @@ DATABASES = { "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": BASE_DIR / "db.sqlite3", + "ENGINE": "django.db.backends.postgresql", + "NAME": os.environ.get("POSTGRES_DB"), + "USER": os.environ.get("POSTGRES_USER"), + "PASSWORD": os.environ.get("POSTGRES_PASSWORD"), + "HOST": os.environ.get("POSTGRES_HOST"), + "PORT": os.environ.get("POSTGRES_PORT"), } } @@ -134,7 +139,8 @@ STATIC_URL = "static/" MEDIA_URL = "/media/" -MEDIA_ROOT = BASE_DIR / "media" + +MEDIA_ROOT = "files/media/" # Default primary key field type # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field diff --git a/docker-compose.yml b/docker-compose.yml index e69de29b..f942cf81 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + cinema: + build: + context: . + env_file: + - .env + ports: + - "8001:8000" + volumes: + - ./:/app + - my_media:/files/media + command: ["sh", "-c", "python manage.py wait_for_db && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] + depends_on: + - db + db: + image: postgres:16.0-alpine3.17 + restart: always + env_file: + - .env + ports: + - "5432:5432" + volumes: + - my_db:$PGDATA + +volumes: + my_db: + my_media: \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2dc12c67..30d427aa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,5 @@ djangorestframework djangorestframework-simplejwt drf-spectacular Pillow +psycopg==3.3.4 +psycopg-binary==3.3.4 From e8c21f30cce5eed842dffa609ea11634676ec893 Mon Sep 17 00:00:00 2001 From: Vova Date: Wed, 13 May 2026 14:03:58 +0200 Subject: [PATCH 3/3] FIX --- Dockerfile | 4 ++-- docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index db46f879..9780ac8c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ FROM python:3.13.13-alpine3.23 LABEL maintainer="vovakucin082@gmail.com" -ENV PYTHOUNNBUFFERED 1 +ENV PYTHONUNBUFFERED 1 -WORKDIR app/ +WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt diff --git a/docker-compose.yml b/docker-compose.yml index f942cf81..5a4f619a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: - "8001:8000" volumes: - ./:/app - - my_media:/files/media + - my_media:/app/files/media command: ["sh", "-c", "python manage.py wait_for_db && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] depends_on: - db @@ -20,7 +20,7 @@ services: ports: - "5432:5432" volumes: - - my_db:$PGDATA + - my_db:/var/lib/postgresql/data volumes: my_db: