mirror of
https://github.com/ipnet-mesh/meshcore-hub.git
synced 2026-03-28 17:42:56 +01:00
Add /metrics endpoint with Prometheus gauges for nodes, messages, advertisements, telemetry, trace paths, events, and members. Include per-node last_seen timestamps for alerting. Add Alertmanager service to Docker Compose metrics profile with default blackhole receiver. Add NodeNotSeen alert rule (48h threshold). Add 1h time window to all windowed metrics alongside existing 24h/7d/30d windows. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
303 lines
8.9 KiB
Plaintext
303 lines
8.9 KiB
Plaintext
# MeshCore Hub - Environment Configuration
|
|
# Copy this file to .env and customize values
|
|
#
|
|
# Configuration is grouped by service. Most deployments only need:
|
|
# - Common Settings (always required)
|
|
# - MQTT Settings (always required)
|
|
# - Interface Settings (for receiver/sender services)
|
|
#
|
|
# The Collector, API, and Web services typically run as a combined "core"
|
|
# profile and share the same data directory.
|
|
#
|
|
# -----------------------------------------------------------------------------
|
|
# QUICK START: Receiver/Sender Only
|
|
# -----------------------------------------------------------------------------
|
|
# For a minimal receiver or sender setup, you only need these settings:
|
|
#
|
|
# MQTT_HOST=your-mqtt-broker.example.com
|
|
# MQTT_PORT=1883
|
|
# MQTT_USERNAME=your_username
|
|
# MQTT_PASSWORD=your_password
|
|
# MQTT_TLS=false
|
|
# SERIAL_PORT=/dev/ttyUSB0
|
|
#
|
|
# Serial ports are typically /dev/ttyUSB[0-9] or /dev/ttyACM[0-9] on Linux.
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# =============================================================================
|
|
# COMMON SETTINGS
|
|
# =============================================================================
|
|
# These settings apply to all services
|
|
|
|
# Docker image version tag to use
|
|
# Options: latest, main, v1.0.0, etc.
|
|
IMAGE_VERSION=latest
|
|
|
|
# Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
LOG_LEVEL=INFO
|
|
|
|
# Base directory for runtime data (database, etc.)
|
|
# Default: ./data (relative to docker-compose.yml location)
|
|
# Inside containers this is mapped to /data
|
|
#
|
|
# Structure:
|
|
# ${DATA_HOME}/
|
|
# └── collector/
|
|
# └── meshcore.db # SQLite database
|
|
DATA_HOME=./data
|
|
|
|
# Directory containing seed data files for import
|
|
# Default: ./seed (relative to docker-compose.yml location)
|
|
# Inside containers this is mapped to /seed
|
|
#
|
|
# Structure:
|
|
# ${SEED_HOME}/
|
|
# ├── node_tags.yaml # Node tags for import
|
|
# └── members.yaml # Network members for import
|
|
SEED_HOME=./seed
|
|
|
|
# =============================================================================
|
|
# MQTT SETTINGS
|
|
# =============================================================================
|
|
# MQTT broker connection settings for interface, collector, and API services
|
|
|
|
# MQTT Broker host
|
|
# When using the local MQTT broker (--profile mqtt), use "mqtt"
|
|
# When using an external broker, set the hostname/IP
|
|
MQTT_HOST=mqtt
|
|
|
|
# MQTT Broker port (default: 1883, or 8883 for TLS)
|
|
MQTT_PORT=1883
|
|
|
|
# MQTT authentication (optional)
|
|
MQTT_USERNAME=
|
|
MQTT_PASSWORD=
|
|
|
|
# MQTT topic prefix for all MeshCore messages
|
|
MQTT_PREFIX=meshcore
|
|
|
|
# Enable TLS/SSL for MQTT connection
|
|
# When enabled, uses TLS with system CA certificates (e.g., for Let's Encrypt)
|
|
MQTT_TLS=false
|
|
|
|
# External port mappings for local MQTT broker (--profile mqtt only)
|
|
MQTT_EXTERNAL_PORT=1883
|
|
MQTT_WS_PORT=9001
|
|
|
|
# =============================================================================
|
|
# INTERFACE SETTINGS (Receiver/Sender)
|
|
# =============================================================================
|
|
# Settings for the MeshCore device interface services
|
|
|
|
# Serial port for receiver device
|
|
SERIAL_PORT=/dev/ttyUSB0
|
|
|
|
# Serial port for sender device (if using separate device)
|
|
SERIAL_PORT_SENDER=/dev/ttyUSB1
|
|
|
|
# Baud rate for serial communication
|
|
SERIAL_BAUD=115200
|
|
|
|
# Optional device/node name to set on startup
|
|
# This name is broadcast to the mesh network in advertisements
|
|
MESHCORE_DEVICE_NAME=
|
|
|
|
# Optional node address override (64-char hex string)
|
|
# Only set if you need to override the device's public key
|
|
NODE_ADDRESS=
|
|
NODE_ADDRESS_SENDER=
|
|
|
|
# -------------------
|
|
# Contact Cleanup Settings (RECEIVER mode only)
|
|
# -------------------
|
|
# Automatic removal of stale contacts from the MeshCore companion node
|
|
|
|
# Enable automatic removal of stale contacts from companion node
|
|
CONTACT_CLEANUP_ENABLED=true
|
|
|
|
# Remove contacts not advertised for this many days
|
|
CONTACT_CLEANUP_DAYS=7
|
|
|
|
# =============================================================================
|
|
# COLLECTOR SETTINGS
|
|
# =============================================================================
|
|
# The collector subscribes to MQTT events and stores them in the database
|
|
|
|
# -------------------
|
|
# Webhook Settings
|
|
# -------------------
|
|
# Webhooks forward mesh events to external HTTP endpoints as POST requests
|
|
|
|
# Webhook for advertisement events (node discovery)
|
|
WEBHOOK_ADVERTISEMENT_URL=
|
|
WEBHOOK_ADVERTISEMENT_SECRET=
|
|
|
|
# Webhook for all message events (channel and direct messages)
|
|
WEBHOOK_MESSAGE_URL=
|
|
WEBHOOK_MESSAGE_SECRET=
|
|
|
|
# Optional: Separate URLs for channel vs direct messages
|
|
# These override WEBHOOK_MESSAGE_URL if set
|
|
# WEBHOOK_CHANNEL_MESSAGE_URL=
|
|
# WEBHOOK_CHANNEL_MESSAGE_SECRET=
|
|
# WEBHOOK_DIRECT_MESSAGE_URL=
|
|
# WEBHOOK_DIRECT_MESSAGE_SECRET=
|
|
|
|
# Webhook behavior settings
|
|
WEBHOOK_TIMEOUT=10.0
|
|
WEBHOOK_MAX_RETRIES=3
|
|
WEBHOOK_RETRY_BACKOFF=2.0
|
|
|
|
# -------------------
|
|
# Data Retention Settings
|
|
# -------------------
|
|
# Automatic cleanup of old event data (advertisements, messages, telemetry, etc.)
|
|
|
|
# Enable automatic cleanup of old event data
|
|
DATA_RETENTION_ENABLED=true
|
|
|
|
# Number of days to retain event data
|
|
# Events older than this are deleted during cleanup
|
|
DATA_RETENTION_DAYS=30
|
|
|
|
# Hours between automatic cleanup runs
|
|
# Applies to both event data and node cleanup
|
|
DATA_RETENTION_INTERVAL_HOURS=24
|
|
|
|
# -------------------
|
|
# Node Cleanup Settings
|
|
# -------------------
|
|
# Automatic removal of inactive nodes
|
|
|
|
# Enable automatic cleanup of inactive nodes
|
|
# Nodes with last_seen=NULL (never seen on network) are NOT removed
|
|
NODE_CLEANUP_ENABLED=true
|
|
|
|
# Remove nodes not seen for this many days (based on last_seen field)
|
|
NODE_CLEANUP_DAYS=7
|
|
|
|
# =============================================================================
|
|
# API SETTINGS
|
|
# =============================================================================
|
|
# REST API for querying data and sending commands
|
|
|
|
# External API port
|
|
API_PORT=8000
|
|
|
|
# API Keys for authentication
|
|
# Generate secure keys for production: openssl rand -hex 32
|
|
# Leave empty to disable authentication (not recommended for production)
|
|
API_READ_KEY=
|
|
API_ADMIN_KEY=
|
|
|
|
# -------------------
|
|
# Prometheus Metrics
|
|
# -------------------
|
|
# Prometheus metrics endpoint exposed at /metrics on the API service
|
|
|
|
# Enable Prometheus metrics endpoint
|
|
# Default: true
|
|
METRICS_ENABLED=true
|
|
|
|
# Seconds to cache metrics output (reduces database load)
|
|
# Default: 60
|
|
METRICS_CACHE_TTL=60
|
|
|
|
# External Prometheus port (when using --profile metrics)
|
|
PROMETHEUS_PORT=9090
|
|
|
|
# External Alertmanager port (when using --profile metrics)
|
|
ALERTMANAGER_PORT=9093
|
|
|
|
# =============================================================================
|
|
# WEB DASHBOARD SETTINGS
|
|
# =============================================================================
|
|
# Web interface for visualizing network status
|
|
|
|
# External web port
|
|
WEB_PORT=8080
|
|
|
|
# API endpoint URL for the web dashboard
|
|
# Default: http://localhost:8000
|
|
# API_BASE_URL=http://localhost:8000
|
|
|
|
# API key for web dashboard queries (optional)
|
|
# If API_READ_KEY is set on the API, provide it here
|
|
# API_KEY=
|
|
|
|
# Default theme for the web dashboard (dark or light)
|
|
# Users can override via the theme toggle; their preference is saved in localStorage
|
|
# Default: dark
|
|
# WEB_THEME=dark
|
|
|
|
# Locale/language for the web dashboard
|
|
# Default: en
|
|
# Supported: en (see src/meshcore_hub/web/static/locales/ for available translations)
|
|
# WEB_LOCALE=en
|
|
|
|
# Auto-refresh interval in seconds for list pages (nodes, advertisements, messages)
|
|
# Set to 0 to disable auto-refresh
|
|
# Default: 30
|
|
# WEB_AUTO_REFRESH_SECONDS=30
|
|
|
|
# Enable admin interface at /a/ (requires auth proxy in front)
|
|
# Default: false
|
|
# WEB_ADMIN_ENABLED=false
|
|
|
|
# Timezone for displaying dates/times on the web dashboard
|
|
# Uses standard IANA timezone names (e.g., America/New_York, Europe/London)
|
|
# Default: UTC
|
|
TZ=UTC
|
|
|
|
# Directory containing custom content (pages/, media/)
|
|
# Default: ./content
|
|
# CONTENT_HOME=./content
|
|
|
|
# -------------------
|
|
# Network Information
|
|
# -------------------
|
|
# Displayed on the web dashboard homepage
|
|
|
|
# Network domain name (optional)
|
|
# NETWORK_DOMAIN=
|
|
|
|
# Network display name
|
|
NETWORK_NAME=MeshCore Network
|
|
|
|
# Network location
|
|
NETWORK_CITY=
|
|
NETWORK_COUNTRY=
|
|
|
|
# Radio configuration (comma-delimited)
|
|
# Format: <profile>,<frequency>,<bandwidth>,<spreading_factor>,<coding_rate>,<tx_power>
|
|
# Example: EU/UK Narrow,869.618MHz,62.5kHz,SF8,CR8,22dBm
|
|
NETWORK_RADIO_CONFIG=
|
|
|
|
# Welcome text displayed on the homepage (optional, plain text)
|
|
# If not set, a default welcome message is shown
|
|
NETWORK_WELCOME_TEXT=
|
|
|
|
# -------------------
|
|
# Feature Flags
|
|
# -------------------
|
|
# Control which pages are visible in the web dashboard
|
|
# Set to false to completely hide a page (nav, routes, sitemap, robots.txt)
|
|
|
|
# FEATURE_DASHBOARD=true
|
|
# FEATURE_NODES=true
|
|
# FEATURE_ADVERTISEMENTS=true
|
|
# FEATURE_MESSAGES=true
|
|
# FEATURE_MAP=true
|
|
# FEATURE_MEMBERS=true
|
|
# FEATURE_PAGES=true
|
|
|
|
# -------------------
|
|
# Contact Information
|
|
# -------------------
|
|
# Contact links displayed in the footer
|
|
|
|
NETWORK_CONTACT_EMAIL=
|
|
NETWORK_CONTACT_DISCORD=
|
|
NETWORK_CONTACT_GITHUB=
|
|
NETWORK_CONTACT_YOUTUBE=
|