Journal-IndexDockup / Feldnotiz
Note / self-host-metabase

Metabase 2026 selbst hosten: Anwendungsdatenbank, TLS und Backups

Eine praxisnahe Anleitung zum Self-Hosting von Metabase mit Docker, Ports, persistenten Daten, TLS, Sicherheit, Backups und den Fehlern, die den produktiven Einsatz verhindern. Inklusive Prüfungen.

Wenn du bereits versucht hast, Metabase selbst zu hosten, kommt dir dieser frustrierende Zustand wahrscheinlich bekannt vor: Die Benutzeroberfläche erscheint, aber die Anwendungsdatenbank fehlt, obwohl die Quelldatenbanken der Dashboards weiterhin vorhanden sind. Das erneute Erstellen des Containers behebt selten eine Unstimmigkeit zwischen URLs, Zustand und Abhängigkeiten.

Diese Anleitung verwendet ein konkretes Abnahmekriterium: eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden. Jede Konfigurationsentscheidung wird an diesem Kriterium gemessen und nicht an einem grünen Container-Badge.

Zugangsdaten, Rollen und exponierte Schnittstellen

Erstelle ein Threat Model für die von Metabase ausgeführte Aktion und nicht nur für das Login-Formular. Der risikoreichste Fehler ist hier, die eingebettete H2-Anwendungsdatenbank als einzige Produktionskopie zu verwenden. Setze folgende Grenze um: Weise Metabase nach Möglichkeit schreibgeschützte Datenbankrollen zu und trenne Berechtigungen für Collections von Datenbankzugangsdaten.

Generiere MB_ENCRYPTION_SECRET_KEY einmalig, halte den Schlüssel aus Git heraus und bewahre ihn zusammen mit dem Recovery-Manifest auf, da eine Änderung verschlüsselten oder signierten Anwendungszustand ungültig machen kann. Behebe einen Berechtigungsfehler nicht, indem du den Container als root ausführst oder das Hostsystem umfassend einbindest. Auch Ressourcenlimits gehören zum Sicherheitskonzept, da JVM-Heap, parallele Abfragen, Result-Caching und die Last auf den einzelnen Analytics-Datenquellen durch Benutzer ausgelöst werden können.

Metabase von seinen Abhängigkeiten trennen

Die kleinste verantwortbare Metabase-Topologie besteht aus einem privaten Listener auf Port 3000, einer Ingress-Route und einer dokumentierten Zustandsgrenze. Der Netzwerkvertrag für Metabase ist eine dedizierte Postgres-Anwendungsdatenbank, die von den Analytics-Datenquellen getrennt ist. Halte private Endpunkte im internen DNS, erlaube nur erforderliche ausgehende Verbindungen und gib Metabase ein Service-Konto mit eingeschränkten Berechtigungen.

Validiere die Topologie, indem du einen sauberen Client eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden lässt. Beobachte währenddessen JVM-Heap, parallele Abfragen, Result-Caching und die Last auf den einzelnen Analytics-Datenquellen. Das Ergebnis zeigt, ob die nächste Verbesserung bei Arbeitsspeicher, Storage, Netzwerk oder einem separaten Worker ansetzen sollte, statt zu einer beliebigen Dimensionierung des Containers zu verleiten.

Eine Docker-Basis für Metabase

Der folgende Befehl macht die Containergrenze sichtbar, ohne so zu tun, als würde er jeden externen Dienst bereitstellen.

docker run -d \
  --name metabase \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v metabase-data:/metabase-data \
  -e MB_ENCRYPTION_SECRET_KEY=replace-with-a-long-random-value \
  -e MB_DB_TYPE=h2 \
  -e MB_DB_FILE=/metabase-data/metabase.db \
  metabase/metabase:latest

Bevor du die Ingress-Route öffnest, prüfe die aufgelöste Umgebung, Mounts und den Listener. Ergänze die geprüften Verbindungsdaten für eine dedizierte Postgres-Anwendungsdatenbank, die von den Analytics-Datenquellen getrennt ist, und verwende für private Dienste private Namen. Der erfolgreiche Start ist erst erreicht, wenn du eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden kannst – nicht, wenn docker ps lediglich Up ausgibt.

