diff --git a/backend/config/settings.py b/backend/config/settings.py index 2227e98..5908463 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -86,12 +86,26 @@ WSGI_APPLICATION = 'config.wsgi.application' # Database # https://docs.djangoproject.com/en/6.0/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', +POSTGRES_DB = os.getenv('POSTGRES_DB') +if POSTGRES_DB: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': POSTGRES_DB, + 'USER': os.getenv('POSTGRES_USER', 'postgres'), + 'PASSWORD': os.getenv('POSTGRES_PASSWORD', 'postgres'), + 'HOST': os.getenv('POSTGRES_HOST', 'localhost'), + 'PORT': os.getenv('POSTGRES_PORT', '5432'), + } } -} +else: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } + } + # Password validation diff --git a/docker-compose.yml b/docker-compose.yml index 8765909..74ad8cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,22 @@ services: + db: + image: postgres:16-alpine + container_name: divar_postgres + restart: always + environment: + POSTGRES_DB: ${POSTGRES_DB:-divar_crawler} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-divar_crawler}"] + interval: 5s + timeout: 5s + retries: 5 + redis: image: redis:7-alpine container_name: divar_redis @@ -20,11 +38,14 @@ services: - "8000:8000" environment: - REDIS_URL=redis://redis:6379/0 + - POSTGRES_HOST=db env_file: - .env volumes: - ./backend:/app/backend depends_on: + db: + condition: service_healthy redis: condition: service_healthy @@ -36,15 +57,16 @@ services: command: sh -c "celery -A config worker --loglevel=info -P gevent -c 20" environment: - REDIS_URL=redis://redis:6379/0 + - POSTGRES_HOST=db env_file: - .env volumes: - ./backend:/app/backend depends_on: + db: + condition: service_healthy redis: condition: service_healthy - backend: - condition: service_started frontend: build: @@ -60,3 +82,6 @@ services: - /app/frontend/node_modules depends_on: - backend + +volumes: + postgres_data: