docker-compose.ymlโข4.38 kB
version: '3.8'
services:
  # Prometheus - Metrics collection and storage
  prometheus:
    image: prom/prometheus:latest
    container_name: tailscale-prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./monitoring/prometheus/rules:/etc/prometheus/rules
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
      - '--web.enable-admin-api'
    networks:
      - monitoring
    restart: unless-stopped
  # Loki - Log aggregation
  loki:
    image: grafana/loki:latest
    container_name: tailscale-loki
    ports:
      - "3100:3100"
    volumes:
      - ./monitoring/loki/loki.yml:/etc/loki/local-config.yaml
      - loki_data:/loki
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - monitoring
    restart: unless-stopped
  # Promtail - Log shipping to Loki
  promtail:
    image: grafana/promtail:latest
    container_name: tailscale-promtail
    volumes:
      - ./monitoring/promtail/promtail.yml:/etc/promtail/config.yml
      - /var/log:/var/log:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: -config.file=/etc/promtail/config.yml
    networks:
      - monitoring
    restart: unless-stopped
    depends_on:
      - loki
  # Grafana - Visualization and dashboards
  grafana:
    image: grafana/grafana:latest
    container_name: tailscale-grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_INSTALL_PLUGINS=grafana-piechart-panel,grafana-worldmap-panel
    volumes:
      - grafana_data:/var/lib/grafana
      - ./monitoring/grafana/provisioning:/etc/grafana/provisioning
      - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards
    networks:
      - monitoring
    restart: unless-stopped
    depends_on:
      - prometheus
      - loki
  # Tailscale MCP Server - Our application
  tailscale-mcp:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: tailscale-mcp-server
    ports:
      - "8080:8080"
    environment:
      - TAILSCALE_API_KEY=${TAILSCALE_API_KEY}
      - TAILSCALE_TAILNET=${TAILSCALE_TAILNET}
      - LOG_LEVEL=INFO
      - PROMETHEUS_PORT=9091
    volumes:
      - ./logs:/app/logs
      - ./monitoring/promtail/promtail.yml:/etc/promtail/config.yml
    networks:
      - monitoring
    restart: unless-stopped
    depends_on:
      - prometheus
      - loki
  # RebootX On-Prem - Mobile infrastructure monitoring
  rebootx-on-prem:
    image: golang:1.22
    container_name: tailscale-rebootx-on-prem
    ports:
      - "9001:9001"
    environment:
      - RBTX_API_KEY=${REBOOTX_API_KEY:-tailscale-mcp-rebootx-key-2024}
      - RBTX_PATH_PREFIX=${REBOOTX_PATH_PREFIX:-tailscale-mcp}
      - RBTX_DASHBOARD_SERVICE_FILE_JSON_FILE_PATH=/data/dashboards.json
      - RBTX_DASHBOARD_SERVICE_IMPL=fileJson
      - RBTX_PORT=9001
      - RBTX_RUNNABLE_SERVICE_FILE_JSON_FILE_PATH=/data/servers.json
      - RBTX_RUNNABLE_SERVICE_IMPL=fileJson
      - RBTX_BIND=0.0.0.0
      - RBTX_PROTOCOL=http
    volumes:
      - ./monitoring/rebootx-on-prem/data:/data
      - ./monitoring/rebootx-on-prem/impl:/app
    working_dir: "/app"
    command: bash -c "cd /app/http-server-go && go fmt && go build -o /build/rebootx-on-prem -v && /build/rebootx-on-prem"
    networks:
      - monitoring
    restart: unless-stopped
    depends_on:
      - tailscale-mcp
      - grafana
      - prometheus
      - loki
  # RebootX Swagger UI - API documentation
  rebootx-swagger-ui:
    image: swaggerapi/swagger-ui:v5.12.0
    container_name: tailscale-rebootx-swagger-ui
    ports:
      - "9002:9002"
    environment:
      - PORT=9002
      - SWAGGER_JSON=/spec/swagger.json
    volumes:
      - ./monitoring/rebootx-on-prem/spec:/spec
    networks:
      - monitoring
    restart: unless-stopped
    depends_on:
      - rebootx-on-prem
volumes:
  prometheus_data:
  loki_data:
  grafana_data:
networks:
  monitoring:
    driver: bridge