services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: todo POSTGRES_PASSWORD: todo POSTGRES_DB: todo ports: - "5436:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U todo -d todo"] interval: 5s timeout: 5s retries: 10 postgres-exporter: image: prometheuscommunity/postgres-exporter:latest restart: unless-stopped environment: DATA_SOURCE_NAME: postgresql://todo:todo@postgres:5432/todo?sslmode=disable ports: - "9187:9187" depends_on: postgres: condition: service_healthy api: build: ./apps/api restart: unless-stopped environment: DATABASE_URL: postgres://todo:todo@postgres:5432/todo JWT_SECRET: dev-secret-change-me PORT: 4000 ports: - "4000:4000" depends_on: postgres: condition: service_healthy cpus: 1 mem_limit: 512m cadvisor: image: gcr.io/cadvisor/cadvisor:latest restart: unless-stopped ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro privileged: true prometheus: image: prom/prometheus:latest restart: unless-stopped ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro depends_on: - api - cadvisor grafana: image: grafana/grafana:latest restart: unless-stopped ports: - "3001:3000" depends_on: - prometheus volumes: postgres_data: