services: db: image: postgres:16-alpine restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: ${PG_NAME} POSTGRES_USER: ${PG_USER} POSTGRES_PASSWORD: ${PG_PASSWORD} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${PG_USER} -d ${PG_NAME}"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy volumes: - static_files:/app/staticfiles - media_files:/app/media env_file: .env environment: ENVIRONMENT: production PG_HOST: db PG_PORT: "5432" REDIS_HOST: redis REDIS_PORT: "6379" REDIS_URL: redis://redis:6379/1 CELERY_BROKER_URL: redis://redis:6379/0 celery_worker: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped command: [] depends_on: db: condition: service_healthy redis: condition: service_healthy env_file: .env environment: ROLE: worker ENVIRONMENT: production PG_HOST: db PG_PORT: "5432" REDIS_HOST: redis REDIS_PORT: "6379" REDIS_URL: redis://redis:6379/1 CELERY_BROKER_URL: redis://redis:6379/0 celery_beat: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped command: [] depends_on: db: condition: service_healthy redis: condition: service_healthy env_file: .env environment: ROLE: beat ENVIRONMENT: production PG_HOST: db PG_PORT: "5432" REDIS_HOST: redis REDIS_PORT: "6379" REDIS_URL: redis://redis:6379/1 CELERY_BROKER_URL: redis://redis:6379/0 frontend: build: context: ./frontend dockerfile: Dockerfile args: NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost/api} restart: unless-stopped depends_on: - backend environment: NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost/api} nginx: image: nginx:alpine restart: unless-stopped ports: - "127.0.0.1:8060:80" depends_on: - backend - frontend volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro - static_files:/vol/static:ro - media_files:/vol/media:ro volumes: postgres_data: redis_data: static_files: media_files: