4.7 KiB
4.7 KiB
Info-Board Neu - Tech Stack
Ziel
Dieses Dokument zieht die Technologieentscheidungen verbindlich zusammen, damit sie nicht nur verteilt in Plan und Todo-Liste stehen.
Leitlinien:
- moeglichst wenige Laufzeitabhaengigkeiten
- gute Portabilitaet zwischen Raspberry Pi OS und Debian
- einfache Verteilung per Ansible
- robuste Offline-Faehigkeit
- moeglichst wenig Ballast auf den Playern
Verbindliche Entscheidungen
Betriebssysteme
- Player: aktuelles Raspberry Pi OS Lite auf Debian-13-Basis
- Server: Debian-artiges System, bevorzugt mit Docker Compose betrieben
Display-Stack auf dem Player
- Version 1 basiert auf X11
- keine volle Desktop-Umgebung
- kein LXDE, kein LightDM als Pflichtbestandteil
- Chromium laeuft im Kiosk-Modus gegen eine lokale Player-Oberflaeche
Begruendung:
- X11 ist fuer Chromium-Kiosk auf Raspberry Pi aktuell konservativer und besser vorhersehbar als Wayland
- weniger Ueberraschungen bei Screenshot-Erzeugung, Display-Steuerung und Watchdog-Verhalten
Programmiersprachen
Goist die bevorzugte Sprache fuer systemnahe KomponentenGoist die Standardwahl fuer denplayer-agentGoist die bevorzugte Sprache fuer das Server-Backend, solange keine zwingenden Gruende dagegensprechen- Browser-Oberflaechen werden mit einem normalen Web-Frontend-Stack umgesetzt
Begruendung:
- statische oder weitgehend selbstgenuegsame Binaries
- geringe Laufzeitabhaengigkeiten
- gute Cross-Compile- und Deploy-Eigenschaften
- passend fuer Debian- und Raspberry-Pi-Umgebungen
Frontend-Stack
- Admin-UI: Web-Anwendung
- Tenant-/Monitor-UI: Web-Anwendung
- Player-UI: lokale Web-Anwendung fuer den Renderer
Noch offen, aber bewusst klein zu halten:
- Framework-Auswahl fuer Server-UIs, bevorzugt leichtgewichtig
- keine unnötig schwere Fullstack-Plattform nur aus Gewohnheit
Server-Betrieb
- zentrale Komponenten bevorzugt in Docker Compose
- getrennte Services fuer Backend, Datenbank, MQTT und Reverse Proxy
- persistente Daten ausserhalb fluechtiger Container-Dateisysteme
- Provisionierungsjobs laufen serverseitig ueber einen dedizierten Worker oder Jobrunner
Player-Betrieb
- keine Voll-Containerisierung des Grafikpfads in Version 1
- native systemd-Dienste fuer
player-agentund Browser-Startlogik - lokale Verzeichnisse fuer Cache, Medien, Status und Logs
Provisionierung und Deployment
- die technische Erstinstallation neuer Screens wird ueber SSH + Ansible umgesetzt
- das Admin-Backend ist die steuernde Oberflaeche, aber nicht der Ort fuer eigentliche Shell-Logik
- Root-Passwoerter dienen nur als Bootstrap-Mittel und sollen nicht dauerhaft gespeichert werden
- nach der Erstinstallation erfolgt die weitere Verwaltung schluesselbasiert
Zielkomponenten
Player
player-agentinGoplayer-uials lokale Web-Oberflaeche- Chromium als Renderer
- Xorg-Minimalstack
- systemd fuer Start, Neustart und Watchdog-Integration
Server
- Backend-API in
Go - Admin-UI als Web-Frontend
- Tenant-UI als Web-Frontend
- PostgreSQL
- MQTT-Broker, bevorzugt Mosquitto
- Reverse Proxy
- Dateispeicher fuer Uploads, Caches und Screenshots
Kommunikationsstack
- HTTPS fuer API, Upload, Download, Authentifizierung und Screenshots
- MQTT fuer Heartbeat, Status, Kommandos und Acknowledgements
Nicht vorgesehen:
- Medienuebertragung ueber MQTT
- permanente Spezial-Streams fuer den Regelbetrieb
Laufzeit-Minimum auf dem Player
Anzustreben sind nur diese grossen Bausteine:
- Raspberry Pi OS Lite
- Xorg-Minimalstack
- Chromium
- eigenes
Go-Binary fuer den Agenten - systemd
Moeglichst zu vermeiden:
- komplette Desktop-Umgebungen
- mehrere externe Viewer wie
feh,vlc,wmctrl,xdg-open - umfangreiche Python- oder Node-Laufzeitstapel direkt auf dem Player
Build- und Deployment-Richtung
Go-Binaries sollen zentral gebaut und per Ansible verteilt werden koennen- Konfiguration soll dateibasiert und gut templatisierbar sein
- Frontend-Artefakte sollen versioniert und reproduzierbar baubar sein
Architekturfolgen aus diesen Entscheidungen
- der Player bleibt moeglichst nah an einem Appliance-Modell
- Browserfehler duerfen nicht direkt die eigentliche Logik bestimmen
- Renderer und Systemlogik bleiben getrennt
- Serverlogik ist zentralisiert, Playerlogik minimal und robust
Bewusst vertagte Entscheidungen
- moeglicher spaeterer Wechsel auf Wayland
- exakte Frontend-Framework-Wahl
- genaue Auspraegung des Build-Systems fuer Frontend-Artefakte
- eventuelle Objekt-Storage-Einfuehrung statt einfachem Dateispeicher
Aktueller technischer Grundsatz
Wenn zwei Varianten funktional gleichwertig sind, wird die Variante mit weniger Laufzeitabhaengigkeiten, einfacherem Deployment und besserem Offline-Verhalten bevorzugt.