I. Архитектура II. Сервер под исходники III. Пользователю IV. Разработчику

Ростехлизинг · «Чаттерный надзор»

Инфраструктура

Архитектура, требования к серверу под исходники проектов, и как пользоваться системой.

I

Архитектура

Что есть сейчас в облаке и куда какие данные идут.

A

Схема

MAX мессенджер Сервер (VPS) Node.js — приём и логика PostgreSQL — переписка, роли whisper.cpp — голос, локально Yandex Cloud только текст сводки файлы — никогда YouGile задачи вебхук текст сводки задачи

Голос и распознавание фото/PDF — полностью локально, файл никогда не покидает сервер. За пределы уходит только текст: сводка на суммаризацию и (если чат привязан к проекту) копия переписки в YouGile.

B

Данные — что где

ДанныеГдеЗа пределы сервера?
Текст перепискиPostgreSQL на серверенет, хранится локально
Голосовыеwhisper.cpp на серверенет, файл удаляется сразу после расшифровки
Фото / PDFtesseract + poppler на серверенет, файл не покидает сервер
Сводки по чатамформируются YandexGPTда — только текст, на суммаризацию
Задачи, копия переписки по проектуYouGileда — текст, внешний сервис
Резервные копии БДлокально на сервере, раз в суткинет
Открытый пункт Файлы (голос, фото, PDF) не выходят за пределы сервера — это сделано полностью. Текст сводок по-прежнему обрабатывается YandexGPT в облаке, потому что качественная суммаризация локальной моделью требует заметно больше памяти/процессора, чем есть на этом сервере (2 ядра / 4 ГБ, уже заняты ботом и базой). Решение: перенести и это на отдельный сервер под исходники (раздел II) — там достаточно мощности для локальной модели. До переноса — сводки формируются в Yandex Cloud, только текст, без файлов.
II

Сервер под исходники

Отдельная от бота задача — хранение больших проектных файлов.

A

Вводные

Объём исходников на проект — от 100 МБ (ИЖС) до 800–900 ГБ (логистический комплекс, 20 000 м², сложная застройка). Это отдельный контур от переписки в MAX — сейчас такого хранилища нет, ниже — оценка требований.

B

Оценка объёма

КатегорияОценка
Мелкий проект0.1–5 ГБ
Средний проект5–100 ГБ
Крупный проект100–900 ГБ
Рабочий объём (активные проекты одновременно)≈ 2–4 ТБ
С учётом архива и роста на 3–5 лет8–16 ТБ полезного объёма

Оценка от заявленных диапазонов, не точная спецификация — уточняется по факту числа параллельных проектов.

C

Рекомендация по железу

ПараметрРекомендация
ХранилищеRAID6 / ZFS RAIDZ2 — переживает отказ 2 дисков одновременно
Полезный объёмот 8–16 ТБ, с запасом на рост
ПамятьECC RAM — целостность данных при долгом хранении
Сетьот 1 Гбит/с, лучше 10 Гбит/с — файл 900 ГБ по 1 Гбит идёт часами
Резервное копированиеотдельная копия вне этой машины (правило 3-2-1)
Диски "в состоянии покоя"шифрование — данные чувствительные
Отдельно от бота Хранилище исходников и сервер бота (I) — разные машины с разными задачами. Смешивать не стоит: у бота лёгкая нагрузка (2 ядра / 4 ГБ хватает с запасом), у хранилища — объём и надёжность диска, а не процессор.
Заодно закрывает I.B Если на этой машине заложить процессор помощнее (от 8 ядер, 32+ ГБ, желательно GPU) — на ней же можно держать локальную языковую модель для сводок по чатам. Тогда текст переписки тоже перестанет уходить в облако — последний пункт из раздела I.
III

Пользователю

Как пользоваться ботом в повседневной работе.

A

Что это

Бот в MAX, добавленный в рабочие чаты. Читает переписку, собирает важное (проблемы, упоминания руководителя, заявки) в сводки для ответственных.

B

Согласие на данные

При добавлении в чат бот сразу присылает запрос согласия на обработку персональных данных — кнопки «Я согласен» / «Не согласен». Пока человек не нажал «Я согласен», его сообщения не обрабатываются.

C

Автоматика

D

Команды

КомандаЧто делаетКому
/сводкасводка по чату сейчаслюбой участник
/задача <текст>задача в YouGileлюбой участник
/проект <название>привязать чат к проектуответственные
/несогласныекто не принял согласиеответственные
/доступ <id>доступ к /сводка внешнемуответственные
/admin, /admin_addуправление ответственнымиглавный, личка
IV

Разработчику

Где что лежит на сервере и как это работает.

A

Стек

B

Где что

ПутьЧто
server.tsвход: HTTP, вебхук, /health
bots/handleUpdate.tsединая точка входа для апдейтов
consent/согласие на ПДн
digest/сводки, дедупликация, алерты
admin/roles.tsроли — источник получателей сводок
llm/, voice/, photo/YandexGPT, whisper, OCR
prisma/schema.prismaмодель данных
C

Эксплуатация

# статус, логи, рестарт
systemctl status maxbot.service --no-pager
journalctl -u maxbot.service -f
systemctl restart maxbot.service

# деплой — вручную, без CI
npm run build && # scp изменённых .js в dist/ на сервере, затем restart

Секреты — в .env на сервере. Вебхук переключается через POST/DELETE https://platform-api2.max.ru/subscriptions токеном бота, без веб-кабинета.