Die Metabase-Bereitstellung Ende zu Ende prüfen

Ein Production Gate für Metabase sollte von jemandem ausführbar sein, der die Bereitstellung nicht selbst erstellt hat. Gib dieser Person die festgelegte Version, ein nicht sensibles Testkonto und folgende Aufgabe: eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden. Wenn die Anleitung undokumentierten Shell-Zugriff erfordert, ist der Dienst operativ noch nicht bereit.

Wiederhole das Gate, nachdem du ausschließlich den Container ersetzt hast. Stelle anschließend die Metabase-Anwendungsdatenbank wieder her – nicht nur abgefragte Datenquellen in einer leeren Infrastruktur – und beweise, dass Benutzer, Collections, Fragen, Dashboard-Filter und Abonnements wieder erscheinen und anhand der wiederhergestellten Verbindungsmetadaten ausgeführt werden. Messe JVM-Heap, parallele Abfragen, Result-Caching und die Last auf den einzelnen Analytics-Datenquellen während beider erfolgreichen Durchläufe. Unerwartete Unterschiede weisen häufig auf einen fehlenden Cache, Index, Worker oder Daten-Mount hin.

Füge eine Fehlerübung hinzu: Verweigere der Testidentität vorübergehend den Zugriff auf eine dedizierte Postgres-Anwendungsdatenbank, die von den Analytics-Datenquellen getrennt ist. Metabase sollte einen hilfreichen Fehler ausgeben, den vorhandenen Zustand bewahren und sich erholen, sobald die gültige Bedingung wiederhergestellt ist. Speichere die Zeitstempel und relevanten Logzeilen, wobei du Geheimnisse schwärzt. Diese Belege dienen als Referenz für das nächste Image oder die nächste Konfigurationsänderung.

Interne und externe URLs korrekt auseinanderhalten

Browser, API-Client und Metabase müssen sich auf einen gemeinsamen Origin einigen. Setze dafür MB_SITE_URL auf den öffentlichen HTTPS-Origin. Bewahre Host und Protokoll unverändert und halte Port 3000 als konkurrierende öffentliche Adresse nicht verfügbar.

Der Leitfaden zur Fehlerbehebung bei nicht erreichbaren Websites hilft dabei, eine nicht erreichbare Route von einer antwortenden Anwendung zu unterscheiden. Diese Unterscheidung ist hier wichtig: Die Anwendungsdatenbank fehlt, obwohl die Quelldatenbanken der Dashboards weiterhin vorhanden sind. Nur der erste Fall lässt sich durch Änderungen an der Ingress-Route beheben; für den zweiten musst du Metabase-Logs, Zustand oder Workload untersuchen.

Metabase am tatsächlichen Engpass betreiben

Überwache bei Metabase eine Transaktion und nicht nur einen Prozess: eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden. Kombiniere Latenz und Fehlerrate mit JVM-Heap, parallelen Abfragen, Result-Caching und der Last auf den einzelnen Analytics-Datenquellen, damit ein Alert die betroffene Komponente identifiziert.

Die Upgrade-Probe muss berücksichtigen, dass die Metabase-Anwendungsdatenbank und die Plugin-Versionen gemeinsam migriert werden müssen. Abgefragte Geschäftsdatenbanken sind kein Ersatz für diesen Zustand. Stelle den Zustand wieder her, migriere ihn und führe die Transaktion vor dem Austausch in der Produktion aus. Wenn die Anwendungsdatenbank fehlt, obwohl die Quelldatenbanken der Dashboards weiterhin vorhanden sind, lösche keine Daten, nur damit der Start grün wird. Vergleiche stattdessen in dieser Reihenfolge Version, Variablen, Mounts und die Erreichbarkeit der Abhängigkeiten.

Volumes sind nur die erste Recovery-Schicht

