Технологический стек¶
Все платформы экосистемы работают на одном стеке. Это не случайность: разработчику, переходящему из одного репозитория в другой, нечего учить заново, а исправление по безопасности можно раскатить на все системы в одном и том же виде.
Чем отличается 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 |
| База данных | PostgreSQL — jackc/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 — на криптографическую совместимость.