Mosquitto: 2. Das Lifecycle-Skript

Diese Dokumentation ist Teil des GitHub Actions & GitLab CI-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Starten Sie einen echten Mosquitto-Service direkt aus Ihrer GitHub Actions- oder GitLab CI-Pipeline, führen Sie Ihre Tests dagegen aus und fahren Sie ihn anschließend automatisch wieder herunter.

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet Ihnen eine vollständig verwaltete Mosquitto MQTT Cloud-Umgebung, die auf Zuverlässigkeit und Flexibilität ausgelegt ist:

  • Unbegrenzter Nachrichtendurchsatz und unbegrenzte Datenübertragungen, damit Ihre Workflows niemals auf künstliche Grenzen stoßen.
  • Unbegrenzte Geräteauthentifizierung über Ihre eigene externe API, um Onboarding und Zugriffsverwaltung nahtlos zu gestalten.
  • Erweiterte ACLs für eine feingranulare Steuerung von Topics, Benutzern und Aktionen.
  • Ein individueller Domainname mit integriertem HTTPS für sichere, markenkonforme Endpunkte (zum Beispiel: https://mqtt.your-company.com).
  • Updates ohne Aufwand: Verbesserungen oder Sicherheitspatches mit nur einem Klick anwenden.
  • Gleichbleibende Performance und hohe Sicherheit, da jede Instanz auf einer privaten, dedizierten Infrastruktur läuft.

Beschleunigen Sie Ihre IoT-Projekte und reduzieren Sie den Betriebsaufwand. Sie können in nur wenigen Minuten eine sichere, produktionsreife Mosquitto MQTT Cloud Hosting-Instanz bereitstellen.

Hier finden Sie ein vollständiges Beispielskript, das den gesamten Lebenszyklus des Services abbildet. Es zeigt, wie wenig Setup nötig ist – nur wenige Befehle. Die fertigen YAML-Beispiele für Ihre Plattform finden Sie in den folgenden Abschnitten.

#!/bin/bash
set -euo pipefail

# STACKHERO_TOKEN wird als CI-Secret bereitgestellt und vom CLI automatisch erkannt.

stackName="ci-mosquitto-$$"          # Eindeutiger Stack-Name pro Lauf
serviceStore="mosquitto"             # Der Mosquitto-Service Store
instance="200"        # Bei Bedarf anpassen (siehe Schritt 3)
region="europe"                         # Regionsname (siehe stackhero regions-list)

# 1. CLI auf dem Runner installieren
curl -fsSL https://www.stackhero.io/install.sh | sh

# 2. Client für den Smoke-Test installieren (jq + curl sind die Basis)
apt-get update && apt-get install -y --no-install-recommends jq curl mosquitto-clients

# 3. Dedizierten Stack für diesen Lauf erstellen
stackId=$(stackhero --format=script stack-create --name="$stackName")
echo "Stack erstellt: $stackId"

# 4. Mosquitto hinzufügen und Service-ID erfassen
serviceId=$(stackhero --format=script service-add \
  --stack="$stackId" \
  --service-store="$serviceStore" \
  --instance="$instance" \
  --region="$region")
echo "Service hinzugefügt: $serviceId"

# 5. Warten, bis der Service läuft (dauert ggf. einige Minuten)
stackhero service-wait-for --service="$serviceId"

# 6. Konfiguration auslesen (enthält die generierten Zugangsdaten)
config=$(stackhero service-configuration-get --service="$serviceId" --format=json)

# 7. Benötigte Zugangsdaten extrahieren
host=$(echo "$config" | jq -r '.configuration.domain')
user=$(echo "$config" | jq -r '.configuration.authenticationUsers[0].login')
password=$(echo "$config" | jq -r '.configuration.authenticationUsers[0].password')

# 8. Smoke-Test: Publish a test message to a topic.
mosquitto_pub -h "$host" -p 8883 -u "$user" -P "$password" --capath /etc/ssl/certs -t "stackhero/ci" -m "hello"

echo "✅ Mosquitto ist aus der CI erreichbar."

Der Teardown-Schritt, der den Service löscht, auf dessen Entfernung wartet und anschließend den Stack entfernt, ist in den plattformspezifischen Abschnitten unten beschrieben. So wird sichergestellt, dass immer aufgeräumt wird – auch wenn ein Smoke-Test fehlschlägt.

Ein Stack kann nur gelöscht werden, wenn er leer ist. Löschen Sie daher immer zuerst den Service und warten Sie auf dessen Entfernung, bevor Sie den Stack löschen. Der Befehl service-wait-for stellt sicher, dass der Service entweder läuft oder bereits gelöscht ist, und eignet sich daher auch zum Warten auf die Löschung.