Getting Started β
This guide will help you get MeshMonitor up and running quickly.
Interactive Docker Compose Configurator
Want a custom configuration generated for you? Try our Docker Compose Configurator - it generates a ready-to-use docker-compose.yml and .env file based on your specific setup (TCP, BLE, Serial, with or without reverse proxy, etc.).
Deployment Methods β
MeshMonitor supports multiple deployment options to fit your infrastructure:
Officially Supported β
π³ Docker Compose (recommended) - Works on any platform with Docker
- Easiest setup with auto-upgrade support
- Full feature support
- See Quick Start below
βΈοΈ Kubernetes/Helm - Production-grade orchestration
- Available in our GitHub repository
- See Deployment Guide for details
Community Supported β
The following deployment methods are contributed and supported by the community:
π¦ Proxmox LXC - Lightweight containers for Proxmox VE users
- Pre-built templates available
- See Proxmox LXC Deployment Guide
βοΈ NixOS Flake - Declarative deployment for NixOS
github:benjajaja/nixos-rk3588?dir=meshmonitor- See NixOS configuration example
- Discussed in Issue #781
π§ Bare Metal - Direct installation with Node.js
- For development or custom setups
- See Deployment Guide
Prerequisites β
Before you begin, ensure you have:
Meshtastic Device β
- A Meshtastic device connected to your network via IP (WiFi or Ethernet)
- OR A Serial/USB device with the Serial Bridge
- OR A Bluetooth device with the BLE Bridge
- OR
meshtasticdrunning as a virtual node
Deployment Platform β
Choose one based on your deployment method:
- Docker Compose: Docker and Docker Compose installed
- Proxmox LXC: Proxmox VE 7.0+
- Kubernetes: Kubernetes cluster with Helm 3+
- NixOS: NixOS system
- Bare Metal: Node.js 20+ and npm
Quick Start with Docker Compose β
The fastest way to get started is using Docker Compose. This takes less than 60 seconds!
1. Create docker-compose.yml β
Create a docker-compose.yml file with the following content:
services:
meshmonitor:
image: ghcr.io/yeraze/meshmonitor:latest
container_name: meshmonitor
ports:
- "8080:3001"
restart: unless-stopped
volumes:
- meshmonitor-data:/data
environment:
- MESHTASTIC_NODE_IP=192.168.1.100 # Change to your node's IP
- ALLOWED_ORIGINS=http://localhost:8080 # Required for CORS
volumes:
meshmonitor-data:
driver: localThat's it! No need for SESSION_SECRET, COOKIE_SECURE, or other complex settings for basic usage.
2. Start MeshMonitor β
docker compose up -d3. Access the Interface β
Open your browser and navigate to:
http://localhost:80804. Login with Default Credentials β
On first launch, MeshMonitor creates a default admin account:
- Username:
admin - Password:
changeme
Important: After logging in, immediately:
- Click on your username in the top right
- Select "Change Password"
- Set a strong, unique password
What Just Happened? β
MeshMonitor's Quick Start is optimized for simple local/home use:
- β Works over HTTP (no HTTPS required)
- β No SESSION_SECRET needed (auto-generated with warning)
- β Secure cookies automatically disabled for HTTP
- β CSRF protection active
- β Rate limiting active (1000 requests/15min)
- β Perfect for personal/home deployments
This configuration is ideal for:
- Personal/home network deployments
- Behind a firewall on trusted networks
- Local-only access (not exposed to the internet)
- Quick testing and evaluation
Note: The Docker container runs in production mode but with sensible defaults for local use. For internet-facing deployments, see the Production Deployment Guide.
Optional Configuration β
Different Node IP β
If your Meshtastic node is at a different IP:
export MESHTASTIC_NODE_IP=192.168.5.25
docker compose up -dCustom Timezone β
environment:
- MESHTASTIC_NODE_IP=192.168.1.100
- TZ=Europe/London # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zonesAccessing from Different Devices/IPs β
Important: MeshMonitor uses CORS protection to prevent unauthorized access. You must set ALLOWED_ORIGINS to match how you're accessing the application.
For localhost access (as shown in the basic example):
- ALLOWED_ORIGINS=http://localhost:8080For access via server IP (e.g., http://192.168.1.50:8080):
environment:
- MESHTASTIC_NODE_IP=192.168.1.100
- ALLOWED_ORIGINS=http://192.168.1.50:8080 # Replace with your server's IPFor multiple access methods (localhost AND server IP):
- ALLOWED_ORIGINS=http://localhost:8080,http://192.168.1.50:8080Additional examples:
# Multiple origins with hostname
- ALLOWED_ORIGINS=http://192.168.1.50:8080,http://meshmonitor.local:8080
# Allow all origins (not recommended, use for testing only)
- ALLOWED_ORIGINS=*Production Deployment β
For production deployments with HTTPS, reverse proxies, or public internet access, see:
- Production Deployment Guide - Full production setup with HTTPS
- Reverse Proxy Configuration - nginx, Caddy, Traefik examples
- SSO Setup - Enterprise authentication with OIDC
β οΈ Critical: Required Environment Variables for HTTPS β
When deploying with HTTPS and a reverse proxy, you MUST set:
SESSION_SECRET=your-secure-random-string # REQUIRED
TRUST_PROXY=true # REQUIRED
COOKIE_SECURE=true # REQUIRED
ALLOWED_ORIGINS=https://meshmonitor.example.com # REQUIRED!Without ALLOWED_ORIGINS, you will get blank pages and CORS errors!
Key Differences in Production β
SESSION_SECRET: Required, must be set to a secure random string- HTTPS: Strongly recommended for production
TRUST_PROXY=true: Required when behind reverse proxy (nginx, Traefik, Caddy)COOKIE_SECURE=true: Required for HTTPSALLOWED_ORIGINS: CRITICAL - Must match your HTTPS domain, or frontend won't load- Rate limiting: Stricter (1000 requests/15min vs 10,000)
Using with Virtual or Physical Devices β
Virtual Nodes with meshtasticd β
If you're using meshtasticd (the virtual Meshtastic node daemon) for testing without physical hardware:
# Start meshtasticd (example)
meshtasticd --hwmodel BETAFPV_2400_TX
# Then set the IP to localhost
export MESHTASTIC_NODE_IP=localhost
docker compose up -dSee the meshtasticd configuration guide for more details.
Serial/USB Devices β
For Serial or USB-connected Meshtastic devices, use the Meshtastic Serial Bridge to expose your device on TCP port 4403.
Bluetooth Devices β
For Bluetooth Low Energy (BLE) Meshtastic devices, use the MeshMonitor BLE Bridge to create a TCP-to-BLE gateway.
Next Steps β
Now that you have MeshMonitor running:
- FAQ - Common issues and solutions
- Features Guide - Explore all available features
- Automation - Set up auto-acknowledge and auto-announce
- Device Configuration - Configure your Meshtastic node from the UI
- Production Deployment - Deploy securely for public access
- Development Setup - Set up a local development environment
Troubleshooting β
For common issues and solutions, see the FAQ which covers:
- π¨ Blank white screen - CORS and ALLOWED_ORIGINS issues
- π Can't login / Session logs out - Cookie security and TRUST_PROXY configuration
- π‘ Cannot connect to node - Network connectivity troubleshooting
- π Multiple nodes - How to run multiple MeshMonitor instances
- πΎ Database issues - How to reset and back up your data
- π€ Password reset - Admin and user password management
Quick Fixes β
Cannot connect to node:
# Verify node is reachable
ping 192.168.1.100
# Check port 4403 is accessible
telnet 192.168.1.100 4403Database errors:
docker compose down
docker volume rm meshmonitor-meshmonitor-data
docker compose up -dDocker permission errors:
sudo usermod -aG docker $USER
# Log out and back inGetting Help β
If you run into issues:
- FAQ - Common issues and solutions
- Configuration Documentation - Advanced configuration
- Development Documentation - Developer resources
- GitHub Issues - Search existing issues or open a new one