#!/bin/bash # MQTT Setup Script - Erstellt User für Mosquitto # ================================================ # # Verwendung: # ./setup.sh - Erstellt alle User aus .env # ./setup.sh create - Erstellt einzelnen User set -e # CLI-Modus: Einzelnen User erstellen if [ "$1" == "create" ]; then if [ -z "$2" ] || [ -z "$3" ]; then echo "❌ Fehler: Username und Passwort erforderlich!" echo "Verwendung: $0 create " exit 1 fi USERNAME="$2" PASSWORD="$3" # Prüfe ob Docker läuft if ! docker info > /dev/null 2>&1; then echo "❌ Fehler: Docker ist nicht gestartet!" exit 1 fi # Prüfe ob Container läuft if ! docker ps | grep -q mosquitto; then echo "❌ Fehler: Mosquitto Container läuft nicht!" echo "Starte zuerst die Container mit: docker compose up -d" exit 1 fi echo "📝 Erstelle User: $USERNAME" docker exec mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$USERNAME" "$PASSWORD" echo "✅ User $USERNAME erfolgreich erstellt/aktualisiert!" echo "" echo "⚠️ Vergiss nicht, ACL-Regeln in config/acl.conf anzupassen!" echo "Und Mosquitto neu zu starten: docker compose restart mosquitto" exit 0 fi # Lade Umgebungsvariablen aus .env if [ ! -f .env ]; then echo "❌ Fehler: .env Datei nicht gefunden!" echo "Bitte erstelle eine .env Datei basierend auf .env.example" exit 1 fi # Lade .env und exportiere Variablen set -a source .env set +a echo "================================================" echo "MQTT Server Setup - Benutzer erstellen" echo "================================================" echo "" # Validiere dass alle benötigten Variablen gesetzt sind required_vars=( "MQTT_ADMIN_USERNAME" "MQTT_ADMIN_PASSWORD" "MQTT_PANEL_USERNAME" "MQTT_PANEL_PASSWORD" "MQTT_TESTUSER_USERNAME" "MQTT_TESTUSER_PASSWORD" "MQTT_DEVICE1_USERNAME" "MQTT_DEVICE1_PASSWORD" "MQTT_DEVICE2_USERNAME" "MQTT_DEVICE2_PASSWORD" "MQTT_MONITOR_USERNAME" "MQTT_MONITOR_PASSWORD" ) for var in "${required_vars[@]}"; do if [ -z "${!var}" ]; then echo "❌ Fehler: $var ist nicht in .env definiert!" exit 1 fi done # Prüfe ob Docker läuft if ! docker info > /dev/null 2>&1; then echo "❌ Fehler: Docker ist nicht gestartet!" exit 1 fi # Prüfe ob Container läuft if ! docker ps | grep -q mosquitto; then echo "⚠️ Mosquitto Container läuft nicht. Starte Container..." docker compose up -d mosquitto echo "⏳ Warte 5 Sekunden bis Mosquitto gestartet ist..." sleep 5 fi echo "📝 Erstelle Benutzer in der Passwort-Datei..." echo "" # Admin User echo "➡️ Erstelle Admin User (Vollzugriff)" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_ADMIN_USERNAME" "$MQTT_ADMIN_PASSWORD" echo " ✅ User: $MQTT_ADMIN_USERNAME erstellt" # Panel User für Web UI echo "➡️ Erstelle Panel User (für Web Dashboard)" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_PANEL_USERNAME" "$MQTT_PANEL_PASSWORD" echo " ✅ User: $MQTT_PANEL_USERNAME erstellt" # Test User echo "➡️ Erstelle Test User" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_TESTUSER_USERNAME" "$MQTT_TESTUSER_PASSWORD" echo " ✅ User: $MQTT_TESTUSER_USERNAME erstellt" # Device User echo "➡️ Erstelle Device1 User" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_DEVICE1_USERNAME" "$MQTT_DEVICE1_PASSWORD" echo " ✅ User: $MQTT_DEVICE1_USERNAME erstellt" echo "➡️ Erstelle Device2 User" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_DEVICE2_USERNAME" "$MQTT_DEVICE2_PASSWORD" echo " ✅ User: $MQTT_DEVICE2_USERNAME erstellt" # Monitor User (Read-Only) echo "➡️ Erstelle Monitor User (Read-Only)" docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/passwords.txt "$MQTT_MONITOR_USERNAME" "$MQTT_MONITOR_PASSWORD" echo " ✅ User: $MQTT_MONITOR_USERNAME erstellt" echo "" echo "================================================" echo "✅ Setup abgeschlossen!" echo "================================================" echo "" echo "Erstellte User:" echo " - $MQTT_ADMIN_USERNAME (Vollzugriff)" echo " - $MQTT_PANEL_USERNAME (für Web Dashboard)" echo " - $MQTT_TESTUSER_USERNAME (normaler User)" echo " - $MQTT_DEVICE1_USERNAME (IoT Device 1)" echo " - $MQTT_DEVICE2_USERNAME (IoT Device 2)" echo " - $MQTT_MONITOR_USERNAME (Read-Only)" echo "" echo "⚠️ Passwörter sind in der .env Datei definiert" echo "" echo "Mosquitto neu laden..." docker exec mosquitto mosquitto -c /mosquitto/config/mosquitto.conf & echo "" echo "🚀 MQTT Broker läuft auf:" echo " - MQTT: localhost:1883" echo " - WebSocket: ws://localhost:9001" echo " - Web Dashboard: http://localhost:8080" echo "" echo "📡 Öffentliches Topic ohne Authentifizierung:" echo " - public/*" echo ""