PrimeMeet

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

Первый production-запуск, проверка после установки, резервное копирование, обновление и откат, мониторинг и серверная диагностика.

После настройки подсистем сервер выводится в production: первый запуск, проверка после установки, резервное копирование, обновление с планом отката, мониторинг и диагностика типовых сбоев.

Первый production-запуск

До запуска

Убедитесь, что:

  • созданы secrets;
  • LiveKit работает;
  • TURN работает;
  • TLS работает;
  • worker health зеленый;
  • FCM настроен;
  • VAPID настроен;
  • SMTP проверен;
  • директории принадлежат service user;
  • backup-путь существует.

Запуск

sudo systemctl start whisper-worker
sudo systemctl start primebroadcast-backend
sudo systemctl status whisper-worker --no-pager
sudo systemctl status primebroadcast-backend --no-pager

Журналы

journalctl -u whisper-worker -n 100 --no-pager
journalctl -u primebroadcast-backend -n 100 --no-pager

Первый пользователь

Текущая Node-версия поддерживает публичную регистрацию API. Если установка закрытая, ограничьте доступ reverse proxy, invitation policy или доработайте admin provisioning до публикации.

Проверка после установки

Smoke test

set -euo pipefail

BASE_URL="${BASE_URL:-https://prime-meet.ru}"

curl -fsS "$BASE_URL/api/health"
curl -fsSI "$BASE_URL/meet"
curl -fsSI "$BASE_URL/meet/messages"
curl -fsSI "$BASE_URL/meet/calendar"
curl -fsSI "$BASE_URL/meet/recordings"

echo "PrimeMeet HTTP smoke test passed"

Сквозной тест

Создайте два тестовых аккаунта и выполните:

  1. Найдите друг друга.
  2. Отправьте текст.
  3. Проверьте typing.
  4. Отправьте фото.
  5. Отправьте DOCX.
  6. Позвоните audio.
  7. Позвоните video.
  8. Создайте конференцию.
  9. Подключитесь из LTE.
  10. Передайте владельца.
  11. Покиньте комнату.
  12. Проверьте завершение.
  13. Запишите короткое совещание.
  14. Проверьте транскрипт.
  15. Проверьте push после закрытия приложения.

Android

  • APK устанавливается поверх прошлой версии.
  • Иконка правильная.
  • Версия отображается.
  • Вход сохраняется.
  • FCM работает после swipe из recent apps.
  • Входящий звонок открывает call UI.
  • Контакты доступны.
  • Файл скачивается и открывается.

iPhone PWA

  • Установка на Home Screen.
  • Вход сохраняется.
  • Микрофон работает.
  • Камера работает.
  • Повторный вход не ломает экран.
  • Push работает.
  • Отправка сообщения не перезагружает страницу.
  • Скачивание не выбрасывает на главную.

Резервное копирование

Что хранить

  • data/app.db;
  • data/uploads/;
  • data/audio/;
  • data/office-previews/, если нужен быстрый restore;
  • data/report-examples/;
  • data/vapid.json;
  • FCM credential в защищенном хранилище;
  • runtime/env;
  • LiveKit/TURN configs;
  • MediaMTX config;
  • Android signing key.

SQLite

SQLite использует WAL. Безопасные варианты: SQLite backup API, sqlite3 .backup или короткая остановка backend и копирование DB/WAL/SHM.

Пример:

sqlite3 /opt/primebroadcast/data/app.db \
  ".backup '/backup/primemeet/app-$(date +%F-%H%M%S).db'"

Полный backup

sudo systemctl stop primebroadcast-backend

tar -C /opt/primebroadcast -czf \
  "/backup/primemeet/data-$(date +%F-%H%M%S).tar.gz" \
  data runtime

sudo systemctl start primebroadcast-backend

Проверка

Backup считается готовым только после тестового восстановления: БД открывается, пользователи и чаты есть, вложение скачивается, конференции читаются, transcript открывается.

Retention

Не путайте backup retention, audio retention PrimeResume, пользовательское удаление и юридический срок хранения.

Обновление и откат

До обновления

git status --short
npm test
git diff --check

На сервере:

systemctl is-active primebroadcast-backend
systemctl is-active whisper-worker
curl -fsS http://127.0.0.1:3000/api/health

Backup кода

STAMP=$(date +%Y%m%d-%H%M%S)
sudo mkdir -p "/opt/primebroadcast/backups/release-$STAMP"
sudo cp -a backend frontend scripts package.json \
  "/opt/primebroadcast/backups/release-$STAMP/"

Не копируйте data внутрь code backup вместо нормального backup процесса.

Обновление

npm ci --omit=dev
sudo systemctl restart primebroadcast-backend

Worker перезапускайте только если изменились workers/whisper, модели, Python dependencies или worker env.

Проверка

systemctl is-active primebroadcast-backend
curl -fsS http://127.0.0.1:3000/api/health
journalctl -u primebroadcast-backend --since "5 minutes ago" --no-pager

Откат

  1. Остановите backend.
  2. Верните code backup.
  3. Верните dependencies совместимой версии.
  4. Восстановите БД только если изменение схемы несовместимо.
  5. Запустите backend.
  6. Выполните smoke test.

Важно. Не используйте git reset --hard на сервере с несохраненными изменениями и не откатывайте БД без отдельного backup.

Мониторинг и журналы

Сервисы

systemctl status primebroadcast-backend --no-pager
systemctl status whisper-worker --no-pager
systemctl status livekit-server --no-pager
systemctl status coturn --no-pager

Названия LiveKit/TURN units зависят от установки.

Журналы

journalctl -u primebroadcast-backend -f
journalctl -u whisper-worker -f

Метрики

Минимум:

  • health availability;
  • HTTP 5xx;
  • latency;
  • WebSocket connections;
  • active LiveKit rooms;
  • LiveKit participants;
  • TURN allocations;
  • transcript queue;
  • diarization failures;
  • disk usage;
  • SQLite size;
  • upload rate;
  • push failures;
  • SMTP failures.

Alerts

  • backend down;
  • worker down;
  • LiveKit down;
  • disk > 80%;
  • backup missing;
  • transcript queue stalled;
  • repeated FCM 401;
  • DeepSeek 401;
  • TLS expiry;
  • TURN unavailable.

Секреты в журналах

Не должны попадать: JWT, API keys, password, FCM private key, email password, full signed meeting links.

Серверная диагностика

Backend не запускается

journalctl -u primebroadcast-backend -n 200 --no-pager
node --check /opt/primebroadcast/backend/server.js
node --check /opt/primebroadcast/backend/runtime.js

Проверьте syntax, Node version, native better-sqlite3, env, права, порт и default production JWT secret.

SQLite locked

Проверьте второй backend на той же БД, зависший процесс, неправильный backup, права WAL/SHM и свободное место:

lsof /opt/primebroadcast/data/app.db
ls -lh /opt/primebroadcast/data/app.db*

WebSocket не подключается

Проверьте token, clock, reverse proxy upgrade, /ws, origin и backend logs.

Upload 413

Причина — proxy limit меньше backend limit. Проверьте CHAT_FILE_MAX_BYTES, proxy body size, свободное место и upload rate limit.

Office preview

which libreoffice
libreoffice --headless --version
ls -ld /opt/primebroadcast/data/office-previews

Push 401

Проверьте service account, project ID, private key, clock, Firebase API и package/application configuration.

Email

Проверьте SMTP host, port, secure flag, credentials, from, firewall и provider logs.

Следующий шаг — Качество, безопасность и приёмка: проверка звонков и транскрипции, регламент и чек-листы.

Обновлено: 3 августа 2026 г.