Consolieri
Обзор
Consolieri — менеджер удалённых подключений и локальных консолей для инженеров, которые работают с SSH, командными оболочками, RDP и VNC. Основное desktop-приложение распространяется с открытым исходным кодом и может работать без учётной записи, а облачный портал добавляет синхронизацию и восстановление профилей между устройствами.
Проект объединяет desktop-клиент, веб-портал и облачный API. При этом чувствительные данные не переносятся в облако в открытом виде: резервные копии шифруются на устройстве пользователя, а сервер хранит только зашифрованное содержимое.
Возможности продукта
Система включает:
- Работу с SSH, локальными оболочками, RDP и VNC в одном desktop-приложении
- Несколько вкладок и окон для параллельной работы с подключениями
- Автономный режим без обязательной регистрации
- Сквозное шифрование резервных копий профилей
- Восстановление профилей на другом устройстве по ключу синхронизации
- Управление подключёнными устройствами через веб-портал
- Управление подпиской и облачными возможностями
Облачная синхронизация отделена от основной функциональности приложения. Пользователь может работать локально, а подписка требуется только для резервного копирования и восстановления профилей через облако.
Архитектура
Облачная часть Consolieri состоит из нескольких сервисов:
- Веб-портал на Next.js
- REST API на Go
- PostgreSQL для учётных записей, устройств, подписок и метаданных резервных копий
- S3-совместимое хранилище MinIO для зашифрованных файлов
- Keycloak для аутентификации
- Отдельный сервис обработки платежей через Paddle, Stripe и другие платежные шлюзы.
- Mailoo как headless CMS для блога и форм
Веб-портал использует сессии браузера, а desktop-клиент проходит отдельный OAuth-процесс с PKCE и получает короткоживущие API-токены. Такое разделение не смешивает браузерную аутентификацию с моделью доступа публичного desktop-клиента.
Инфраструктура и SRE
Для проекта настроены:
- GitLab CI для проверок, тестов и сборки
- Сборка контейнеров через Kaniko
- Отдельные образы для веб-приложения, API, платёжного сервиса, мигратора и темы Keycloak
- GitOps-деплой через ArgoCD
- Запуск миграций отдельной задачей до обновления API
- Health- и readiness-проверки веб-приложения и API
- Управление секретами для Keycloak, Paddle, Mailoo, MinIO и внутренних сервисов
- Автоматическая очистка старых образов и ограничение роста кеша registry
API не выполняет миграции при старте. Для них собирается отдельный образ, который запускается как PreSync-задача ArgoCD до развёртывания новой версии приложения. Это отделяет изменение схемы данных от жизненного цикла основного сервиса.
Инженерные задачи
Ключевые задачи проекта связаны не только с интерфейсом менеджера подключений, но и с границами доверия между desktop-приложением и облаком:
- Разделение браузерной и desktop-аутентификации
- OAuth для публичного desktop-клиента без встроенного секрета
- Шифрование резервных копий до отправки на сервер
- Клиентское шифрование резервных копий: сервер хранит только зашифрованные данные и не получает ключ расшифровки
- Ротация refresh-токенов и обнаружение их повторного использования
- Согласованное обновление схемы базы данных и API
- Контроль размера кеша сборок и дискового пространства container registry
В результате облачные функции дополняют desktop-приложение, не превращая сервер в хранилище открытых секретов подключений.