version: '3.9' services: db: image: postgres:17 restart: always environment: POSTGRES_DB: no_copy_ POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "54320:5432" volumes: - pgdata:/var/lib/postgresql/data container_name: postgres networks: app-network: aliases: - database app: build: . container_name: app-backend environment: FILE_STORAGE_PATH: /data/uploads MAX_FILE_SIZE: 1073741824 FILE_CHUNK_SIZE: 5242880 POSTGRES_DB: no_copy_ POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_PORT: 5432 POSTGRES_HOST: db depends_on: - db ports: - "80:8080" networks: app-network: aliases: - app - backend - api volumes: - ./my-uploads:/data/uploads:rw grafana: image: grafana/grafana:10.3.1 container_name: grafana ports: - "3000:3000" depends_on: prometheus: condition: service_healthy loki: condition: service_healthy tempo: condition: service_started alloy: condition: service_started environment: GF_AUTH_ANONYMOUS_ENABLED: "true" GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin GF_METRICS_ENABLED: "true" volumes: - ./infrastructure/grafana/provisioning:/etc/grafana/provisioning - ./infrastructure/grafana/dashboards:/var/lib/grafana/dashboards healthcheck: test: [ "CMD", "wget", "--spider", "http://localhost:3000/api/health" ] interval: 10s timeout: 5s retries: 10 networks: - app-network prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./infrastructure/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml healthcheck: test: [ "CMD", "wget", "--spider", "http://localhost:9090/-/healthy" ] interval: 10s timeout: 5s retries: 5 networks: - app-network loki: image: grafana/loki:2.9.2 container_name: loki ports: - "3100:3100" volumes: - ./infrastructure/loki/loki-config.yaml:/etc/loki/loki-config.yaml:ro healthcheck: test: [ "CMD", "wget", "--spider", "-q", "http://localhost:3100/ready" ] interval: 10s timeout: 5s retries: 5 networks: - app-network tempo: image: grafana/tempo:2.4.1 container_name: tempo command: [ "-config.file=/etc/tempo/tempo.yaml" ] volumes: - ./infrastructure/tempo/tempo.yaml:/etc/tempo/tempo.yaml - tempo_data:/var/tempo ports: - "3200:3200" networks: - app-network alloy: image: grafana/alloy:latest container_name: alloy user: root ports: - "9080:9080" - "4317:4317" - "4318:4318" volumes: - ./infrastructure/alloy/config.alloy:/etc/alloy/config.alloy:ro - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock - /var/log:/var/log:ro environment: GRAFANA_LOKI_URL: http://loki:3100/loki/api/v1/push command: - run - --server.http.listen-addr=0.0.0.0:9080 - --storage.path=/var/lib/alloy/data - /etc/alloy/config.alloy networks: - app-network volumes: pgdata: artifacts: tempo_data: loki_data: loki_chunks: loki_index: loki_rules: # uploads_volume: networks: app-network: external: true driver: bridge