services: db: image: postgres:16 restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-awareness} POSTGRES_USER: ${POSTGRES_USER:-awareness} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-awareness} volumes: - pg_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-awareness}"] interval: 5s timeout: 5s retries: 10 backend: build: ./backend restart: unless-stopped environment: DJANGO_DEBUG: ${DJANGO_DEBUG:-False} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-change-me-in-production} FIELD_ENCRYPTION_KEY: ${FIELD_ENCRYPTION_KEY:-} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost} CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS:-http://localhost} POSTGRES_DB: ${POSTGRES_DB:-awareness} POSTGRES_USER: ${POSTGRES_USER:-awareness} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-awareness} POSTGRES_HOST: db POSTGRES_PORT: 5432 volumes: - static_data:/app/staticfiles - media_data:/app/media depends_on: db: condition: service_healthy scheduler: build: ./backend restart: unless-stopped command: sh -c "while true; do python manage.py send_deadline_reminders; sleep 86400; done" environment: DJANGO_DEBUG: ${DJANGO_DEBUG:-False} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-change-me-in-production} FIELD_ENCRYPTION_KEY: ${FIELD_ENCRYPTION_KEY:-} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost} CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS:-http://localhost} POSTGRES_DB: ${POSTGRES_DB:-awareness} POSTGRES_USER: ${POSTGRES_USER:-awareness} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-awareness} POSTGRES_HOST: db POSTGRES_PORT: 5432 depends_on: db: condition: service_healthy frontend: build: ./frontend restart: unless-stopped ports: - "${HTTP_PORT:-8080}:80" volumes: - static_data:/usr/share/nginx/django-static:ro - media_data:/usr/share/nginx/django-media:ro depends_on: - backend volumes: pg_data: static_data: media_data: