Consolieri
Descripción general
Consolieri es un gestor de conexiones remotas y consolas locales para profesionales que trabajan con SSH, shells de línea de comandos, RDP y VNC. La aplicación de escritorio principal es de código abierto y funciona sin una cuenta, mientras que el portal en la nube añade sincronización y recuperación de perfiles entre dispositivos.
El proyecto combina un cliente de escritorio, un portal web y una API en la nube. Los datos sensibles nunca se transfieren a la nube en texto sin cifrar: las copias de seguridad se cifran en el dispositivo del usuario y el servidor almacena únicamente contenido cifrado.
Funciones del producto
El sistema incluye:
- SSH, shells locales, RDP y VNC en una sola aplicación de escritorio
- Varias pestañas y ventanas para trabajar con distintas conexiones en paralelo
- Uso sin conexión y sin registro obligatorio
- Cifrado de extremo a extremo para las copias de seguridad de perfiles
- Recuperación de perfiles en otro dispositivo mediante una clave de sincronización
- Gestión de dispositivos conectados desde el portal web
- Gestión de la suscripción y las funciones en la nube
La sincronización en la nube está separada de las funciones principales de la aplicación. El usuario puede trabajar localmente y solo necesita una suscripción para guardar y restaurar perfiles mediante la nube.
Arquitectura
La plataforma en la nube de Consolieri consta de varios servicios:
- Un portal web con Next.js
- Una API REST en Go
- PostgreSQL para cuentas, dispositivos, suscripciones y metadatos de las copias de seguridad
- Almacenamiento MinIO compatible con S3 para archivos cifrados
- Keycloak para la autenticación
- Un servicio de pagos independiente compatible con Paddle, Stripe y otras pasarelas
- Mailoo como CMS headless para el blog y los formularios
El portal web utiliza sesiones de navegador, mientras que el cliente de escritorio sigue un flujo OAuth independiente con PKCE y recibe tokens de API de corta duración. Esta separación mantiene la autenticación del navegador al margen del modelo de acceso de un cliente de escritorio público.
Infraestructura y SRE
El proyecto cuenta con:
- GitLab CI para comprobaciones, pruebas y compilaciones
- Construcción de contenedores con Kaniko
- Imágenes separadas para la aplicación web, la API, el servicio de pagos, el migrador y el tema de Keycloak
- Despliegue GitOps mediante ArgoCD
- Migraciones ejecutadas como una tarea independiente antes de actualizar la API
- Comprobaciones de salud y disponibilidad para la aplicación web y la API
- Gestión de secretos para Keycloak, Paddle, Mailoo, MinIO y los servicios internos
- Limpieza automática de imágenes antiguas y control del crecimiento de la caché del registro
La API no ejecuta migraciones al iniciarse. Para ello se construye una imagen específica que se lanza como tarea PreSync de ArgoCD antes de desplegar la nueva versión de la aplicación. De este modo, los cambios del esquema de datos quedan separados del ciclo de vida del servicio principal.
Retos de ingeniería
Los principales retos del proyecto no se limitan a la interfaz del gestor de conexiones, sino que también abarcan los límites de confianza entre la aplicación de escritorio y la nube:
- Separar la autenticación del navegador y la del cliente de escritorio
- Implementar OAuth para un cliente de escritorio público sin un secreto integrado
- Cifrar las copias de seguridad antes de enviarlas al servidor
- Cifrado de las copias en el cliente: el servidor solo almacena datos cifrados y nunca recibe la clave de descifrado
- Rotar los refresh tokens y detectar su reutilización
- Coordinar las actualizaciones del esquema de la base de datos y de la API
- Controlar el tamaño de la caché de compilación y el uso de disco del registro de contenedores
Así, las funciones en la nube complementan la aplicación de escritorio sin convertir el servidor en un almacén de secretos de conexión en texto sin cifrar.