Эксплуатация 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"
Сквозной тест
Создайте два тестовых аккаунта и выполните:
- Найдите друг друга.
- Отправьте текст.
- Проверьте typing.
- Отправьте фото.
- Отправьте DOCX.
- Позвоните audio.
- Позвоните video.
- Создайте конференцию.
- Подключитесь из LTE.
- Передайте владельца.
- Покиньте комнату.
- Проверьте завершение.
- Запишите короткое совещание.
- Проверьте транскрипт.
- Проверьте 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
Откат
- Остановите backend.
- Верните code backup.
- Верните dependencies совместимой версии.
- Восстановите БД только если изменение схемы несовместимо.
- Запустите backend.
- Выполните 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.
Проверьте SMTP host, port, secure flag, credentials, from, firewall и provider logs.
Следующий шаг — Качество, безопасность и приёмка: проверка звонков и транскрипции, регламент и чек-листы.