Files
Distributed-Prometheus/central-server/docker-compose.yml
jack ab1515dffb refactor: config/apps 目录重组、文档重构、架构图收窄
- 中央:config/(prometheus,alertmanager,grafana)、apps/(tile-cache,topology-editor)
- 边缘:config/(vmagent,blackbox,targets)、apps/(onvif-exporter)
- env: TRAEFIK_PROVIDER、prometheus/env.example 详细说明
- 文档:README/doc 重构,EDGE_CACHE 合并到 EDGE_AGENT_CONFIG
- targets.csv 更新流程说明,ARCHITECTURE 图收窄

Made-with: Cursor
2026-02-28 22:05:43 -05:00

150 lines
5.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
services:
# 中央Prometheus服务器
prometheus-central:
image: prom/prometheus:latest
container_name: prometheus-central
restart: unless-stopped
mem_limit: "128m"
ports:
- "${PROMETHEUS_PORT:-9091}:9090"
volumes:
- ${PROMETHEUS_DATA_DIR:-./data/prometheus-data}:/prometheus
- ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./config/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml:ro
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- "--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-30d}"
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
labels:
- "traefik.enable=${TRAEFIK_ENABLED:-true}"
- "traefik.http.routers.prometheus.rule=Host(`${PROMETHEUS_DOMAIN:-prometheus.example.com}`)"
- "traefik.http.routers.prometheus.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
- "traefik.http.routers.prometheus.service=prometheus"
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik}"
# Grafana仪表板
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
mem_limit: "128m"
ports:
- "${GRAFANA_PORT:-3000}:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin123}
- GF_METRICS_ENABLED=true
- GF_METRICS_BASIC_AUTH_ENABLED=false
- GF_DEFAULT_LANGUAGE=${GRAFANA_DEFAULT_LANGUAGE:-zh-Hans}
- GF_USERS_DEFAULT_THEME=${GRAFANA_DEFAULT_THEME:-light}
# 配置 Grafana 的根 URL用于 Traefik 反向代理)
- GF_SERVER_ROOT_URL=${GRAFANA_ROOT_URL:-http://localhost:3000}
volumes:
- ${GRAFANA_DATA_DIR:-./data/grafana-data}:/var/lib/grafana
- ./config/grafana/provisioning:/etc/grafana/provisioning
- ./config/grafana/dashboards:/var/lib/grafana/dashboards
labels:
- "traefik.enable=${TRAEFIK_ENABLED:-true}"
- "traefik.http.routers.grafana.rule=Host(`${GRAFANA_DOMAIN:-grafana.example.com}`)"
- "traefik.http.routers.grafana.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
- "traefik.http.routers.grafana.service=grafana"
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik}"
# Alertmanager告警管理
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
mem_limit: "32m"
ports:
- "${ALERTMANAGER_PORT:-9093}:9093"
volumes:
- ./config/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
labels:
- "traefik.enable=${TRAEFIK_ENABLED:-true}"
- "traefik.http.routers.alertmanager.rule=Host(`${ALERTMANAGER_DOMAIN:-alertmanager.example.com}`)"
- "traefik.http.routers.alertmanager.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
- "traefik.http.routers.alertmanager.service=alertmanager"
- "traefik.http.services.alertmanager.loadbalancer.server.port=9093"
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik}"
# 远程写入接收器 (VictoriaMetrics)
victoria-metrics:
image: victoriametrics/victoria-metrics:latest
container_name: victoria-metrics
restart: unless-stopped
mem_limit: "64m"
ports:
- "${VICTORIAMETRICS_PORT:-8428}:8428"
volumes:
- ${VICTORIAMETRICS_DATA_DIR:-./data/victoria-metrics-data}:/victoria-metrics-data
command:
- '--storageDataPath=/victoria-metrics-data'
- "--retentionPeriod=${VICTORIAMETRICS_RETENTION_PERIOD:-30d}"
- "--httpListenAddr=:${VICTORIAMETRICS_PORT:-8428}"
# GPS 标注助手(上传/下载 targets.csvH5 采集 GPS + 天地图校验)
topology-editor:
build:
context: .
dockerfile: apps/topology-editor/Dockerfile
image: topology-editor:local
container_name: topology-editor
restart: unless-stopped
environment:
- PORT=4080
- TILE_CACHE_URL=http://tile-cache:4090
ports:
- "${TOPOLOGY_EDITOR_PORT:-4080}:4080"
mem_limit: "128m"
# Traefik 反向代理(仅 TRAEFIK_PROVIDER=internal 时启动)
traefik:
image: traefik:v2.10
container_name: traefik-central
restart: unless-stopped
profiles:
- traefik-internal
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=${TRAEFIK_NETWORK:-central_default}"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
ports:
- "${TRAEFIK_HTTP_PORT:-80}:80"
- "${TRAEFIK_HTTPS_PORT:-443}:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
mem_limit: "64m"
# 天地图瓦片缓存(节省 key 免费量;可手动清空缓存后重新拉取)
tile-cache:
build:
context: .
dockerfile: apps/tile-cache/Dockerfile
image: tile-cache:local
container_name: tile-cache
restart: unless-stopped
environment:
- PORT=4090
- TIANDITU_TK=${TIANDITU_TK:-}
- CACHE_DIR=/cache
- CACHE_TTL_DAYS=${TILE_CACHE_TTL_DAYS:-7}
- UPSTREAM_TIMEOUT_MS=${TILE_CACHE_UPSTREAM_TIMEOUT_MS:-15000}
volumes:
- ${TILE_CACHE_DATA_DIR:-./data/tile-cache}:/cache
ports:
- "${TILE_CACHE_PORT:-4090}:4090"
mem_limit: "32m"
# 定义网络配置(默认使用已存在的 traefik 网络)
networks:
default:
name: ${NETWORK_NAME:-traefik}
external: ${EXTERNAL_NETWORK:-true}