Consolieri
Überblick
Consolieri ist ein Manager für Remote-Verbindungen und lokale Konsolen für Fachleute, die mit SSH, Kommandozeilen-Shells, RDP und VNC arbeiten. Die zentrale Desktop-Anwendung ist quelloffen und kann ohne Benutzerkonto verwendet werden. Das Cloud-Portal ergänzt die Synchronisierung und Wiederherstellung von Profilen auf mehreren Geräten.
Das Projekt verbindet einen Desktop-Client, ein Webportal und eine Cloud-API. Vertrauliche Daten werden dabei nie im Klartext in die Cloud übertragen: Backups werden auf dem Gerät des Nutzers verschlüsselt, der Server speichert ausschließlich verschlüsselte Inhalte.
Produktfunktionen
Das System bietet:
- SSH, lokale Shells, RDP und VNC in einer Desktop-Anwendung
- Mehrere Tabs und Fenster für die parallele Arbeit mit verschiedenen Verbindungen
- Offline-Nutzung ohne verpflichtende Registrierung
- Ende-zu-Ende-Verschlüsselung von Profil-Backups
- Wiederherstellung von Profilen auf einem anderen Gerät mithilfe eines Synchronisierungsschlüssels
- Verwaltung verbundener Geräte über das Webportal
- Verwaltung von Abonnement und Cloud-Funktionen
Die Cloud-Synchronisierung ist von den Kernfunktionen der Anwendung getrennt. Die lokale Nutzung ist ohne Abonnement möglich; dieses wird nur für Backup und Wiederherstellung von Profilen über die Cloud benötigt.
Architektur
Die Cloud-Plattform von Consolieri besteht aus mehreren Diensten:
- Einem Webportal auf Basis von Next.js
- Einer REST-API in Go
- PostgreSQL für Konten, Geräte, Abonnements und Backup-Metadaten
- S3-kompatiblem MinIO-Speicher für verschlüsselte Dateien
- Keycloak für die Authentifizierung
- Einem separaten Zahlungsdienst für Paddle, Stripe und weitere Zahlungsanbieter
- Mailoo als Headless-CMS für Blog und Formulare
Das Webportal arbeitet mit Browser-Sitzungen. Der Desktop-Client verwendet dagegen einen eigenen OAuth-Ablauf mit PKCE und erhält kurzlebige API-Tokens. Dadurch bleibt die Browser-Authentifizierung klar vom Zugriffsmodell eines öffentlichen Desktop-Clients getrennt.
Infrastruktur & SRE
Für das Projekt wurden eingerichtet:
- GitLab CI für Prüfungen, Tests und Builds
- Container-Builds mit Kaniko
- Separate Images für Webanwendung, API, Zahlungsdienst, Migrator und Keycloak-Theme
- GitOps-Deployment über ArgoCD
- Migrationen als separate Aufgabe vor dem API-Update
- Health- und Readiness-Prüfungen für Webanwendung und API
- Secret-Management für Keycloak, Paddle, Mailoo, MinIO und interne Dienste
- Automatische Bereinigung alter Images und Begrenzung des Registry-Cache-Wachstums
Die API führt beim Start keine Migrationen aus. Dafür wird ein eigenes Image erstellt, das vor dem Deployment der neuen Anwendungsversion als ArgoCD-PreSync-Job läuft. So sind Änderungen am Datenbankschema vom Lebenszyklus des Hauptdienstes getrennt.
Technische Herausforderungen
Die zentralen technischen Aufgaben betreffen neben der Oberfläche des Verbindungsmanagers vor allem die Vertrauensgrenzen zwischen Desktop-Anwendung und Cloud:
- Trennung von Browser- und Desktop-Authentifizierung
- OAuth für einen öffentlichen Desktop-Client ohne eingebettetes Secret
- Verschlüsselung der Backups vor der Übertragung an den Server
- Clientseitige Backup-Verschlüsselung: Der Server speichert ausschließlich verschlüsselte Daten und erhält keinen Entschlüsselungsschlüssel
- Rotation von Refresh-Tokens und Erkennung ihrer erneuten Verwendung
- Koordination von Datenbankschema- und API-Updates
- Kontrolle der Build-Cache-Größe und des Speicherverbrauchs der Container-Registry
Die Cloud-Funktionen ergänzen damit die Desktop-Anwendung, ohne den Server zu einem Speicher für unverschlüsselte Zugangsdaten zu machen.