Self-Hosting gibt Unternehmen direkte Kontrolle über Standort der Anwendung, Datengrenzen und Betriebskosten. Gleichzeitig übernehmen sie Verantwortung für Updates, Verfügbarkeit, Sicherungen und Störungsbehebung. Docker, Coolify und Traefik bilden einen praxistauglichen Auslieferungs-Stack, wenn jedes Werkzeug eine klare Aufgabe hat und die Installation als Produktionsinfrastruktur betrieben wird.
Docker paketiert Dienste und Abhängigkeiten. Coolify verwaltet Builds, Deployments und Konfiguration. Traefik leitet eingehenden Verkehr weiter und kann TLS-Zertifikate automatisieren. Verlässlich wird die Kombination erst durch ein passendes Betriebsmodell.
Grenzen vor dem Server festlegen
Vor der Bereitstellung listen wir Anwendungen, Datenspeicher, öffentliche Endpunkte und Vertrauensstufen auf. Dienste aus dem Internet dürfen keine uneingeschränkten Netze mit Datenbanken oder internen Admin-Werkzeugen teilen. Docker-Netzwerke trennen öffentlichen Eingang, Anwendungsverkehr und Persistenz. Für normalen Webverkehr benötigt nur Traefik Ports am Host; Datenbanken brauchen meist überhaupt keinen öffentlichen Port.
Es ist außerdem zu entscheiden, ob ein einzelner Host als Ausfallbereich akzeptabel ist. Eine kleine interne Anwendung kann auf einen gut gepflegten Server passen. Ein kundenseitiges System mit engeren Wiederherstellungszielen benötigt gegebenenfalls replizierte Daten, einen weiteren Host oder eine verwaltete Datenbank. Container-Orchestrierung ersetzt keine definierte Verfügbarkeitsanforderung.
Produktion und Staging werden mindestens durch Zugangsdaten, Datenbanken und Domains getrennt. Eigene Hosts bieten eine stärkere Grenze, wenn Risiko und Budget sie rechtfertigen. Testdaten sind keine beiläufige Kopie personenbezogener Produktionsdaten.
Unveränderliche Anwendungsimages bauen
Ein Produktionsimage muss aus einem Commit und festgelegten Abhängigkeiten reproduzierbar sein. Mehrstufige Dockerfiles halten Compiler und Paket-Caches aus dem Laufzeitimage heraus. Der Prozess läuft als Nicht-Root-Benutzer, das Image enthält nur erforderliche Dateien und besitzt einen aussagekräftigen Health Check.
Pakete oder Code werden nicht im laufenden Container geändert. Solche Anpassungen verschwinden beim Ersetzen und erschweren die Rekonstruktion eines Vorfalls. Konfiguration kommt zum Deployment-Zeitpunkt hinzu, der Anwendungscode bleibt im Image. Dauerhafte Daten liegen in benannten Volumes oder externem Speicher mit dokumentierter Sicherungsmethode.
Image-Tags benötigen eine unveränderliche Referenz, etwa den Commit-Hash. Ein bewegliches latest verrät nicht, welcher Code läuft, und taugt nicht für eine verlässliche Rücknahme. Basisimages und Abhängigkeiten werden geprüft und regelmäßig neu gebaut, damit Betriebssystemkorrekturen in die laufenden Dienste gelangen.
Mit Traefik nur beabsichtigte Dienste veröffentlichen
Traefik erkennt Dienste über Labels und ordnet Domains den richtigen Containern zu. Diese Labels sind sicherheitsrelevante Konfiguration. Ein Deployment sollte der Veröffentlichung ausdrücklich zustimmen, statt jeden erkannten Container anzubieten. Das Dashboard bleibt öffentlich deaktiviert oder wird durch starke Anmeldung und einen eingeschränkten Netzwerkweg geschützt.
Automatische TLS-Zertifikate reduzieren Routinearbeit, doch fehlgeschlagene Erneuerungen brauchen weiterhin einen Alarm. Unverschlüsseltes HTTP wird auf HTTPS umgeleitet. Geeignete Sicherheitsheader, Größen- und Zeitlimits werden in Anwendung oder Middleware gesetzt. Administrative Endpunkte benötigen je nach Risiko zusätzlich ein identitätsbasiertes Proxy, VPN oder IP-Beschränkungen.
DNS-Änderungen, Zertifikatsausgabe und Routing werden vor der Produktionsumschaltung mit einer Staging-Domain geprüft. Ein externer Health Check bestätigt den vollständigen Weg des Nutzers und nicht nur einen lokal laufenden Container.
Coolify als kontrollierte Deployment-Ebene nutzen
Coolify verbindet Quellversionen mit Builds und Deployments, verwaltet Umgebungswerte und zeigt die Auslieferungshistorie. Wer Zugriff darauf hat, kontrolliert praktisch die Produktion. Deshalb gelten persönliche Konten, starke Anmeldung und minimale Rechte. Die Verwaltungsoberfläche wird, soweit möglich, auch netzseitig eingeschränkt.
Umgebungsvariablen sind bequem, aber nicht automatisch geheim. Werte können in Prozessansichten, Logs oder Support-Exporten auftauchen. Secrets liegen in der geschützten Coolify-Konfiguration oder einem externen Secret Manager, gelangen nicht in Build-Argumente und werden nach möglicher Offenlegung ausgetauscht. Repository-Dateien enthalten nur Beispiele, keine echten Zugangsdaten.
Deployment-Hooks brauchen Authentifizierung und einen engen Geltungsbereich. Ein öffentlicher Webhook, der beliebige Dienste neu ausrollen kann, ist ein vermeidbares Risiko. Änderungen an Konfiguration und ausgelöste Releases werden nachvollziehbar protokolliert.
Daten sichern und Wiederherstellung beweisen
Ein Snapshot eines Volumes ist nicht zwingend eine konsistente Datenbanksicherung. Wir verwenden datenbankeigene Backup-Werkzeuge oder ein koordiniertes Snapshot-Verfahren, verschlüsseln das Ergebnis und kopieren es auf Speicher außerhalb des Hosts. Aufbewahrungsregeln verhindern, dass ein fehlerhafter Lauf die letzte brauchbare Kopie überschreibt.
Eine Sicherung hat erst Wert, wenn ihre Wiederherstellung funktioniert. Geplante Restore-Tests laufen in einer isolierten Umgebung, prüfen Datensätze auf Anwendungsebene und dokumentieren Zeit sowie Arbeitsschritte. Auch hochgeladene Dateien, Verschlüsselungsschlüssel und notwendige Konfiguration gehören zum Umfang. Backup-Zugänge werden getrennt vom Produktionshost geschützt, damit ein kompromittierter Host nicht automatisch alle Wiederherstellungskopien löschen kann.
Wiederherstellungsziele werden fachlich formuliert. Der Recovery Point legt fest, wie viele aktuelle Daten verloren gehen dürfen. Die Recovery Time beschreibt die zulässige Dauer bis zur Wiederaufnahme. Diese Ziele bestimmen Sicherungsrhythmus und Architektur besser als die pauschale Vorgabe "täglich sichern".
Dienst, Host und Auslieferungsweg überwachen
Erfasst werden Anwendungsfehler, Antwortzeiten, fehlgeschlagene Jobs und fachliche Gesundheitssignale. Das Host-Monitoring beobachtet Speicherplatz, Arbeitsspeicherdruck, CPU, Dateisystemfehler und Zertifikatsablauf. Neustartzähler helfen, doch ein fortlaufend neu startender Container verlangt Untersuchung und ist keine erfolgreiche Selbstheilung.
Logs brauchen Rotation und Aufbewahrungsregeln. Sie enthalten Korrelations-IDs, aber keine Passwörter, Tokens oder vollständigen sensiblen Anfrageinhalte. Alarme erreichen einen verantworteten Kanal. Ein kurzer Runbook-Eintrag beschreibt Diagnose und Eskalation.
Zu jedem Release gehören Migrationsplan, Health-Prüfung und Rücknahmekriterien. Datenbankänderungen unterstützen während des Übergangs die vorige und die neue Anwendungsversion. Nach dem Deployment prüfen wir einen echten Benutzerablauf und wichtige Hintergrundjobs, nicht nur die Startseite.
Magnificent Services plant Self-Hosting mit Blick auf Wiederherstellbarkeit und eindeutige Verantwortung. Docker, Coolify und Traefik funktionieren dann gut, wenn Netzwerk, Zugriff, Daten und Betrieb als ein System behandelt werden. Mehr dazu unter Leistungen und Projekte.
