# ============================================ # Wordly.art - Monitoring Stack (Prometheus + Grafana) # ============================================ # Deploys alongside the main docker-compose.yml # Grafana accessible via NPM sur monitoring.wordly.art (ou IP:3001) # # Usage: # docker compose -f docker-compose.yml -f docker-compose.monitoring.yml up -d # # Access: # Grafana: http://:3001 (admin / WordlyGrafana2026!) # Ou via NPM: monitoring.wordly.art -> wordly-grafana:3000 # ============================================ services: # =========================================== # Prometheus - Metrics Collection # =========================================== prometheus: image: prom/prometheus:v2.52.0 container_name: wordly-prometheus restart: unless-stopped volumes: - ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./docker/prometheus/alerts.yml:/etc/prometheus/alerts.yml:ro - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--storage.tsdb.retention.time=30d' - '--storage.tsdb.retention.size=5GB' - '--web.enable-lifecycle' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' networks: - wordly-network healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:9090/-/healthy"] interval: 30s timeout: 5s retries: 3 deploy: resources: limits: memory: 512M reservations: memory: 128M # =========================================== # Grafana - Dashboards & Visualization # =========================================== grafana: image: grafana/grafana:11.0.0 container_name: wordly-grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=WordlyGrafana2026! - GF_USERS_ALLOW_SIGN_UP=false - GF_SERVER_ROOT_URL=https://monitoring.wordly.art - GF_INSTALL_PLUGINS=grafana-clock-panel volumes: - grafana_data:/var/lib/grafana - ./docker/grafana/provisioning:/etc/grafana/provisioning:ro - ./docker/grafana/dashboards:/var/lib/grafana/dashboards:ro ports: - "3001:3000" networks: - wordly-network depends_on: prometheus: condition: service_healthy healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/api/health"] interval: 30s timeout: 5s retries: 3 deploy: resources: limits: memory: 256M reservations: memory: 64M # =========================================== # Node Exporter - System Metrics (CPU, RAM, Disk, Network) # =========================================== node-exporter: image: prom/node-exporter:v1.8.0 container_name: wordly-node-exporter restart: unless-stopped pid: host volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--path.rootfs=/rootfs' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|etc|var/lib/docker)($$|/)' networks: - wordly-network deploy: resources: limits: memory: 64M # =========================================== # cAdvisor - Docker Container Metrics # =========================================== cadvisor: image: gcr.io/cadvisor/cadvisor:v0.49.1 container_name: wordly-cadvisor restart: unless-stopped volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk:/dev/disk:ro privileged: true devices: - /dev/kmsg networks: - wordly-network deploy: resources: limits: memory: 128M # =========================================== # Volumes # =========================================== volumes: prometheus_data: driver: local grafana_data: driver: local # =========================================== # Networks - Must match main docker-compose # =========================================== networks: wordly-network: external: true