Перейти к содержимому
Вы читаете документацию версии 0.7. Актуальная — 0.8. Перейти →

Требования к серверу для Zentro

Для того, кто выбирает сервер под Zentro: заказчик, интегратор, администратор. Здесь — сколько ресурсов нужно, что ставить на сервер и когда расти. Как ставить — Установка панели и кабинета (панель, кабинет, BFF) и комплект Identity (Установка сервера). Какие настройки выбрать — Выбор настроек.

Сервисы проверяют токены у себя — по ключам Zentro (JWKS), а не спрашивают Zentro о каждом токене (интроспекция), и хеш секретов приложений — sha256 (по умолчанию). Цифры ниже верны при этих условиях.

Почему это важно — раздел «Почему JWKS, а не интроспекция» в конце. Коротко: при проверке по JWKS нагрузка на Zentro зависит от числа входов, а при интроспекции — от числа запросов ко всем вашим сервисам. С argon2id для секретов приложений каждый такой запрос становится дорогим, и сервер нужен в разы больше.

Профиль Сервер Схема
Личный / пилот: до 10 человек, десятки сервисов 2 vCPU · 4 ГБ RAM · 40–60 ГБ SSD один сервер
Малая организация: до 200 сотрудников, до 10 000 внешних пользователей (покупатели, клиенты), сервисы до 20 rps 4 vCPU · 8 ГБ RAM · 100 ГБ SSD/NVMe (минимум 2 · 4 · 50) один сервер
Средняя: до 1000 сотрудников, сотни сервисов приложения 4 vCPU · 8 ГБ · 50 ГБ + база 4 vCPU · 8 ГБ · 200 ГБ NVMe два сервера
Вход критичен для бизнеса: без Zentro не работает ничего 2+ сервера приложений, Redis, PostgreSQL с репликой, кластер Vault отказоустойчивая

К любому профилю — место для бэкапов вне сервера (другая площадка или хранилище).

Число администраторов на размер не влияет: это те же пользователи, только с ролями. Число зарегистрированных приложений (OAuth-клиентов) и API (ресурсов) — тоже: тысячи записей в базе для Zentro не нагрузка.

200 сотрудников, интернет-магазин с 10 000 покупателей, сервисы магазина — до 20 запросов в секунду.

Что Сколько доходит до Zentro
Сотрудники утром входят в 3–5 приложений меньше 1 входа в секунду
Покупатели на распродаже 1–2 входа в секунду
Приложения обновляют токены (раз в ~15 минут на активного пользователя) единицы в секунду
20 rps к сервисам магазина 0 — токены проверяются в самих сервисах

Итого — меньше 5 запросов в секунду. 2 vCPU хватит; 4 vCPU — запас на распродажи и рост.

Компонент Память Заметки
Identity (сервер + фоновые задачи) 0.3–2 ГБ всплески при входах: проверка пароля — около 64 МБ и 0.1 с процессора
PostgreSQL 16 1–2 ГБ всё состояние Zentro
Vault ~256 МБ ключи подписи и шифрования персональных данных
Панель, кабинет, два прокси (BFF) ~0.5 ГБ данных не хранят
nginx ~50 МБ TLS, наружу

Не нужен для одного сервера Redis — он нужен с двух серверов приложений.

Личный стенд или пилот можно запустить без Vault: ключи на диске сервера (SECRETS_BACKEND=local, ALLOW_LOCAL_SECRETS=true). Это осознанный компромисс — для заказчика с персональными данными клиентов ставьте Vault.

  • ОС: Ubuntu 24.04 LTS или Debian 12. Docker 24+, Docker Compose v2.
  • Точное время (chrony / NTP) — обязательно: от него зависят коды TOTP и сроки токенов. Расхождение в минуту — и второй фактор перестаёт приниматься.
  • TLS: nginx + Let’s Encrypt (или сертификат организации). Без настоящего HTTPS не работают ключи (passkey) и защищённые cookie.
  • Почта: внешний SMTP-провайдер. Нужна для подтверждения почты и сброса пароля; письма «с сервера» без настроенного домена уходят в спам.
  • Доступ к серверу: SSH только по ключу, межсетевой экран — наружу открыт только 443.
Адрес Кому виден
id.example.com — Identity всем, кто входит (браузеры) и всем сервисам
account.example.com — личный кабинет всем, кто входит
admin.example.com — панель администратора только внутренняя сеть или VPN

Трафик небольшой — хватает 100 Мбит.

Рост даёт в основном журнал аудита: порядка 15–20 ГБ в год для малой организации. Сколько хранить — настройка удержания аудита (Настройки установки). Следите за заполнением диска.

Бэкап — ежедневно и на другую площадку:

Что Зачем
Дамп PostgreSQL (pg_dump) всё состояние. Копировать папку базы «на ходу» нельзя — получите битую копию
Vault (снимок) или /data Identity (без Vault) ключи. Без них персональные данные в базе не расшифровать, бэкап базы бесполезен
.env и файлы секретов без них не поднять сервисы с теми же ключами сессий

Проверяйте восстановление хотя бы раз — на отдельной машине.

Сигнал Что сделать
Процессор Identity в пиках > 70% добавить vCPU; проверить, не ходит ли сервис в интроспекцию на каждый запрос и не стоит ли argon2id для секретов приложений
База занимает больше половины памяти сервера или диск > 70% вынести PostgreSQL на отдельный сервер
Простой Zentro недопустим даже на время обновления второй сервер приложений + Redis, реплика базы
Аудит быстро растёт уменьшить удержание или выборочный аудит (Настройки установки)

Сервис может узнать, годен ли токен, двумя способами.

По ключам (JWKS). Токен подписан Zentro. Сервис один раз скачивает открытые ключи Zentro (jwks_uri из Discovery) и дальше проверяет подпись и срок сам, за микросекунды, не обращаясь к Zentro. Сколько бы запросов ни было у сервиса — Zentro их не видит.

Интроспекция. Сервис на каждый запрос спрашивает Zentro: «этот токен ещё жив?» (introspection_endpoint). Каждый такой вопрос — это запрос по сети к Zentro, проверка секрета сервиса и проверка токена в базе. Нагрузка на Zentro становится равна сумме запросов ко всем сервисам, которые так делают.

Сколько это стоит, зависит от хеша секретов приложений (Выбор настроек, «Хеш секретов приложений»):

Интроспекция sha256 (по умолчанию) argon2id
20 запросов в секунду незаметно — профили выше справятся ~2 ядра целиком, всплески памяти до 1.3 ГБ
100 запросов в секунду заметная нагрузка на базу; профиль «Малая» ещё держит ~10 ядер
500 запросов в секунду считать отдельно: база, второй сервер приложений ~50 ядер — отдельный кластер

argon2id — проверка секрета стоит около 0.1 с процессора и 64 МБ памяти, как проверка пароля человека. Если регламент его требует — оставьте sha256 хотя бы у сервисов, которые зовут интроспекцию или часто берут машинные токены.

И при любом хеше:

  • сетевой запрос к Zentro в каждом запросе сервиса (с argon2id — ещё и +0.1 с, пользователь это заметит);
  • Zentro становится обязательным для каждого запроса: упал Zentro — встали все API, а не только новые входы.

Цена JWKS — отозванный токен действует до конца своего срока (до 15 минут): сервис не знает, что его отозвали. Поэтому правило:

  • обычные запросы — проверка по JWKS;
  • чувствительные операции (платёж, смена прав, выгрузка данных) — интроспекция или повторный вход (max_age), но только для них.

Как это делает команда сервиса — Подключение приложения, «Что делает команда приложения».