Schütze den Zustand von Metabase, bevor du den Container optimierst. Erforderlich ist die Metabase-Anwendungsdatenbank und nicht nur die abgefragten Datenquellen. Binde /metabase-data vor dem Bootstrap ein, schreibe harmlose Beispieldaten und ersetze den Container, um zu beweisen, dass dieser Pfad tatsächlich persistent ist. Wenn mehrere Speicher konsistent bleiben müssen, dokumentiere die Reihenfolge, in der Schreibvorgänge pausiert und Backups erstellt werden.

Bewahre Kopien außerhalb des Deployment-Servers auf und verschlüssele Material, das Zugangsdaten oder private Inhalte enthält. Eine Wiederherstellung ist erfolgreich, wenn Benutzer, Collections, Fragen, Dashboard-Filter und Abonnements wieder erscheinen und anhand der wiederhergestellten Verbindungsmetadaten ausgeführt werden. Der Unterschied zwischen einem persistenten Mount und einer unabhängigen Kopie wird in persistentem Storage und Snapshots erläutert.

Metabase auf Dockup bereitstellen, ohne die Grenzen aufzugeben

Ein Dockup-Template sollte Image, Port 3000, Mounts, Health-Timing, Domain, TLS und Secret-Bereitstellung festlegen. Dockup sollte die privaten Teile einer dedizierten Postgres-Anwendungsdatenbank im internen Netzwerk von den Analytics-Datenquellen getrennt halten und keinen zusätzlichen öffentlichen Port freigeben. Dieselbe Bereitstellung kann auf Dockup-Server oder kundenseitig angebundene Kapazität zielen.

Nachdem die Route aktiv ist, wende die öffentliche Einstellung an und versuche, eine schreibgeschützte Beispieldatenbank zu verbinden, eine Frage zu speichern, ein Dashboard zu erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal zu versenden. Sichere die Metabase-Anwendungsdatenbank und nicht nur abgefragte Datenquellen und nimm die Wiederherstellungsübung in den Betriebsplan auf. Diese Aufgaben gehören zu Metabase und bleiben auch nach der Infrastruktur-Bereitstellung sichtbar.

Häufig gestellte Fragen

Was benötigt Metabase für eine produktive Bereitstellung?

Leite den Metabase-Container auf Port 3000 über einen einzigen HTTPS-Origin weiter. Die unterstützende Netzwerkanforderung ist eine dedizierte Postgres-Anwendungsdatenbank, die von den Analytics-Datenquellen getrennt ist. Erkläre Metabase erst dann für bereit, wenn du eine schreibgeschützte Beispieldatenbank verbinden, eine Frage speichern, ein Dashboard erstellen und ein Abonnement über den konfigurierten E-Mail-Kanal versenden kannst.

Welche Metabase-Daten gehören in ein Backup?

Mache /metabase-data persistent und nimm die Metabase-Anwendungsdatenbank in dasselbe Recovery-Manifest auf und nicht nur abgefragte Datenquellen. Eine saubere Metabase-Wiederherstellung ist erst dann erfolgreich, wenn Benutzer, Collections, Fragen, Dashboard-Filter und Abonnements wieder erscheinen und anhand der wiederhergestellten Verbindungsmetadaten ausgeführt werden.

Benötigt Metabase HTTPS hinter einem Reverse Proxy?

Verwende HTTPS für den öffentlichen Metabase-Origin und halte Port 3000 auf der internen Route. Wende die Metabase-Einstellung korrekt an: Setze MB_SITE_URL auf den öffentlichen HTTPS-Origin. Bei Metabase schützt HTTPS Zugangsdaten oder Benutzerinhalte während der Übertragung und sorgt für ein konsistentes, vom Origin abhängiges Verhalten des Clients.

Wie sollte ein Metabase-Upgrade getestet werden?

Stelle den aktuellen Metabase-Zustand in einer isolierten Bereitstellung wieder her, wende die Kandidatenversion an und wiederhole die Abnahmetransaktion. Achte besonders darauf, dass die Metabase-Anwendungsdatenbank und die Plugin-Versionen gemeinsam migriert werden müssen. Abgefragte Geschäftsdatenbanken sind kein Ersatz für diesen Zustand. Bewahre das vorherige Metabase-Image auf, bis die Grenzen der Datenmigration und des Rollbacks geklärt sind.