services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: nexafabric POSTGRES_USER: nexafabric POSTGRES_PASSWORD: nexafabric healthcheck: test: ["CMD-SHELL", "pg_isready -U nexafabric -d nexafabric"] interval: 10s timeout: 5s retries: 5 volumes: - postgres-data:/var/lib/postgresql/data redis: image: redis:7-alpine healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 api: build: context: ./backend env_file: .env depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')"] interval: 15s timeout: 5s retries: 5 worker: build: context: ./backend env_file: .env command: ["python", "-m", "app.workers.worker"] depends_on: api: condition: service_healthy frontend: build: context: ./frontend environment: VITE_API_BASE_URL: /api/v1 depends_on: api: condition: service_healthy proxy: image: nginx:1.27-alpine ports: - "8080:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - api - frontend volumes: postgres-data: