name: ${COMPOSE_PROJECT_NAME:-pi-monitoring} services: portainer: image: ${PORTAINER_IMAGE:-portainer/portainer-ce:latest} restart: unless-stopped command: -H unix:///var/run/docker.sock ports: - "${BIND_IP:-0.0.0.0}:${PORTAINER_HTTPS_PORT:-9443}:9443" - "${BIND_IP:-0.0.0.0}:${PORTAINER_EDGE_PORT:-8000}:8000" volumes: - /var/run/docker.sock:/var/run/docker.sock - ${OPS_ROOT:-/srv/ops}/portainer/data:/data networks: - monitoring grafana: image: ${GRAFANA_IMAGE:-grafana/grafana-oss:latest} restart: unless-stopped environment: - TZ=${TZ:-America/New_York} - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} - GF_USERS_ALLOW_SIGN_UP=false - GF_AUTH_ANONYMOUS_ENABLED=false - GF_INSTALL_PLUGINS=${GRAFANA_PLUGINS:-} ports: - "${BIND_IP:-0.0.0.0}:${GRAFANA_PORT:-3000}:3000" volumes: - ${OPS_ROOT:-/srv/ops}/grafana/data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning:ro depends_on: - prometheus networks: - monitoring prometheus: image: ${PROMETHEUS_IMAGE:-prom/prometheus:latest} restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-15d}' - '--storage.tsdb.retention.size=${PROMETHEUS_RETENTION_SIZE:-2GB}' - '--storage.tsdb.wal-compression' - '--web.enable-lifecycle' ports: - "${BIND_IP:-0.0.0.0}:${PROMETHEUS_PORT:-9090}:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ${OPS_ROOT:-/srv/ops}/prometheus/targets:/etc/prometheus/targets:ro - ${OPS_ROOT:-/srv/ops}/prometheus/data:/prometheus networks: - monitoring node-exporter: image: ${NODE_EXPORTER_IMAGE:-prom/node-exporter:latest} restart: unless-stopped command: - '--path.procfs=/host/proc' - '--path.rootfs=/host/root' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)' volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/host/root:ro networks: - monitoring cadvisor: image: ${CADVISOR_IMAGE:-gcr.io/cadvisor/cadvisor:latest} restart: unless-stopped privileged: true devices: - /dev/kmsg:/dev/kmsg volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro networks: - monitoring uptime-kuma: image: ${UPTIME_KUMA_IMAGE:-louislam/uptime-kuma:1} restart: unless-stopped ports: - "${BIND_IP:-0.0.0.0}:${UPTIME_KUMA_PORT:-3001}:3001" volumes: - ${OPS_ROOT:-/srv/ops}/uptime-kuma/data:/app/data networks: - monitoring networks: monitoring: driver: bridge