github Yeraze/meshmonitor v3.0.0-RC1
v3.0.0-RC1 - Multi-Database Support

latest release: v3.0.0-RC2
8 hours ago

๐ŸŽ‰ MeshMonitor 3.0.0 Release Candidate 1

This release introduces multi-database support, allowing MeshMonitor to run on PostgreSQL or MySQL in addition to the default SQLite backend. This enables enterprise-scale deployments with thousands of nodes.

โœจ What's New in 3.0.0

  • PostgreSQL Support - Enterprise-grade database for high-volume deployments
  • MySQL/MariaDB Support - Alternative for existing MySQL infrastructure
  • Database Migration Tool - Migrate existing SQLite data to PostgreSQL or MySQL
  • Improved Performance - Optimized queries for large datasets
  • Async Database Layer - All database operations are now async-compatible

๐Ÿ“ฆ Database Options

Database Best For Configuration
SQLite (default) Home users, Raspberry Pi, small deployments No configuration needed
PostgreSQL Enterprise, 1000+ nodes, high availability DATABASE_URL env var
MySQL/MariaDB Existing MySQL infrastructure DATABASE_URL env var

๐Ÿš€ Migration Instructions

โš ๏ธ Before You Begin

IMPORTANT: Back up your SQLite database before migrating!

# Create a backup of your SQLite database
cp /path/to/meshmonitor/data/meshmonitor.db /path/to/backup/meshmonitor.db.backup

๐Ÿ“˜ PostgreSQL Migration

Step 1: Stop MeshMonitor

docker compose down

Step 2: Update docker-compose.yml

Add the PostgreSQL service and update the MeshMonitor service:

services:
  postgres:
    image: postgres:16-alpine
    container_name: meshmonitor-postgres
    restart: unless-stopped
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=meshmonitor
      - POSTGRES_USER=meshmonitor
      - POSTGRES_PASSWORD=your_secure_password_here
      - TZ=America/New_York
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U meshmonitor -d meshmonitor"]
      interval: 10s
      timeout: 5s
      retries: 5

  meshmonitor:
    image: ghcr.io/yeraze/meshmonitor:v3.0.0-RC1
    container_name: meshmonitor
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      # Add this new environment variable:
      - DATABASE_URL=postgres://meshmonitor:your_secure_password_here@postgres:5432/meshmonitor
      # ... your other existing environment variables ...
    volumes:
      - meshmonitor-data:/data
    # ... rest of your config ...

volumes:
  postgres-data:
  meshmonitor-data:

Step 3: Start PostgreSQL Only

docker compose up -d postgres

Wait for PostgreSQL to be ready:

docker compose logs -f postgres
# Wait until you see "database system is ready to accept connections"

Step 4: Run the Migration

# Run the migration tool from inside the MeshMonitor container
docker compose run --rm meshmonitor npx tsx src/cli/migrate-db.ts \
  --from sqlite:/data/meshmonitor.db \
  --to postgres://meshmonitor:your_secure_password_here@postgres:5432/meshmonitor \
  --verbose

You should see output like:

๐Ÿ“Š Migration Progress:
  ๐Ÿ“ฆ nodes: 615 rows...   ๐Ÿ“Š welcomedAt: source=true, target=true
  โœ… 615 migrated
  ๐Ÿ“ฆ messages: 4461 rows... โœ… 4461 migrated
  ...
โœ… Migration complete!

Step 5: Start MeshMonitor

docker compose up -d

Step 6: Verify

Open MeshMonitor in your browser and verify:

  • All nodes are present
  • Messages are intact
  • Settings are preserved

๐Ÿ“— MySQL Migration

Step 1: Stop MeshMonitor

docker compose down

Step 2: Update docker-compose.yml

Add the MySQL service and update the MeshMonitor service:

