Files
HiveGrid-Wireframes/hivegrid-cloud/infra/grafana/docker-compose.yml
T

51 lines
1.6 KiB
YAML

# Grafana stack for the boilerplate.
#
# Deploys alongside Prometheus on the Hetzner observability box. Joins the
# same docker network so Grafana can reach Prometheus via DNS
# `prometheus:9090`.
services:
grafana:
image: grafana/grafana-oss:11.4.0
container_name: boilerplate-grafana
restart: unless-stopped
user: "472:472"
environment:
# All sensitive values come from the operator's Coolify secrets.
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:?GRAFANA_ADMIN_PASSWORD must be set}
# Disable anonymous access — Business / per-tenant data lives in here.
GF_AUTH_ANONYMOUS_ENABLED: "false"
GF_AUTH_DISABLE_LOGIN_FORM: "false"
GF_SERVER_ROOT_URL: ${GRAFANA_ROOT_URL:-https://grafana.boiler.saas-ctrl.com}
# Prometheus token used by the provisioned datasource. The yaml
# references it via env interpolation.
GRAFANA_PROMETHEUS_TOKEN: ${GRAFANA_PROMETHEUS_TOKEN:?GRAFANA_PROMETHEUS_TOKEN must be set}
volumes:
- ./provisioning:/etc/grafana/provisioning:ro
- ./dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
networks:
- observability
depends_on:
- waitfornet
# Lightweight no-op service that fails compose-up early if the shared
# network is missing. Cheaper than letting grafana retry indefinitely.
waitfornet:
image: alpine:3
command: ["true"]
networks:
- observability
networks:
observability:
name: boilerplate-observability
external: true
volumes:
grafana-data:
name: boilerplate-grafana-data