services: web: build: context: . dockerfile: infra/docker/Dockerfile target: runtime restart: unless-stopped env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.prod RUN_COLLECTSTATIC: "true" DATABASE_URL: postgres://saas_user:saas_pass@db:5432/saas_db REDIS_URL: redis://redis:6379/0 CELERY_BROKER_URL: redis://redis:6379/1 CELERY_RESULT_BACKEND: redis://redis:6379/2 expose: - "8000" volumes: - static_volume:/app/staticfiles depends_on: db: condition: service_healthy redis: condition: service_healthy celery: build: context: . dockerfile: infra/docker/Dockerfile target: runtime restart: unless-stopped command: celery -A config worker -l info env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.prod DATABASE_URL: postgres://saas_user:saas_pass@db:5432/saas_db REDIS_URL: redis://redis:6379/0 CELERY_BROKER_URL: redis://redis:6379/1 CELERY_RESULT_BACKEND: redis://redis:6379/2 depends_on: db: condition: service_healthy redis: condition: service_healthy celery-beat: build: context: . dockerfile: infra/docker/Dockerfile target: runtime restart: unless-stopped command: celery -A config beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.prod DATABASE_URL: postgres://saas_user:saas_pass@db:5432/saas_db REDIS_URL: redis://redis:6379/0 CELERY_BROKER_URL: redis://redis:6379/1 CELERY_RESULT_BACKEND: redis://redis:6379/2 depends_on: db: condition: service_healthy redis: condition: service_healthy db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: saas_db POSTGRES_USER: saas_user POSTGRES_PASSWORD: saas_pass volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U saas_user -d saas_db"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 nginx: image: nginx:1.27-alpine restart: unless-stopped ports: - "80:80" volumes: - ./infra/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - static_volume:/app/staticfiles:ro depends_on: - web volumes: postgres_data: static_volume: