Перейти к содержанию

Технологический стек

Все платформы экосистемы работают на одном стеке. Это не случайность: разработчику, переходящему из одного репозитория в другой, нечего учить заново, а исправление по безопасности можно раскатить на все системы в одном и том же виде.

Чем отличается Gerege Nexus

Gerege Nexus работает на том же стеке (Go · chi · pgx · без ORM · Next.js App Router), но отличается тремя вещами: это модульный монолит (модули компилируются в один бинарник и раздаются по арендаторам через магазин приложений), миграции выполняются через goose, а опирается он только на PostgreSQL, без Redis. Версии: Go 1.25 · Next.js 15.

Бэкенд

Компонент Выбор
Язык Go 1.26
HTTP net/http из стандартной библиотеки + роутер go-chi/chi
База данных PostgreSQLjackc/pgx (pgxpool), SQL пишется вручную
Кэш / сессии Redis
Архитектура Clean Architecture — handler → usecase → repository → domain

Почему нет ORM?

Слой данных написан вручную на SQL поверх pgx. Причины: использовать напрямую те возможности, что заложены глубоко в самой СУБД — Row-Level Security (RLS), CTE, LISTEN/NOTIFY, JSONB — а не через абстракцию ORM; и не гадать, какой запрос в итоге будет сгенерирован.

Жёсткое правило Clean Architecture: обратных импортов нет. Бизнес-ядро (domain, usecase) никогда не импортирует веб-фреймворк. Именно это гарантирует, что HTTP-слой можно заменить, не трогая бизнес-логику.

Фронтенд

Компонент Выбор
Фреймворк Next.js 15/16, App Router
Шаблон BFF (Backend-for-Frontend)
Слой данных TanStack Query

Что здесь значит BFF: браузер никогда не обращается к бэкенду напрямую. Он говорит только с маршрутами Next.js на том же домене, а те уже проксируют запросы к бэкенду со стороны сервера.

Результат: токен никогда не попадает в клиентский JavaScript — используется cookie-сессия, и XSS перестаёт быть вектором кражи токена. Сверху добавлена двойная защита от CSRF: специальный заголовок плюс проверка origin.

Мобильные и десктопные платформы

Платформа Технология
iOS Swift, SPM SDK (GeregeSmartID) + приложение под каждый бренд
Android SDK на Kotlin / Jetpack Compose
macOS RP-клиент на SwiftUI + комплект для USB-токена
Windows MSIX (подписанный)
Web RP TypeScript SDK

Конвейер ИИ

Построен на Gemini, как REST-клиент без SDK плюс function calling:

  • текстовый и голосовой чат,
  • STT (речь → текст) и TTS (текст → речь),
  • перевод на лету,
  • база знаний на pgvector, проиндексированная по коду и документации,
  • ответы на языке пользователя; чат-виджет, не требующий входа.

Слоистый system prompt: базовые правила (guardrail), жёстко заданные в коде, плюс область и инструкции, которые администратор настраивает через базу данных. Так помощник остаётся в заданных границах. Инструмент search_knowledge заземляет ответ на реальные данные базы знаний и не даёт выдумывать.

Криптография

Код подписи портирован из оригинала на Java/Spring, поэтому обязан оставаться полностью совместимым на уровне протокола. Это зафиксировано замороженными golden vectors:

  • сериализация сжатой точки EC по SEC1,
  • семантика BigInteger.toByteArray() из Java (поведение знакового байта).

Go-сервер, iOS SDK и Android SDK должны давать побайтово одинаковый результат.

Не удаляйте golden vector

Файлы golden.json невозможно сгенерировать заново. Это единственное доказательство совместимости с исходной системой. Любое изменение криптографического кода обязано проверяться этими тестами.

Инфраструктура

Компонент Выбор
Контейнеры Docker Compose
CI/CD GitHub Actions (с self-hosted раннерами Windows/macOS)
Edge nginx — терминация TLS, rate limit, обратный прокси
Сертификаты Let's Encrypt (certbot, webroot)
Документация MkDocs Material + mkdocs-static-i18n, многоязычная

Подробности — на страницах Развёртывание и CI/CD.

Наблюдаемость

  • OpenTelemetry — распределённая трассировка,
  • Prometheus — метрики (/metrics),
  • Zap — структурированные логи,
  • Журнал аудита — связанный хеш-цепочкой, только на добавление; читают только администраторы, целостность можно проверить.

Закрыто в production

/metrics и /swagger в production закрыты bearer-токеном. Они раскрывают внутреннее устройство, поэтому оставлять их открытыми — риск утечки информации.

Тестирование

  • Модульные тесты — на слое бизнес-логики,
  • интеграционные тесты на testcontainers — с настоящими PostgreSQL/Redis,
  • тесты golden vector — на криптографическую совместимость.