Portfolio

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.