Portfolio

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-приложение, не превращая сервер в хранилище открытых секретов подключений.