services: db: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-ielts_mock} POSTGRES_USER: ${POSTGRES_USER:-ielts_mock} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-ielts_mock} -d ${POSTGRES_DB:-ielts_mock}"] interval: 10s timeout: 5s retries: 5 web: build: . restart: unless-stopped env_file: - path: .env required: false environment: DATABASE_URL: postgresql://${POSTGRES_USER:-ielts_mock}:${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}@db:5432/${POSTGRES_DB:-ielts_mock} DJANGO_DEBUG: ${DJANGO_DEBUG:-False} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1} DJANGO_CSRF_TRUSTED_ORIGINS: ${DJANGO_CSRF_TRUSTED_ORIGINS:-http://localhost:8000} ports: - "${PORT:-8000}:${PORT:-8000}" volumes: - media_data:/app/media depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/', timeout=5)"] interval: 30s timeout: 10s retries: 3 volumes: postgres_data: media_data: