Files
filezzy-staging/docker/docker-compose.monitoring.yml
2026-02-04 17:48:01 +01:00

141 lines
4.6 KiB
YAML

# =============================================================================
# ToolsPlatform - Phase 10 Monitoring Overlay (Staging & Production)
# =============================================================================
# Adds Prometheus, Grafana, Loki, Promtail, and backup. Use with base + dev +
# staging + prod so you can see if all is OK (Grafana, Prometheus UI).
#
# Usage (staging with monitoring):
# docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.staging.yml -f docker-compose.prod.yml -f docker-compose.monitoring.yml --env-file ../.env.staging up -d
#
# Staging access (no Traefik): Grafana http://YOUR_SERVER:3002 Prometheus http://YOUR_SERVER:9090
# Set GRAFANA_PASSWORD in .env.staging (admin user).
# =============================================================================
services:
# ---------------------------------------------------------------------------
# Prometheus - scrapes api-gateway /metrics and self
# ---------------------------------------------------------------------------
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ../config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
networks:
- backend
restart: unless-stopped
ports:
- "9090:9090"
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 256M
# ---------------------------------------------------------------------------
# Grafana - dashboards and Explore (Prometheus + Loki pre-provisioned)
# ---------------------------------------------------------------------------
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin}
GF_USERS_ALLOW_SIGN_UP: "false"
GF_SERVER_HTTP_PORT: "3000"
volumes:
- grafana_data:/var/lib/grafana
- ../config/grafana/provisioning:/etc/grafana/provisioning:ro
networks:
- frontend
- backend
restart: unless-stopped
ports:
- "3002:3000"
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 128M
# ---------------------------------------------------------------------------
# Loki - log aggregation (receives from Promtail)
# ---------------------------------------------------------------------------
loki:
image: grafana/loki:latest
container_name: loki
volumes:
- loki_data:/loki
- ../config/loki/loki-config.yml:/etc/loki/loki-config.yml:ro
command: -config.file=/etc/loki/loki-config.yml
networks:
- backend
restart: unless-stopped
deploy:
resources:
limits:
memory: 768M
reservations:
memory: 256M
# ---------------------------------------------------------------------------
# Promtail - ships Docker container logs to Loki
# ---------------------------------------------------------------------------
promtail:
image: grafana/promtail:latest
container_name: promtail
volumes:
- /var/log:/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ../config/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro
command: -config.file=/etc/promtail/promtail-config.yml
networks:
- backend
restart: unless-stopped
deploy:
resources:
limits:
memory: 256M
reservations:
memory: 64M
# ---------------------------------------------------------------------------
# Backup - daily backup of Postgres + MinIO (cron 03:00, 7-day retention)
# ---------------------------------------------------------------------------
backup:
image: offen/docker-volume-backup:latest
container_name: backup
environment:
BACKUP_CRON_EXPRESSION: "0 3 * * *"
BACKUP_RETENTION_DAYS: "7"
BACKUP_FILENAME: "backup-%Y-%m-%d.tar.gz"
volumes:
- postgres_data:/backup/postgres:ro
- minio_data:/backup/minio:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- backup_archive:/archive
networks:
- backend
restart: unless-stopped
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 64M
volumes:
prometheus_data:
name: toolsplatform-prometheus-data
grafana_data:
name: toolsplatform-grafana-data
loki_data:
name: toolsplatform-loki-data
backup_archive:
name: toolsplatform-backup-archive