Landtag: eine vernachlässigte Video-Plattform zurück ins Leben holen
Wie wir die Video-Plattform eines Landtags in Deutschland reaktiviert haben: Dependencies, Refactor, Kubernetes, CI/CD und Observability.
Die Ausgangslage
Ein Landtag betrieb eine Video-Plattform, die Plenarsitzungen live streamte, jede Sitzung aufzeichnete, in die tatsächlich genutzten Formate transcodierte und über eine API für die öffentliche Seite und interne Integrationen bereitstellte. Die Plattform funktionierte, gerade so. Die Agentur, die sie gebaut hatte, hatte sie still und leise verkommen lassen. Dependencies waren mehrere Major-Versionen veraltet. Automatisierte Tests gab es nicht. Statische Analyse fehlte. Deployments waren ein manueller Abend mit zwei Engineers. Jedes Release war ein abgestimmter Vorgang, und Releases blieben selten, weil jedes Release ein Risiko war.
Die Plattform wurde im schlechtmöglichsten Moment immer schwerer zu ändern, während der parlamentarische Kalender Jahr für Jahr mehr Sitzungen durch sie schickte. Das Team hatte das System geerbt, ohne das Wissen darüber. Etwas Neues hinzuzufügen, war eine mehrtägige Ausgrabung. Und niemand hatte einen klaren Blick darauf, was die Plattform unter Last tatsächlich tat. Health-Checks bedeuteten, im Nachhinein Logs zu lesen.
Was wir gemacht haben
Wir haben dort angefangen, wo es am stärksten geblutet hat: beim Dependency-Baum. Bibliotheken, die Ingest, Transcoding, API und Management-UI trugen, hatten Security-Patches, Performance-Fixes und Breaking Changes erhalten, die niemand mitverfolgt hatte. Wir haben alles in disziplinierten Schritten auf den aktuellen Stand gebracht, mit Charakterisierungs-Tests als Sicherheitsnetz, sodass die Plattform laufen konnte, während wir den Boden unter ihr austauschten. Für Schema-Änderungen im Speziellen haben wir die Muster für Zero-Downtime-Doctrine-Migrationen separat aufgeschrieben.
Das Refactoring hat den Stack in Etappen durchgearbeitet. Die redaktionellen Flows im Management-UI wurden klarer. Die öffentliche API bekam einen einzigen Vertrag statt eines halben Dutzends gewachsener. Die Recording-Pipeline bekam ordentliche Retries und strukturiertes Logging, damit ein Fehler während einer Plenarsitzung etwas ist, das das System meldet, nicht etwas, das wir Tage später entdecken. Die Transcoding-Worker bekamen eine saubere Queue mit Backoff und Concurrency-Limits, sodass ein voller Tag nicht mehr automatisch ein hängender Tag ist.
Sobald die Anwendung sauber genug war, um sie ehrlich zu containerisieren, haben wir jeden Baustein paketiert und auf einem Kubernetes-Cluster ausgerollt. Ingest, Transcoding-Worker, API und Management-UI deployen, starten und recovern jeweils zu ihren eigenen Bedingungen. Storage haben wir von lokalen Platten auf Object Storage mit sauberen Lifecycle-Regeln verlagert, sodass Archivierung eine Konfigurationssache ist und kein Projekt.
Eine CI/CD-Pipeline hält das Ganze zusammen. Jeder Change läuft durch PHPStan strict, Rector, php-cs-fixer, die Test-Suite und einen automatischen Staging-Deploy. Ein Fix kann in Minuten ausgeliefert, durch die Pipeline beobachtet und ohne Drama zurückgerollt werden, falls er beißt. Der tägliche Aufwand, die Plattform gesund zu halten, ist deutlich gesunken, einfach weil so vieles nicht mehr von Hand passiert.
Dazu haben wir Grafana-Dashboards aufgebaut, die Ingest-Gesundheit, Transcoding-Queue-Tiefe, API-Latenz, Recording-Erfolgsrate und Plattform-Ressourcen abdecken. Das Team sieht das System jetzt in Echtzeit, mit Alerts auf das, was tatsächlich zählt, sodass Probleme erkannt werden, bevor sie bei Nutzerinnen und Nutzern auffallen.
Was sich verändert hat
Die Plattform, die am Verkommen war, ist heute ein System, das sich getrost ändern lässt. Dependencies sind aktuell, die Test-Suite fängt Regressionen ab, bevor sie produktiv werden, und ein Release ist ein Knopfdruck, kein Ereignis. Video-Management-System, API, Aufzeichnung und Transcoding sitzen auf demselben modernen, containerisierten Fundament, mit automatisierten Qualitäts-Gates auf jedem Commit und Grafana-Dashboards, die in Echtzeit zeigen, wie sich die Plattform wirklich verhält.
Der Landtag betreibt seine Plattform weiterhin selbst. Der Unterschied: er betreibt eine, die zurück ins Leben geholt wurde und ehrlich über ihre eigene Gesundheit Auskunft gibt.