MQTT Dashboard Stack – Mosquitto + Auth (TOTP/Email) + Web-Dashboard
- Python 58.3%
- HTML 37.4%
- Shell 3%
- Vim Snippet 0.8%
- Dockerfile 0.5%
| .forgejo | ||
| app | ||
| mosquitto/config | ||
| .env.example | ||
| .gitignore | ||
| build-and-push.sh | ||
| Caddyfile.snippet | ||
| deploy.sh | ||
| docker-compose.yml | ||
| README.md | ||
MQTT Dashboard – Setup-Guide
Architektur
Browser → Caddy → mqtt-auth:8089 (Login/TOTP/Email-Token)
│ (nach Auth)
▼
mqtt-dashboard:8088 (Flask API)
│
▼
mosquitto:1883 (MQTT Broker)
Nur mqtt-auth ist via Caddy nach außen erreichbar.
Portainer-Deployment (Git-Repo, empfohlen)
- Repo auf
git.pfeiffer-privat.deanlegen (z.B.ppfeiffer/mqtt-dashboard-stack) - Alle Dateien pushen
- In Portainer: Stacks → Add Stack → Git Repository
- URL:
https://git.pfeiffer-privat.de/ppfeiffer/mqtt-dashboard-stack - Branch:
master - Compose path:
docker-compose.yml - Auth: Forgejo-Token
- URL:
- Environment-Variablen setzen (siehe
.env.example) - Deploy
Portainer-Deployment (Editor, Fallback)
- Stacks → Add Stack → Web editor
docker-compose.ymleinfügen- Env-Variablen im unteren Bereich setzen
Pflicht-Env-Variablen
| Variable | Beschreibung |
|---|---|
SECRET_KEY |
python3 -c "import secrets; print(secrets.token_hex(32))" |
ADMIN_PASSWORD |
Erstes Admin-Passwort |
ADMIN_EMAIL |
Admin-E-Mail |
CADDY_NETWORK_NAME |
Name des externen Caddy-Netzes (Standard: caddy-net) |
Erster Login & TOTP einrichten
https://mqtt.meshdresden.euöffnen- Login mit
admin/ADMIN_PASSWORD - Konto → TOTP einrichten → QR-Code mit Aegis/FreeOTP scannen
- 6-stelligen Code bestätigen → fertig
SMTP später konfigurieren
Stack in Portainer editieren, Env-Vars ergänzen:
SMTP_HOST=mail.example.com
SMTP_PORT=587
SMTP_USER=user@example.com
SMTP_PASS=geheim
SMTP_TLS=starttls
Stack neu deployen – keine Datenverlust.
Caddy-Integration
Caddyfile.snippet in bestehende Caddyfile eintragen.
CADDY_NETWORK_EXTERNAL=true, CADDY_NETWORK_NAME=caddy-net setzen.
Security
SECRET_KEYniemals in Git committen- TOTP für Admin sofort aktivieren
- SMTP-Passwort nur als Portainer Env-Var