mirror of
https://github.com/ipnet-mesh/meshcore-hub.git
synced 2026-03-28 17:42:56 +01:00
341 lines
10 KiB
Plaintext
341 lines
10 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
|
|
|
|
# MQTT transport protocol
|
|
# Options: tcp, websockets
|
|
MQTT_TRANSPORT=tcp
|
|
|
|
# MQTT WebSocket path (used only when MQTT_TRANSPORT=websockets)
|
|
# Common values: /mqtt, /
|
|
MQTT_WS_PATH=/mqtt
|
|
|
|
# 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
|
|
|
|
# Collector MQTT ingest mode
|
|
# - native: expects <prefix>/<pubkey>/event/<event_name> topics
|
|
# - letsmesh_upload: expects LetsMesh observer uploads on
|
|
# <prefix>/<pubkey>/(packets|status|internal)
|
|
COLLECTOR_INGEST_MODE=native
|
|
|
|
# LetsMesh decoder support (used only when COLLECTOR_INGEST_MODE=letsmesh_upload)
|
|
# Set to false to disable external packet decoding
|
|
COLLECTOR_LETSMESH_DECODER_ENABLED=true
|
|
|
|
# Decoder command (must be available in container PATH)
|
|
# Examples: meshcore-decoder, /usr/local/bin/meshcore-decoder, npx meshcore-decoder
|
|
COLLECTOR_LETSMESH_DECODER_COMMAND=meshcore-decoder
|
|
|
|
# Optional: channel secret keys (comma or space separated) used to decrypt GroupText
|
|
# packets. This supports unlimited keys.
|
|
# Note: Public + #test keys are built into the collector code by default.
|
|
# To show friendly channel names in the web feed, use label=hex (example: bot=ABCDEF...).
|
|
# Without keys, encrypted packets cannot be shown as plaintext.
|
|
# COLLECTOR_LETSMESH_DECODER_KEYS=
|
|
|
|
# Timeout in seconds per decode invocation
|
|
COLLECTOR_LETSMESH_DECODER_TIMEOUT_SECONDS=2.0
|
|
|
|
# -------------------
|
|
# 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
|
|
|
|
# Locale used for date/time formatting in the web dashboard
|
|
# Controls date ordering only; 24-hour clock is still used by default
|
|
# Examples: en-US (MM/DD/YYYY), en-GB (DD/MM/YYYY)
|
|
# Default: en-US
|
|
# WEB_DATETIME_LOCALE=en-US
|
|
|
|
# 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=
|