services: kvm-switcher: image: ghcr.io/zackpollard/kvm-switcher:latest restart: unless-stopped ports: - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./configs/servers.yaml:/app/configs/servers.yaml:ro env_file: - .env environment: - KVM_METRICS_ENABLED=true # The app manages JViewer containers via the Docker socket. # Set container_image in servers.yaml to match your jviewer image: # container_image: "ghcr.io/zackpollard/jviewer:latest" # Pull it before starting: docker pull ghcr.io/zackpollard/jviewer:latest prometheus: image: prom/prometheus:latest restart: unless-stopped ports: - "9090:9090" volumes: - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus grafana: image: grafana/grafana:latest restart: unless-stopped ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin} - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer volumes: - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro - grafana-data:/var/lib/grafana volumes: prometheus-data: grafana-data: