version: '3.8' services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus/rules:/etc/prometheus/rules - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=30d' - '--web.enable-lifecycle' networks: - v2_internal_net ports: - "9090:9090" deploy: resources: limits: cpus: '1' memory: 2g grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=${GRAFANA_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} - GF_USERS_ALLOW_SIGN_UP=false - GF_SERVER_ROOT_URL=https://monitoring.v2-docker.com - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/var/lib/grafana/dashboards networks: - v2_internal_net ports: - "3000:3000" depends_on: - prometheus deploy: resources: limits: cpus: '0.5' memory: 512m alertmanager: image: prom/alertmanager:latest container_name: alertmanager restart: unless-stopped volumes: - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml - alertmanager_data:/alertmanager command: - '--config.file=/etc/alertmanager/alertmanager.yml' - '--storage.path=/alertmanager' networks: - v2_internal_net ports: - "9093:9093" deploy: resources: limits: cpus: '0.5' memory: 256m # PostgreSQL Exporter postgres-exporter: image: prometheuscommunity/postgres-exporter:latest container_name: postgres-exporter restart: unless-stopped environment: DATA_SOURCE_NAME: "postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/v2_adminpanel?sslmode=disable" networks: - v2_internal_net deploy: resources: limits: cpus: '0.25' memory: 128m # Redis Exporter redis-exporter: image: oliver006/redis_exporter:latest container_name: redis-exporter restart: unless-stopped environment: REDIS_ADDR: "redis://redis:6379" networks: - v2_internal_net deploy: resources: limits: cpus: '0.25' memory: 128m # Node Exporter (for host metrics) node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' networks: - v2_internal_net deploy: resources: limits: cpus: '0.25' memory: 128m # Nginx Exporter nginx-exporter: image: nginx/nginx-prometheus-exporter:latest container_name: nginx-exporter restart: unless-stopped command: - '-nginx.scrape-uri=http://nginx-proxy:8080/nginx_status' networks: - v2_internal_net deploy: resources: limits: cpus: '0.25' memory: 128m networks: v2_internal_net: external: true volumes: prometheus_data: grafana_data: alertmanager_data: