Files

83 lines
2.6 KiB
YAML

# Working docker-compose.yml for monitoring stack on CT 141
# Deployed 2026-07-05. Contains fixes for all pitfalls encountered.
#
# Fixes applied vs. initial draft:
# - prometheus: user: root (avoids permission denied on config files)
# - pve-exporter: config mounted to /etc/prometheus/pve.yml (hardcoded path)
# - telegram-bridge: custom Flask app, not third-party image (none reliable found)
# - All config dirs: chmod 644 on host before compose up
services:
prometheus:
image: prom/prometheus:v3.2.1
container_name: prometheus
restart: unless-stopped
user: root # FIX: avoid permission denied on config
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./prometheus/rules:/etc/prometheus/rules:ro
- prometheus-data:/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana-oss:11.5.2
container_name: grafana
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=changeme
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning:ro
ports:
- "3000:3000"
alertmanager:
image: prom/alertmanager:v0.27.0
container_name: alertmanager
restart: unless-stopped
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
ports:
- "9093:9093"
blackbox:
image: prom/blackbox-exporter:v0.26.0
container_name: blackbox
restart: unless-stopped
volumes:
- ./blackbox/blackbox.yml:/etc/blackbox_exporter/config.yml:ro
ports:
- "9115:9115"
pve-exporter:
image: prompve/prometheus-pve-exporter:latest
container_name: pve-exporter
restart: unless-stopped
environment:
- PVE_EXPORTER_CONFIG=/etc/prometheus/pve.yml
volumes:
# FIX: mount to /etc/prometheus/pve.yml — binary hardcodes this path
- ./pve-exporter/pve-exporter.yml:/etc/prometheus/pve.yml:ro
ports:
- "9221:9221"
telegram-bridge:
build: ./telegram-bridge
container_name: telegram-bridge
restart: unless-stopped
env_file: .env
# ⚠️ .env must contain TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID.
# If using inline environment: instead, do NOT leave values empty —
# the bridge will accept webhooks (HTTP 200) but silently fail to
# send to Telegram. Check `docker logs telegram-bridge` for
# "Chat ID:" showing empty if misconfigured.
ports:
- "9099:9099"
volumes:
prometheus-data:
grafana-data: