So optimieren Sie die Node.js-Produktionsinfrastruktur: Best Practices

Vorwort
Bei Forward Email haben wir jahrelang an der Perfektionierung unserer Node.js-Produktionsumgebung gearbeitet. Dieser umfassende Leitfaden stellt unsere bewährten Best Practices für die Node.js-Produktionsbereitstellung vor und konzentriert sich dabei auf Leistungsoptimierung, Überwachung und die Erkenntnisse, die wir bei der Skalierung von Node.js-Anwendungen für die Verarbeitung von Millionen täglicher Transaktionen gewonnen haben.
Unsere Revolution der Single-Core-Leistungsoptimierung um 573 %
Durch die Migration von Intel- auf AMD Ryzen-Prozessoren konnten wir die Leistung unserer Node.js-Anwendungen um 573 % steigern. Dies war keine geringfügige Optimierung – sie veränderte die Leistung unserer Node.js-Anwendungen in der Produktion grundlegend und verdeutlicht die Bedeutung der Single-Core-Leistungsoptimierung für jede Node.js-Anwendung.
Tip
Für die Best Practices der Node.js-Produktionsbereitstellung ist die Hardwareauswahl entscheidend. Wir haben uns aufgrund der Verfügbarkeit von AMD Ryzen für DataPacket Hosting entschieden, da Single-Core-Leistung für Node.js-Anwendungen entscheidend ist, da die JavaScript-Ausführung Single-Threaded ist.
Warum die Single-Core-Leistungsoptimierung für Node.js wichtig ist
Unsere Migration von Intel zu AMD Ryzen führte zu:
- 573 % Leistungssteigerung bei der Anfrageverarbeitung (dokumentiert in [GitHub-Problem #1519](https://github.com/forwardemail/status.forwardemail.net/issues/1519#issuecomment-2652177671 unserer Statusseite
- Beseitigung von Verarbeitungsverzögerungen für nahezu sofortige Antworten (erwähnt in GitHub-Problem #298)
- Besseres Preis-Leistungs-Verhältnis für Node.js-Produktionsumgebungen
- Verbesserte Reaktionszeiten für alle unsere Anwendungsendpunkte
Die Leistungssteigerung war so deutlich, dass wir AMD Ryzen Prozessoren nun für jede ernsthafte Node.js-Produktionsumgebung als unverzichtbar erachten, egal ob Sie Webanwendungen, APIs, Microservices oder andere Node.js-Workloads ausführen.
Verwandte Inhalte
Weitere Informationen zu unseren Infrastrukturoptionen finden Sie hier:
- Bester E-Mail-Weiterleitungsdienst – Leistungsvergleiche)
- Selbstgehostete Lösung – Hardwareempfehlungen
Einrichtung der Node.js-Produktionsumgebung: Unser Technologie-Stack
Unsere Best Practices für die Node.js-Produktionsbereitstellung basieren auf der bewussten Auswahl der Technologie, die auf jahrelanger Produktionserfahrung basiert. Hier erfahren Sie, welche Technologien wir verwenden und warum diese für jede Node.js-Anwendung gelten:
Paketmanager: pnpm für Produktionseffizienz
Was wir verwenden: pnpm
(angeheftete Version)
Wir haben uns für die Einrichtung unserer Node.js-Produktionsumgebung für pnpm statt npm und yarn entschieden, weil:
- Schnellere Installationszeiten in CI/CD-Pipelines
- Speicherplatzeffizienz durch Hardlinking
- Strenge Abhängigkeitsauflösung zur Vermeidung von Phantomabhängigkeiten
- Bessere Leistung in Produktionsbereitstellungen
Note
Im Rahmen unserer Best Practices für die Node.js-Produktionsbereitstellung fixieren wir exakte Versionen kritischer Tools wie pnpm, um ein konsistentes Verhalten in allen Umgebungen und auf allen Rechnern der Teammitglieder zu gewährleisten.
Implementierungsdetails:
Web Framework: Koa für moderne Node.js-Produktion
Was wir verwenden:
Wir haben uns für unsere Node.js-Produktionsinfrastruktur für Koa statt Express entschieden, da es moderne Async/Await-Unterstützung und eine sauberere Middleware-Komposition bietet. Unser Gründer Nick Baugh hat sowohl zu Express als auch zu Koa beigetragen und uns tiefe Einblicke in beide Frameworks für den Produktionseinsatz gegeben.
Diese Muster gelten unabhängig davon, ob Sie REST-APIs, GraphQL-Server, Webanwendungen oder Microservices erstellen.
Unsere Umsetzungsbeispiele:
Hintergrundjobverarbeitung: Bree für Produktionszuverlässigkeit
Was wir verwenden: bree
-Scheduler
Wir haben Bree entwickelt und pflegen es, weil vorhandene Job-Scheduler unsere Anforderungen an Worker-Thread-Unterstützung und moderne JavaScript-Funktionen in produktiven Node.js-Umgebungen nicht erfüllten. Dies gilt für alle Node.js-Anwendungen, die Hintergrundverarbeitung, geplante Aufgaben oder Worker-Threads benötigen.
Unsere Umsetzungsbeispiele:
- Bree-Server-Setup
- Alle unsere Stellenbeschreibungen
- PM2-Integritätscheck-Job
- Implementierung von Bereinigungsaufträgen
Fehlerbehandlung: @hapi/boom für Produktionszuverlässigkeit
Was wir verwenden: @hapi/boom
Wir verwenden @hapi/boom für strukturierte Fehlerantworten in unseren Node.js-Produktionsanwendungen. Dieses Muster funktioniert für alle Node.js-Anwendungen, die eine konsistente Fehlerbehandlung benötigen.
Unsere Umsetzungsbeispiele:
So überwachen Sie Node.js-Anwendungen in der Produktion
Unser Ansatz zur Überwachung von Node.js-Anwendungen in der Produktion hat sich durch jahrelange Erfahrung im Einsatz von Anwendungen im großen Maßstab weiterentwickelt. Wir implementieren die Überwachung auf mehreren Ebenen, um Zuverlässigkeit und Leistung für jede Art von Node.js-Anwendung zu gewährleisten.
Node.js-Produktionsüberwachung auf Systemebene
Unsere Kernimplementierung: helpers/monitor-server.js
Was wir verwenden: node-os-utils
Unsere Produktionsüberwachungsschwellenwerte (aus unserem tatsächlichen Produktionscode):
- 2 GB Heap-Größenlimit mit automatischen Warnmeldungen
- 25 % Speicherauslastung Warnschwelle
- 80 % CPU-Auslastung Warnschwelle
- 75 % Festplattenauslastung Warnschwelle
Warning
Diese Schwellenwerte gelten für unsere spezifische Hardwarekonfiguration. Wenn Sie die Node.js-Produktionsüberwachung implementieren, überprüfen Sie unsere monitor-server.js-Implementierung, um die genaue Logik zu verstehen und die Werte an Ihr Setup anzupassen.
Überwachung auf Anwendungsebene für die Node.js-Produktion
Unsere Fehlerklassifizierung: helpers/is-code-bug.js
Dieser Helfer unterscheidet zwischen:
- Tatsächliche Codefehler, die sofortiger Aufmerksamkeit bedürfen
- Benutzerfehler, die dem erwarteten Verhalten entsprechen
- Externe Dienstfehler, die wir nicht beeinflussen können
Dieses Muster gilt für alle Node.js-Anwendungen – Web-Apps, APIs, Microservices oder Hintergrunddienste.
Unsere Protokollierungsimplementierung: helpers/logger.js
Wir implementieren eine umfassende Feldredaktion, um vertrauliche Informationen zu schützen und gleichzeitig nützliche Debugfunktionen in unserer Node.js-Produktionsumgebung aufrechtzuerhalten.
Anwendungsspezifische Überwachung
Unsere Serverimplementierungen:
Warteschlangenüberwachung: Wir implementieren Warteschlangenlimits von 5 GB und Timeouts von 180 Sekunden für die Anforderungsverarbeitung, um eine Ressourcenüberlastung zu verhindern. Diese Muster gelten für alle Node.js-Anwendungen mit Warteschlangen oder Hintergrundverarbeitung.
Node.js-Produktionsüberwachung mit PM2-Integritätsprüfungen
Wir haben unsere Node.js-Produktionsumgebung mit PM2 über Jahre hinweg optimiert. Unsere PM2-Integritätschecks sind unerlässlich für die Zuverlässigkeit jeder Node.js-Anwendung.
Unser PM2-Gesundheitschecksystem
Unsere Kernimplementierung: jobs/check-pm2.js
Unsere Node.js-Produktionsüberwachung mit PM2-Integritätschecks umfasst:
- Läuft alle 20 Minuten über Cron-Planung
- Erfordert mindestens 15 Minuten Betriebszeit, bevor ein Prozess als fehlerfrei gilt
- Überprüft Prozessstatus und Speichernutzung
- Automatischer Neustart fehlgeschlagener Prozesse
- Verhindert Neustartschleifen durch intelligente Integritätsprüfung
Caution
Für die Best Practices der Node.js-Produktionsbereitstellung benötigen wir mindestens 15 Minuten Betriebszeit, bevor ein Prozess als fehlerfrei gilt, um Neustartschleifen zu vermeiden. Dies verhindert kaskadierende Fehler bei Prozessen mit Speicherproblemen oder anderen Problemen.
Unsere PM2-Produktionskonfiguration
Setup unseres Ökosystems: Sehen Sie sich die Startdateien unseres Servers für das Setup der Node.js-Produktionsumgebung an:
Diese Muster gelten unabhängig davon, ob Sie Express-Apps, Koa-Server, GraphQL-APIs oder andere Node.js-Anwendungen ausführen.
Automatisierte PM2-Bereitstellung
PM2-Bereitstellung: ansible/playbooks/node.yml
Wir automatisieren unser gesamtes PM2-Setup über Ansible, um konsistente Node.js-Produktionsbereitstellungen auf allen unseren Servern sicherzustellen.
Produktionsfehlerbehandlungs- und Klassifizierungssystem
Eine unserer wertvollsten Best Practices für die Produktionsbereitstellung von Node.js ist die intelligente Fehlerklassifizierung, die für jede Node.js-Anwendung gilt:
Unsere isCodeBug-Implementierung für die Produktion
Quelle: helpers/is-code-bug.js
Dieser Helfer bietet eine intelligente Fehlerklassifizierung für Node.js-Anwendungen in der Produktion, um:
- Priorisierung tatsächlicher Fehler gegenüber Benutzerfehlern
- Verbesserung unserer Incident-Reaktion durch Fokussierung auf echte Probleme
- Reduzierung der Warnmüdigkeit aufgrund erwarteter Benutzerfehler
- Besseres Verständnis von Anwendungs- und Benutzerproblemen
Dieses Muster funktioniert für jede Node.js-Anwendung – egal, ob Sie E-Commerce-Sites, SaaS-Plattformen, APIs oder Microservices erstellen.
Integration mit unserer Produktionsprotokollierung
Unsere Logger-Integration: helpers/logger.js
Unser Logger verwendet isCodeBug
, um Warnstufen und Feldredaktionen zu bestimmen und sicherzustellen, dass wir über echte Probleme benachrichtigt werden, während gleichzeitig Rauschen in unserer Node.js-Produktionsumgebung herausgefiltert wird.
Ähnliche Inhalte
Erfahren Sie mehr über unsere Fehlerbehandlungsmuster:
- Aufbau eines zuverlässigen Zahlungssystems – Fehlerbehandlungsmuster
- E-Mail-Datenschutz – Sicherheitsfehlerbehandlung
Erweitertes Performance-Debugging mit v8-profiler-next und cpupro
Wir verwenden erweiterte Profiling-Tools, um Heap-Snapshots zu analysieren und OOM-Probleme (Out of Memory), Leistungsengpässe und Node.js-Speicherprobleme in unserer Produktionsumgebung zu beheben. Diese Tools sind für jede Node.js-Anwendung mit Speicherlecks oder Leistungsproblemen unerlässlich.
Unser Profiling-Ansatz für die Node.js-Produktion
Von uns empfohlene Tools:
v8-profiler-next
– Zum Generieren von Heap-Snapshots und CPU-Profilencpupro
– Zum Analysieren von CPU-Profilen und Heap-Snapshots
Tip
Wir nutzen v8-profiler-next und cpupro gemeinsam, um einen umfassenden Performance-Debugging-Workflow für unsere Node.js-Anwendungen zu erstellen. Diese Kombination hilft uns, Speicherlecks und Performance-Engpässe zu identifizieren und unseren Produktionscode zu optimieren.
So implementieren wir die Heap-Snapshot-Analyse
Unsere Überwachungsimplementierung: helpers/monitor-server.js
Unsere Produktionsüberwachung umfasst die automatische Generierung von Heap-Snapshots, wenn Speicherschwellenwerte überschritten werden. Dies hilft uns, OOM-Probleme zu beheben, bevor sie zu Anwendungsabstürzen führen.
Wichtige Implementierungsmuster:
- Automatische Snapshots, wenn die Heap-Größe den Schwellenwert von 2 GB überschreitet
- Signalbasiertes Profiling für On-Demand-Analysen in der Produktion
- Aufbewahrungsrichtlinien für die Verwaltung des Snapshot-Speichers
- Integration mit unseren Bereinigungsjobs für automatisierte Wartung
Leistungsdebugging-Workflow
Studieren Sie unsere tatsächliche Implementierung:
- Überwachung der Serverimplementierung – Heap-Überwachung und Snapshot-Erstellung
- Bereinigungsauftrag – Snapshot-Aufbewahrung und -Bereinigung
- Logger-Integration – Leistungsprotokollierung
Empfohlene Implementierung für Ihre Node.js-Anwendung
Für die Heap-Snapshot-Analyse:
- Installieren Sie v8-profiler-next zur Snapshot-Generierung.
- Verwenden Sie cpupro zur Analyse der generierten Snapshots.
- Implementieren Sie Überwachungsschwellenwerte ähnlich wie in unserer Datei monitor-server.js.
- Einrichten einer automatischen Bereinigung zur Verwaltung des Snapshot-Speichers.
- Erstellen Sie Signalhandler für die On-Demand-Profilerstellung in der Produktion.
Für die CPU-Profilerstellung:
- CPU-Profile erstellen während Hochlastzeiten
- Mit cpupro analysieren, um Engpässe zu identifizieren
- Hot Paths und Optimierungsmöglichkeiten im Fokus
- Leistungsverbesserungen vor/nach überwachen
Warning
Das Erstellen von Heap-Snapshots und CPU-Profilen kann die Leistung beeinträchtigen. Wir empfehlen, eine Drosselung zu implementieren und die Profilerstellung nur bei der Untersuchung spezifischer Probleme oder während Wartungsfenstern zu aktivieren.
Integration mit unserer Produktionsüberwachung
Unsere Profiling-Tools lassen sich in unsere umfassendere Überwachungsstrategie integrieren:
- Automatische Auslösung basierend auf Speicher-/CPU-Schwellenwerten
- Alarmintegration bei erkannten Leistungsproblemen
- Historische Analyse zur Verfolgung von Leistungstrends im Zeitverlauf
- Korrelation mit Anwendungsmetriken für umfassendes Debugging
Dieser Ansatz hat uns dabei geholfen, Speicherlecks zu identifizieren und zu beheben, Hotcode-Pfade zu optimieren und eine stabile Leistung in unserer Node.js-Produktionsumgebung aufrechtzuerhalten.
Sicherheit der Node.js-Produktionsinfrastruktur
Wir implementieren umfassende Sicherheit für unsere Node.js-Produktionsinfrastruktur durch Ansible-Automatisierung. Diese Praktiken gelten für alle Node.js-Anwendungen:
Sicherheit auf Systemebene für die Node.js-Produktion
Unsere Ansible-Implementierung: ansible/playbooks/security.yml
Unsere wichtigsten Sicherheitsmaßnahmen für Node.js-Produktionsumgebungen:
- Swap deaktiviert, um das Schreiben sensibler Daten auf die Festplatte zu verhindern.
- Core Dumps deaktiviert, um Speicherauszüge mit sensiblen Informationen zu verhindern.
- USB-Speicher blockiert, um unbefugten Datenzugriff zu verhindern.
- Kernel-Parameter-Optimierung für Sicherheit und Leistung.
Warning
Bei der Implementierung von Best Practices für die Node.js-Produktionsbereitstellung kann die Deaktivierung des Swap-Speichers zu Abstürzen aufgrund von Speichermangel führen, wenn Ihre Anwendung den verfügbaren RAM überschreitet. Wir überwachen die Speichernutzung sorgfältig und dimensionieren unsere Server entsprechend.
Anwendungssicherheit für Node.js-Anwendungen
Unsere Protokollfeldredaktion: helpers/logger.js
Wir entfernen sensible Felder aus Protokollen, darunter Passwörter, Token, API-Schlüssel und persönliche Informationen. Dies schützt die Privatsphäre der Benutzer und gewährleistet gleichzeitig die Debugging-Funktionen in jeder Node.js-Produktionsumgebung.
Automatisierung der Infrastruktursicherheit
Unser komplettes Ansible-Setup für die Node.js-Produktion:
Unser Sicherheitsinhalt
Erfahren Sie mehr über unseren Sicherheitsansatz:
- Die besten Sicherheitsaudit-Unternehmen
- Quantensichere verschlüsselte E-Mail
- Warum Open Source-E-Mail-Sicherheit?
Datenbankarchitektur für Node.js-Anwendungen
Wir verwenden einen hybriden Datenbankansatz, der für unsere Node.js-Anwendungen optimiert ist. Diese Muster können für jede Node.js-Anwendung angepasst werden:
SQLite-Implementierung für Node.js-Produktion
Was wir verwenden:
Unsere Konfiguration: ansible/playbooks/sqlite.yml
Wir verwenden SQLite für benutzerspezifische Daten in unseren Node.js-Anwendungen, weil es Folgendes bietet:
- Datenisolierung pro Benutzer/Mandant
- Bessere Leistung bei Einzelbenutzerabfragen
- Vereinfachte Sicherung und Migration
- Geringere Komplexität im Vergleich zu gemeinsam genutzten Datenbanken
Dieses Muster eignet sich gut für SaaS-Anwendungen, Multi-Tenant-Systeme oder jede Node.js-Anwendung, die eine Datenisolierung benötigt.
MongoDB-Implementierung für Node.js-Produktion
Was wir verwenden:
Unsere Setup-Implementierung: helpers/setup-mongoose.js
Unsere Konfiguration: config/mongoose.js
Wir verwenden MongoDB für Anwendungsdaten in unserer Node.js-Produktionsumgebung, weil es Folgendes bietet:
- Flexibles Schema für sich entwickelnde Datenstrukturen
- Bessere Leistung für komplexe Abfragen
- Horizontale Skalierung
- Umfangreiche Abfragesprache
Note
Unser hybrider Ansatz ist optimal auf unseren spezifischen Anwendungsfall abgestimmt. Analysieren Sie die tatsächlichen Datenbanknutzungsmuster in der Codebasis, um zu verstehen, ob dieser Ansatz für Ihre Node.js-Anwendung geeignet ist.
Node.js-Produktions-Hintergrundjobverarbeitung
Wir haben unsere Hintergrundjob-Architektur um Bree herum aufgebaut, um eine zuverlässige Node.js-Produktionsbereitstellung zu gewährleisten. Dies gilt für alle Node.js-Anwendungen, die Hintergrundverarbeitung benötigen:
Unser Bree-Server-Setup für die Produktion
Unsere Hauptimplementierung: bree.js
Unsere Ansible-Bereitstellung: ansible/playbooks/bree.yml
Beispiele für Produktionsjobs
Integritätsüberwachung: jobs/check-pm2.js
Automatisierung der Bereinigung: jobs/cleanup-tmp.js
Alle unsere Jobs: Durchsuchen Sie unser vollständiges Stellenverzeichnis
Diese Muster gelten für jede Node.js-Anwendung, die Folgendes benötigt:
- Geplante Aufgaben (Datenverarbeitung, Berichte, Bereinigung)
- Hintergrundverarbeitung (Bildgrößenänderung, E-Mail-Versand, Datenimport)
- Zustandsüberwachung und Wartung
- Worker-Thread-Auslastung für CPU-intensive Aufgaben
Unsere Job-Scheduling-Muster für die Node.js-Produktion
Sehen Sie sich unsere tatsächlichen Jobplanungsmuster in unserem Jobverzeichnis an, um Folgendes zu verstehen:
- Wie wir Cron-ähnliches Scheduling in der Node.js-Produktion implementieren
- Unsere Fehlerbehandlungs- und Wiederholungslogik
- Wie wir Worker-Threads für rechenintensive Aufgaben nutzen
Automatisierte Wartung für Node.js-Produktionsanwendungen
Wir implementieren proaktive Wartung, um häufige Produktionsprobleme in Node.js zu vermeiden. Diese Muster gelten für jede Node.js-Anwendung:
Unsere Bereinigungsimplementierung
Quelle: jobs/cleanup-tmp.js
Unsere automatisierte Wartung für Node.js-Produktionsanwendungen zielt auf Folgendes ab:
- Temporäre Dateien, die älter als 24 Stunden sind
- Protokolldateien, die die Aufbewahrungsfrist überschreiten
- Cache-Dateien und temporäre Daten
- Hochgeladene Dateien, die nicht mehr benötigt werden
- Heap-Snapshots aus der Leistungsbereinigung
Diese Muster gelten für jede Node.js-Anwendung, die temporäre Dateien, Protokolle oder zwischengespeicherte Daten generiert.
Speicherplatzverwaltung für Node.js-Produktion
Unsere Überwachungsschwellenwerte: helpers/monitor-server.js
- Warteschlangenlimits für die Hintergrundverarbeitung
- Warnschwelle für 75 % Festplattenauslastung
- Automatische Bereinigung bei Überschreitung der Schwellenwerte
Automatisierung der Infrastrukturwartung
Unsere Ansible-Automatisierung für die Node.js-Produktion:
Implementierungshandbuch für die Produktionsbereitstellung von Node.js
Studieren Sie unseren aktuellen Code für Best Practices in der Produktion
Beginnen Sie mit diesen Schlüsseldateien für die Einrichtung der Node.js-Produktionsumgebung:
- Konfiguration:
config/index.js
- Überwachung:
helpers/monitor-server.js
- Fehlerbehandlung:
helpers/is-code-bug.js
- Protokollierung:
helpers/logger.js
- Prozesszustand:
jobs/check-pm2.js
Lernen Sie aus unseren Blogbeiträgen
Unsere technischen Implementierungsleitfäden für die Node.js-Produktion:
- NPM-Paket-Ökosystem
- Aufbau von Zahlungssystemen
- Implementierung des E-Mail-Datenschutzes
- JavaScript-Kontaktformulare
- React-E-Mail-Integration
Infrastrukturautomatisierung für die Node.js-Produktion
Unsere Ansible-Playbooks zum Lernen für die Node.js-Produktionsbereitstellung:
Unsere Fallstudien
Unsere Unternehmensimplementierungen:
Fazit: Best Practices für die Node.js-Produktionsbereitstellung
Unsere Node.js-Produktionsinfrastruktur zeigt, dass Node.js-Anwendungen durch Folgendes eine Zuverlässigkeit auf Unternehmensniveau erreichen können:
- Bewährte Hardware (AMD Ryzen für 573 % Single-Core-Leistungsoptimierung)
- Erprobtes Node.js-Produktionsmonitoring mit spezifischen Schwellenwerten und automatisierten Reaktionen
- Intelligente Fehlerklassifizierung für eine verbesserte Reaktion auf Vorfälle in Produktionsumgebungen
- Erweitertes Performance-Debugging mit v8-profiler-next und cpupro zur OOM-Prävention
- Umfassende Sicherheitshärtung durch Ansible-Automatisierung
- Hybride Datenbankarchitektur, optimiert für Anwendungsanforderungen
- Automatisierte Wartung zur Vermeidung häufiger Node.js-Produktionsprobleme
Wichtige Erkenntnis: Studieren Sie unsere aktuellen Implementierungsdateien und Blogbeiträge, anstatt allgemeinen Best Practices zu folgen. Unsere Codebasis bietet praxisnahe Muster für die Node.js-Produktionsbereitstellung, die für jede Node.js-Anwendung angepasst werden können – Web-Apps, APIs, Microservices oder Hintergrunddienste.
Vollständige Ressourcenliste für die Node.js-Produktion
Unsere Kernimplementierungsdateien
- Hauptkonfiguration
- Paketabhängigkeiten
- Serverüberwachung
- Fehlerklassifizierung
- Protokollierungssystem
- PM2-Gesundheitschecks
- Automatisierte Bereinigung
Unsere Serverimplementierungen
Unsere Infrastrukturautomatisierung
Unsere technischen Blogbeiträge
- NPM-Ökosystemanalyse
- Implementierung des Zahlungssystems
- Technischer Leitfaden zum E-Mail-Datenschutz
- JavaScript-Kontaktformulare
- React-E-Mail-Integration
- Leitfaden zur selbstgehosteten Lösung