Appearance
Требования к оборудованию
Минимум для одного сервера
Для пилота, демо или небольшой команды весь стенд (все контейнеры) работает на одном сервере:
| Ресурс | Минимум | Комфортно |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB | 8–16 GB |
| Диск | 20 GB SSD | 100+ GB SSD (БД растёт вместе с данными и бэкапами) |
| ПО | Docker 24+, Docker Compose 2.20+ | — |
Такой конфигурации достаточно для десятков активных пользователей без требований к отказоустойчивости. Всё, что ниже — про промышленные инсталляции с HA.
Промышленные конфигурации (HA)
Вариант 1 — до 50 одновременных пользователей
Топология: 2 App-узла (active/active) + 1 DB-узел, перед ними балансировщик (HAProxy/Keepalived с VIP или железный LB).
App-узлы ×2 (Traefik, backend, queue-воркеры ×3–4, scheduler, Reverb, frontend):
| Компонент | Минимум | Рекомендация |
|---|---|---|
| CPU | 4 ядра @ 2.5 GHz | 8 ядер |
| RAM | 16 GB ECC | 32 GB ECC |
| Диск | 120 GB SSD | 256 GB NVMe |
| Сеть | 1 Гбит/с | 2 × 1 Гбит/с (bonding) |
DB-узел (PostgreSQL 16, Redis 7, Meilisearch, SeaweedFS):
| Компонент | Минимум | Рекомендация |
|---|---|---|
| CPU | 4 ядра | 8 ядер |
| RAM | 16 GB ECC | 32 GB ECC |
| Диск для данных | 500 GB SSD | 1 TB NVMe (RAID 1) |
| Диск для файлов | 1 TB HDD | 2 TB HDD (RAID 1) |
HA БД: PostgreSQL Streaming Replication (ручной failover) или Patroni; Redis — Sentinel на 3 узла (третий Sentinel на одном из App-узлов).
Сравнение вариантов
| Параметр | Вариант 1 (≤50) | Вариант 2 (50–200) | Вариант 3 (200–1000) |
|---|---|---|---|
| Серверов | 3 | 6 (+2 LB) | 19+ |
| CPU итого | 24 ядра | 72 ядра | 200+ ядер |
| RAM итого | ~80 GB | ~352 GB | ~1.5 TB |
| SSD (данные) | 1 TB | 2 TB | 6 TB |
| HDD (файлы) | 2 TB | 10 TB | 40 TB+ |
| HA PostgreSQL | Streaming Replication | Streaming + Patroni | Patroni-кластер (3 узла) |
| HA Redis | Sentinel | Sentinel | Redis Cluster (6 узлов) |
| HA App | Active/Active ×2 | Active/Active ×3 | K8s / Swarm, 4+ узлов |
Детальные спецификации вариантов 2 и 3 (Patroni-кластер, Redis Cluster, Ceph/MinIO) — во внутреннем отчёте internal-docs/onprem-hardware-requirements.md репозитория.
Почему именно эти ресурсы
- RAM — главный ресурс. PostgreSQL кэширует рабочий набор (
shared_buffers≈ 25 % RAM узла); Meilisearch держит индексы в памяти (~2–5 GB на 1 млн документов); Redis хранит сессии, очереди и PubSub Reverb целиком в памяти; каждый Apache/PHP-воркер — 80–120 MB. - SSD обязателен для БД и поиска — латентность диска напрямую конвертируется в латентность API.
- Файлы (SeaweedFS) можно держать на HDD — вложения читаются линейно и редко.
- Queue-воркеры влияют на отзывчивость UI: уведомления и индексация поиска выполняются асинхронно; если воркеров мало, «мгновенные» события начинают запаздывать.
- Отдельный воркер отчётов (
queue-reports) нужен потому, что экспорт XLSX/PDF — долгие и прожорливые по памяти задачи (до 512 MB на джоб): без выделенного воркера они блокировали бы уведомления. См. Очереди и планировщик.
Сетевые порты
Наружу стенд открывает только 80 (редирект на https) и 443 — всё остальное живёт во внутренних Docker-сетях. Для исходящих соединений нужны:
| Направление | Зачем |
|---|---|
| SMTP-релей (587/465) | Исходящая почта |
| IMAP-сервер (993) | Приём входящих писем |
| api.telegram.org (443) | Telegram-бот (если используется) |
| Let's Encrypt (443) | Выпуск/продление TLS-сертификатов |
| LDAP/AD (389/636) | Вход по корпоративному каталогу (если используется) |