Complete guide for deploying the Meshtastic MQTT Converter with Docker.
docker run -d \
-e REGION=EU_868 \
--name meshtastic-converter \
meshtastic-converterdocker-compose up -ddocker build -t meshtastic-converter .docker run -d \
-e BROKER=mqtt.meshtastic.org \
-e REGION=EU_868 \
--name meshtastic-converter \
--restart unless-stopped \
meshtastic-converterdocker run -d \
-e BROKER=mqtt.meshtastic.org \
-e REGION=EU_868 \
-e PSK=0x1a1a1a1a2b2b2b2b1a1a1a1a2b2b2b2b \
--name meshtastic-converter \
--restart unless-stopped \
meshtastic-converterdocker run -d \
-e BROKER=mqtt.example.com \
-e USERNAME=myuser \
-e PASSWORD=mypass \
-e REGION=EU_868 \
--name meshtastic-converter \
--restart unless-stopped \
meshtastic-converterdocker run -d \
-e REGION=EU_868 \
-e DEBUG=1 \
--name meshtastic-converter \
meshtastic-converterCreate the following structure:
.
├── docker-compose.yml
├── mosquitto.conf
├── Dockerfile
├── meshtastic_protobuf_to_json.py
├── requirements.txt
└── mosquitto/
├── config/
├── data/
└── log/
1. Create directories:
mkdir -p mosquitto/config mosquitto/data mosquitto/log2. Copy mosquitto configuration:
cp mosquitto.conf mosquitto/config/mosquitto.conf3. Create environment file (optional):
cp .env.example .env
nano .env4. Start services:
docker-compose up -dStart services:
docker-compose up -dStop services:
docker-compose downRestart services:
docker-compose restartView logs:
docker-compose logs -f
docker-compose logs -f converter
docker-compose logs -f mosquittoRebuild after code changes:
docker-compose down
docker-compose build --no-cache
docker-compose up -dMQTT (TCP):
- Host:
localhost - Port:
1883
MQTT (WebSocket):
- Host:
localhost - Port:
9001
Test connection:
mosquitto_sub -h localhost -t "msh/#" -vCreate a .env file:
BROKER=mosquitto
PORT=1883
REGION=EU_868
ROOT_TOPIC=msh
USERNAME=
PASSWORD=
PSK=
DEBUG=Edit mosquitto/config/mosquitto.conf:
Basic (allow anonymous):
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/With authentication:
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
persistence true
persistence_location /mosquitto/data/Create password file:
docker exec -it meshtastic-mosquitto mosquitto_passwd -c /mosquitto/config/passwd myuser
docker-compose restart mosquittoAdd to mosquitto.conf:
listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
require_certificate falseMount certificates in docker-compose.yml:
mosquitto:
volumes:
- ./certs/ca.crt:/mosquitto/config/ca.crt
- ./certs/server.crt:/mosquitto/config/server.crt
- ./certs/server.key:/mosquitto/config/server.keyRun separate converters for different regions:
services:
converter-eu:
build: .
environment:
- BROKER=mosquitto
- REGION=EU_868
depends_on:
- mosquitto
converter-us:
build: .
environment:
- BROKER=mosquitto
- REGION=US
depends_on:
- mosquittoConnect to external MQTT broker:
services:
converter:
build: .
environment:
- BROKER=mqtt.example.com
- PORT=1883
- USERNAME=${MQTT_USER}
- PASSWORD=${MQTT_PASS}
- REGION=EU_868Add resource constraints:
services:
converter:
build: .
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
cpus: '0.25'
memory: 128MAdd health check to mosquitto:
mosquitto:
image: eclipse-mosquitto:2.0
healthcheck:
test: ["CMD", "mosquitto_sub", "-t", "$$SYS/#", "-C", "1", "-i", "healthcheck", "-W", "3"]
interval: 30s
timeout: 10s
retries: 3Configure logging in docker-compose:
services:
converter:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"Ensure mosquitto data persists:
volumes:
mosquitto-data:
driver: local
services:
mosquitto:
volumes:
- mosquitto-data:/mosquitto/dataCheck logs:
docker logs meshtastic-converter
docker-compose logs converterVerify environment:
docker exec meshtastic-converter envTest mosquitto:
docker exec meshtastic-mosquitto mosquitto_sub -t test -C 1Check network:
docker network inspect meshtastic-netFix mosquitto permissions:
sudo chown -R 1883:1883 mosquitto/data mosquitto/logdocker-compose down -v
docker-compose build --no-cache
docker-compose up -ddocker stats meshtastic-converter meshtastic-mosquittodocker exec meshtastic-mosquitto mosquitto_sub -t "msh/#" -v# Real-time logs
docker-compose logs -f --tail=100
# Save logs
docker-compose logs > logs.txt-
Use environment files:
- Don't commit
.envto git - Use secrets management for production
- Don't commit
-
Enable authentication:
- Set up Mosquitto passwords
- Use SSL/TLS certificates
-
Configure logging:
- Set up log rotation
- Ship logs to central system
-
Set resource limits:
- Prevent resource exhaustion
- Monitor usage
-
Use health checks:
- Auto-restart failed containers
- Alert on failures
-
Backup data:
- Backup mosquitto data directory
- Store PSKs securely
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto:2.0
container_name: meshtastic-mosquitto
ports:
- "1883:1883"
- "8883:8883"
volumes:
- ./mosquitto/config:/mosquitto/config:ro
- mosquitto-data:/mosquitto/data
- mosquitto-log:/mosquitto/log
restart: always
healthcheck:
test: ["CMD", "mosquitto_sub", "-t", "$$SYS/#", "-C", "1"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
converter:
build: .
container_name: meshtastic-converter
env_file: .env
depends_on:
mosquitto:
condition: service_healthy
restart: always
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
volumes:
mosquitto-data:
driver: local
mosquitto-log:
driver: local# Pull latest code
git pull
# Rebuild and restart
docker-compose down
docker-compose build --no-cache
docker-compose up -ddocker-compose pull
docker-compose up -d