services: db: image: postgres:16 restart: unless-stopped env_file: - .env environment: POSTGRES_DB: app POSTGRES_USER: postgres POSTGRES_HOST_AUTH_METHOD: trust volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d app" ] interval: 10s timeout: 5s retries: 5 networks: - backend redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data command: redis-server --appendonly yes networks: - backend web: build: context: . network: host restart: unless-stopped env_file: - .env environment: POSTGRES_HOST: db POSTGRES_PORT: 5432 POSTGRES_DB: app CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/1 volumes: - static_data:/usr/src/app/static - media_data:/usr/src/app/media expose: - "8000" depends_on: db: condition: service_healthy redis: condition: service_started networks: - backend celery: build: context: . network: host restart: unless-stopped env_file: - .env environment: POSTGRES_HOST: db POSTGRES_PORT: 5432 POSTGRES_DB: app CELERY_BROKER_URL: redis://redis:6379/0 CELERY_RESULT_BACKEND: redis://redis:6379/1 command: celery -A dynamicweb worker --loglevel=info depends_on: db: condition: service_healthy redis: condition: service_started networks: - backend nginx: image: nginx:latest restart: unless-stopped ports: - "80:80" volumes: - ./deploy/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - static_data:/usr/src/app/static:ro - media_data:/usr/src/app/media:ro depends_on: - web networks: - backend volumes: postgres_data: redis_data: static_data: media_data: networks: backend: