Raus aus dem Yunohost-Käfig
Yunohost ist ein großartiges Werkzeug für schnelles Self-Hosting. Es verwaltet Domains, SSL-Zertifikate und Reverse-Proxy-Einträge zentral – praktisch, solange man keine besonderen Anforderungen hat. Wer aber Docker-Compose-Anwendungen wie Ghost Publishing betreibt, stößt schnell an die Grenzen dieser zentralen Verwaltung. Yunohost möchte die Domain kennen, steuern und überwachen. Für eine eigenständige Container-Anwendung ist das mehr Fessel als Hilfe.
Das Problem: Yunohost und Docker passen nicht gut zusammen
Yunohosts Domain-Verwaltung geht davon aus, dass Anwendungen über seinen eigenen Nginx-Layer laufen und von ihm konfiguriert werden. Eine Ghost-Instanz in Docker Compose hat aber ihren eigenen Lebenszyklus, eigene Netzwerke und eigene Port-Bindungen. Die Zertifikatsverlängerung, die Header-Weiterleitung und das Routing liefen damit durch eine Abstraktionsschicht, die nie wirklich für diesen Anwendungsfall gedacht war.
Das Ergebnis: instabile Erreichbarkeit, sporadische Zertifikatsfehler und – entscheidend für ein Fediverse-Blog – eine fehlerhafte Weiterleitung der ActivityPub-Requests. Mastodon und andere Fediverse-Instanzen konnten blog.bayerwald.social zwar auflösen, aber Webfinger-Anfragen und ActivityPub-Header kamen nicht korrekt an. Die Artikel föderiert sich nicht mehr sauber.
Die Lösung: Nginx direkt, Yunohost außen vor
Der Ausweg war konzeptuell einfach: Nginx vollständig aus Yunohosts Domainverwaltung herauslösen und als eigenständigen Dienst betreiben – parallel zu Yunohost, aber unabhängig davon. Die Domain blog.bayerwald.social wird nicht mehr über Yunohost konfiguriert, sondern über eine eigene Nginx-Konfiguration, die direkt auf den Ghost-Container zeigt.
Für die Zertifikate kommt Let's Encrypt per DNS-Challenge zum Einsatz. Das ist der zweite entscheidende Schritt: Statt einer HTTP-Challenge, die Yunohost koordinieren müsste, wird der Besitznachweis über einen TXT-Record beim DNS-Provider geführt. Certbot läuft vollständig außerhalb von Yunohosts Kontrollbereich. Zertifikate werden verlängert, ohne dass der Webserver in einem bestimmten Zustand sein muss – zuverlässig, unabhängig, vorhersehbar.
ActivityPub und Ghost: Stabilität durch Kontrolle
Ein Nebenpunkt, der sich als wesentlich herausstellte: Zuvor lief der Reverse Proxy über Caddy. Mit dem Wechsel zu nativem Nginx ist die Proxy-Schicht zwischen dem Internet und dem Ghost-Container schlanker und vollständig unter eigener Kontrolle. Ghost benötigt für ActivityPub einen sauber durchgeleiteten Host-Header und einen erreichbaren /.well-known/webfinger-Endpoint – beides lässt sich in Nginx direkt und transparent konfigurieren.
Seit der Umstellung föderiert blog.bayerwald.social wieder wie erwartet: Neue Artikel erscheinen in Mastodon-Feeds, Follows aus dem Fediverse funktionieren, und andere Instanzen können das Blog-Profil korrekt auflösen.
Fazit
Wer Docker-Compose-Anwendungen auf einem Yunohost-Server betreibt, muss Yunohosts Domain-Verwaltung nicht zwingend nutzen. Für Anwendungen mit spezifischen Anforderungen – wie Ghost mit ActivityPub – ist ein eigenständiger Nginx außerhalb des Yunohost-Käfigs die stabilere Wahl. Die DNS-Challenge für Let's Encrypt macht den letzten verbleibenden Abhängigkeitspunkt los. Was bleibt, ist ein System, das man vollständig versteht und vollständig kontrolliert.
bayerwald.social · März 2026