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