diff --git a/docs/stack.md b/docs/stack.md index cd07762..e38a05e 100644 --- a/docs/stack.md +++ b/docs/stack.md @@ -1,7 +1,7 @@ # Стек технологий и архитектура развёртывания **Проект:** АС «Платформа ОПОРА РОССИИ» -**Статус:** согласовано ядро стека, уточняются параметры сервера +**Статус:** согласовано **Дата:** 26.09.2026 --- @@ -26,12 +26,12 @@ | Frontend | **React + TypeScript + Vite** | Mobile-first SPA | | UI | **Tailwind CSS + shadcn/ui** | Гибкость под брендбук «ОПОРА РОССИИ» | | Файлы (артефакты) | **MinIO** (S3-совместимое, локально) | Файлы до 50 МБ, привязка к объектам | -| Контейнеризация | **Docker Engine + Docker Compose** | Старт; задел под Kubernetes при росте | -| Reverse proxy / TLS | **Nginx + Certbot** | HTTPS, статика фронтенда | +| Контейнеризация | **Docker Engine + Docker Compose** | Один сервер; задел под Kubernetes при росте | +| Reverse proxy / TLS | **Nginx + Certbot (Let's Encrypt)** | HTTPS, статика фронтенда | | Мониторинг | **Prometheus + Grafana + Loki** | Метрики, логи, алерты | -| Бэкапы | **pgBackRest** (БД) + rsync/rclone (файлы) | Ежесуточно, хранение ≥ 30 дней | +| Бэкапы | **pgBackRest** (БД) + **rclone** (файлы, offsite) | Ежесуточно, хранение ≥ 30 дней | | CI/CD | **GitLab CI** | Сборка образов, деплой на сервер | -| AI-ассистент «Зам» | **TBD** — self-hosted LLM (Ollama/vLLM) при наличии GPU, иначе YandexGPT/GigaChat API | Зависит от наличия GPU и требований 152-ФЗ | +| AI-ассистент «Зам» | **Внешний LLM API: OpenRouter / PiAPI** | Без GPU; только обезличенный контекст (см. раздел 6) | --- @@ -41,7 +41,7 @@ Internet │ ┌─────▼─────┐ - │ Nginx │ TLS, статика, reverse proxy + │ Nginx │ TLS (Let's Encrypt), статика, reverse proxy └─────┬─────┘ ┌────────────┼──────────────┐ │ │ │ @@ -63,7 +63,8 @@ └────────────────────┘ Мониторинг: Prometheus + Grafana + Loki - Бэкапы: pgBackRest → внешний диск/NAS + offsite + Бэкапы: pgBackRest → внешний диск + offsite (rclone) + AI: внешний LLM API (OpenRouter / PiAPI) — только обезличенные данные ``` ### Состав контейнеров (Docker Compose) @@ -84,26 +85,31 @@ --- -## 4. Требования к серверу (уточняются) +## 4. Параметры сервера -| Параметр | Значение | Статус | -|---|---|---| -| ОС | Ubuntu Server 24.04 LTS (или Astra Linux / RED OS при требовании реестра) | TBD | -| CPU | ≥ 8 ядер (Вариант 1) | TBD | -| RAM | ≥ 16 ГБ (Вариант 1) | TBD | -| Диск | SSD ≥ 500 ГБ + отдельный диск под бэкапы | TBD | -| GPU | для self-hosted LLM (опционально) | TBD | -| Сеть | статический IP, домен, открытые 80/443 | TBD | -| Бэкап-хранилище | внешний диск / NAS / offsite | TBD | +| Параметр | Значение | +|---|---| +| ОС | **Ubuntu Server (LTS)** | +| CPU | **Intel Xeon** | +| RAM | **16 ГБ** | +| GPU | **нет** (AI — через внешний API) | +| Диск | SSD — уточнить объём (рекомендуется ≥ 500 ГБ + отдельный диск под бэкапы) | +| Сеть | **статический IP** | +| Домен | **opora.my-dpr.ru** (тестовый) | +| TLS | **Let's Encrypt** (Certbot, автообновление) | + +**Примечание по реестру отечественного ПО:** сервер на Ubuntu, поэтому полное соответствие реестру (ОС Astra Linux / RED OS) сейчас не достигается. При необходимости импортозамещения — отдельная миграция ОС и СУБД (Postgres Pro / Tantor). На текущем этапе используем стандартный PostgreSQL 16. --- ## 5. Надёжность и резервное копирование -- Ежесуточный бэкап PostgreSQL (pgBackRest), хранение ≥ 30 дней (п. 4.1.9 ТЗ). -- Бэкап артефактов (MinIO) — ежесуточно. +- Ежесуточный бэкап PostgreSQL (pgBackRest) + архивация WAL для point-in-time recovery. +- Бэкап артефактов (MinIO) — ежесуточно через rclone. +- **Схема хранения (рекомендация):** локальный внешний диск/NAS + offsite-копия в S3-совместимое хранилище РФ (Selectel / Yandex Object Storage / VK Cloud). +- Хранение ≥ 30 дней (п. 4.1.9 ТЗ). - Восстановление — не более 24 ч (п. 4.1.4 ТЗ). -- Целевые RPO/RTO уточнить: текущий ежесуточный бэкап даёт RPO до 24 ч. +- Ежеквартальная проверка восстановления из бэкапа. - Мониторинг доступности и алерты (Prometheus + Alertmanager). --- @@ -111,18 +117,27 @@ ## 6. Безопасность и 152-ФЗ - Все данные — на физическом сервере в РФ (локализация ПДн). -- TLS на всех внешних соединениях. +- TLS на всех внешних соединениях (Let's Encrypt). - Одноразовые ссылки входа, привязка сессии к аккаунту мессенджера (п. 4.1.5 ТЗ). - Ролевая модель доступа (п. 4.1.8 ТЗ). - Журналирование действий пользователей и ассистента. - Секреты — через `.env` / Docker secrets (при необходимости — HashiCorp Vault). + +### AI-ассистент и внешние API (важно) + +OpenRouter и PiAPI — зарубежные сервисы, данные уходят за пределы РФ. Требования: + +- **Не передавать персональные данные** (ФИО, контакты, аккаунты мессенджеров) во внешний LLM. +- Передавать только обезличенный контекст: агрегаты по регионам, названия целей, тексты задач без ПДн. +- Все действия ассистента фиксировать в журнале (кто, что, когда). +- Ассистент действует в рамках прав владельца, с возможностью отключения/ограничения. - **Требуется отдельная проработка:** правовые основания обработки ПДн, согласия, сроки хранения, меры защиты по ПП-1119. --- ## 7. CI/CD -- GitLab CI: линтеры → тесты → сборка Docker-образов → push в registry → деплой на сервер (SSH / Watchtower / Portainer). +- GitLab CI: линтеры → тесты → сборка Docker-образов → push в registry → деплой на сервер (SSH). - Окружения: `dev` (локально), `staging` (на сервере), `prod`. - Миграции БД — Alembic в пайплайне деплоя. @@ -130,17 +145,15 @@ ## 8. Открытые вопросы -1. **Параметры сервера** — ОС, CPU/RAM/диск, наличие GPU, домен, статический IP. -2. **Реестр отечественного ПО** — нужно ли попадание (влияет на ОС и СУБД). -3. **AI-ассистент** — в объёме? self-hosted LLM (нужен GPU) или облачный YandexGPT/GigaChat? -4. **Вариант масштаба** — 1 (один сервер) или 2 (кластер, K8s, Kafka)? -5. **Бэкап-хранилище** — внешний диск, NAS или offsite? -6. **Домен и TLS** — Let's Encrypt или корпоративный сертификат? +1. **Объём диска** сервера (SSD) и наличие отдельного диска под бэкапы. +2. **Offsite-хранилище** для бэкапов — подтвердить провайдера (Selectel / Yandex / VK) или второй диск. +3. **Модель LLM** для ассистента (выбор через OpenRouter/PiAPI) — уточнить на этапе техпроекта. +4. **Реестр отечественного ПО** — нужен ли в перспективе (влияет на миграцию ОС/СУБД). --- ## 9. Следующие шаги -1. Ответить на открытые вопросы (раздел 8). +1. Уточнить объём диска и offsite-хранилище (раздел 8). 2. Утвердить документ. 3. Перейти к техническому проекту: структура БД, контракты API, макеты экранов.