Files
opora/docs/stack.md
T

9.8 KiB

Стек технологий и архитектура развёртывания

Проект: АС «Платформа ОПОРА РОССИИ» Статус: согласовано Дата: 26.09.2026


1. Назначение документа

Документ фиксирует согласованный технологический стек и архитектуру развёртывания Системы на физическом сервере заказчика (on-premise, территория РФ). Служит основой для технического проекта и сметы.


2. Согласованный стек

Слой Технология Комментарий
Backend API Python 3.12 + FastAPI Async, автогенерация OpenAPI, единое API для бота и сайта
ORM / миграции SQLAlchemy 2 + Alembic Контроль схемы, миграции
БД PostgreSQL 16 Реляционная СУБД по ТЗ
Кэш / rate-limit Redis Лимиты, кэш, брокер для Celery
Очередь / фоновые задачи Celery + Redis Рассылки, автообновление срезов, ретраи
Планировщик Celery Beat Расписание рассылок и выгрузок
Бот aiogram 3 (Telegram) + адаптер MAX Bot API Единый бот-адаптер с двумя каналами (п. 4.1.13.2 ТЗ)
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 (Let's Encrypt) HTTPS, статика фронтенда
Мониторинг Prometheus + Grafana + Loki Метрики, логи, алерты
Бэкапы pgBackRest (БД) + rclone (файлы, offsite) Ежесуточно, хранение ≥ 30 дней
CI/CD GitLab CI Сборка образов, деплой на сервер
AI-ассистент «Зам» Внешний LLM API: OpenRouter / PiAPI Без GPU; только обезличенный контекст (см. раздел 6)

3. Архитектура развёртывания (физический сервер)

                    Internet
                       │
                 ┌─────▼─────┐
                 │   Nginx   │  TLS (Let's Encrypt), статика, reverse proxy
                 └─────┬─────┘
          ┌────────────┼──────────────┐
          │            │              │
     ┌────▼────┐  ┌────▼────┐   ┌─────▼─────┐
     │  web    │  │   api   │   │  bot      │
     │ (React) │  │FastAPI  │   │ aiogram + │
     │ static  │  │         │   │ MAX adapt │
     └─────────┘  └────┬────┘   └─────┬─────┘
                       │              │
              ┌────────┼──────────────┤
              │        │              │
        ┌─────▼───┐ ┌──▼────┐  ┌──────▼──────┐
        │Postgres │ │ Redis │  │   MinIO     │
        └─────────┘ └───┬───┘  └─────────────┘
                        │
              ┌─────────┴──────────┐
              │  Celery worker +   │
              │  Celery beat       │
              └────────────────────┘

     Мониторинг: Prometheus + Grafana + Loki
     Бэкапы: pgBackRest → внешний диск + offsite (rclone)
     AI: внешний LLM API (OpenRouter / PiAPI) — только обезличенные данные

Состав контейнеров (Docker Compose)

Контейнер Назначение
nginx TLS-терминация, reverse proxy, раздача статики
web Сборка React (или статика через nginx)
api FastAPI (gunicorn + uvicorn workers)
bot aiogram + адаптер MAX
worker Celery worker
beat Celery beat
postgres PostgreSQL 16
redis Redis
minio S3-совместимое хранилище артефактов
prometheus / grafana / loki Мониторинг и логи
pgbackrest Резервное копирование БД

4. Параметры сервера

Параметр Значение
ОС 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) + архивация WAL для point-in-time recovery.
  • Бэкап артефактов (MinIO) — ежесуточно через rclone.
  • Схема хранения (рекомендация): локальный внешний диск/NAS + offsite-копия в S3-совместимое хранилище РФ (Selectel / Yandex Object Storage / VK Cloud).
  • Хранение ≥ 30 дней (п. 4.1.9 ТЗ).
  • Восстановление — не более 24 ч (п. 4.1.4 ТЗ).
  • Ежеквартальная проверка восстановления из бэкапа.
  • Мониторинг доступности и алерты (Prometheus + Alertmanager).

6. Безопасность и 152-ФЗ

  • Все данные — на физическом сервере в РФ (локализация ПДн).
  • 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).
  • Окружения: dev (локально), staging (на сервере), prod.
  • Миграции БД — Alembic в пайплайне деплоя.

8. Открытые вопросы

  1. Объём диска сервера (SSD) и наличие отдельного диска под бэкапы.
  2. Offsite-хранилище для бэкапов — подтвердить провайдера (Selectel / Yandex / VK) или второй диск.
  3. Модель LLM для ассистента (выбор через OpenRouter/PiAPI) — уточнить на этапе техпроекта.
  4. Реестр отечественного ПО — нужен ли в перспективе (влияет на миграцию ОС/СУБД).

9. Следующие шаги

  1. Уточнить объём диска и offsite-хранилище (раздел 8).
  2. Утвердить документ.
  3. Перейти к техническому проекту: структура БД, контракты API, макеты экранов.