services:
  mysql:
    image: mysql:8
    container_name: meshmonitor-mysql
    restart: unless-stopped
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=meshmonitor
      - MYSQL_USER=meshmonitor
      - MYSQL_PASSWORD=your_secure_password_here
      - MYSQL_ROOT_PASSWORD=your_root_password_here
      - TZ=America/New_York
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  meshmonitor:
    image: ghcr.io/yeraze/meshmonitor:v3.0.0-RC1
    container_name: meshmonitor
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      # Add this new environment variable:
      - DATABASE_URL=mysql://meshmonitor:your_secure_password_here@mysql:3306/meshmonitor
      # ... your other existing environment variables ...
    volumes:
      - meshmonitor-data:/data
    # ... rest of your config ...

volumes:
  mysql-data:
  meshmonitor-data:

Step 3: Start MySQL Only

docker compose up -d mysql

Wait for MySQL to be ready:

docker compose logs -f mysql
# Wait until you see "ready for connections"

Step 4: Run the Migration

# Run the migration tool from inside the MeshMonitor container
docker compose run --rm meshmonitor npx tsx src/cli/migrate-db.ts \
  --from sqlite:/data/meshmonitor.db \
  --to mysql://meshmonitor:your_secure_password_here@mysql:3306/meshmonitor \
  --verbose

Step 5: Start MeshMonitor

docker compose up -d

Step 6: Verify

Open MeshMonitor in your browser and verify all data migrated correctly.


๐Ÿ”ง New Environment Variables

Variable Description Example
DATABASE_URL Database connection string postgres://user:pass@host:5432/db or mysql://user:pass@host:3306/db

Note: If DATABASE_URL is not set, MeshMonitor will continue to use SQLite (default behavior).


๐Ÿ”„ Staying on SQLite

If you don't need PostgreSQL or MySQL, simply update to v3.0.0-RC1 without any configuration changes. SQLite remains the default and requires no additional setup.

# Just update the image tag
docker compose pull
docker compose up -d

๐Ÿ“ Known Limitations

  • One-way migration: The migration tool copies data from SQLite to PostgreSQL/MySQL. It does not sync changes back.
  • Run migration once: Only run the migration tool once. Running it again may cause duplicate data errors.
  • Fresh database required: The target PostgreSQL/MySQL database should be empty before migration.

๐Ÿ› Bug Fixes in This Release

  • Fixed migration tool not copying welcomedAt field (caused auto-welcome to re-welcome known nodes)
  • Fixed migration tool not copying solar_estimates table (historical solar data was lost)
  • Fixed Apprise notification preferences migration (wrong column name mapping)
  • Added schema qualification to PostgreSQL queries (prevents ambiguous column lookups)

๐Ÿ“š Full Changelog

Full Changelog: v3.0.0-beta9...v3.0.0-RC1


โš ๏ธ This is a Release Candidate

This is a pre-release version. Please test thoroughly before using in production. Report any issues at https://github.com/Yeraze/meshmonitor/issues


Proxmox LXC Template

This release includes a Proxmox-compatible LXC container template for MeshMonitor.

Installation

  1. Download the .tar.gz template file
  2. Verify the SHA256 checksum (optional but recommended)
  3. Upload to your Proxmox server: scp meshmonitor-*.tar.gz root@proxmox:/var/lib/vz/template/cache/
  4. Create a new LXC container from the template via Proxmox web UI
  5. Configure /etc/meshmonitor/meshmonitor.env with your Meshtastic node IP
  6. Start the container and access the web UI on port 8080

Documentation

See the Proxmox LXC Deployment Guide for detailed instructions.

Limitations

  • Auto-upgrade feature is not supported in LXC deployments
  • Manual updates required (download new template for each version)
  • Community-supported (Docker remains the primary deployment method)

๐Ÿš€ MeshMonitor v3.0.0-RC1

๐Ÿ“ฆ Installation

Docker (recommended):

docker run -d \
  --name meshmonitor \
  -p 8080:3001 \
  -v meshmonitor-data:/data \
  ghcr.io/Yeraze/meshmonitor:3.0.0-RC1

๐Ÿงช Testing

โœ… All tests passed
โœ… TypeScript checks passed
โœ… Docker images built for linux/amd64, linux/arm64, linux/arm/v7

๐Ÿ“‹ Changes

See commit history for detailed changes.

Don't miss a new meshmonitor release

NewReleases is sending notifications on new releases.