Установка и обновления

Messenger поставляется одним Docker-образом: внутри nginx, backend (NestJS) и веб-клиент (React). PostgreSQL и Redis — встроенные через compose-профили или ваши внешние. Понадобится лицензионный ключ — он выдаётся в личном кабинете (Free — бесплатно).

Установка из Docker Hub

Образ messenger-app публикуется в публичном Docker Hub. Доступные теги:

  • latest — последняя стабильная версия;
  • build-N — конкретный номер сборки (например, build-128), для фиксации и откатов;
  • 1.4.0 — semver-тег релиза.

Точный адрес неймспейса (<your-namespace>/messenger-app) сообщается при покупке лицензии. В примерах ниже подставьте его в MESSENGER_IMAGE.

Минимальная инсталляция

Всё встроенное: PostgreSQL и Redis поднимаются compose-профилями, файлы хранятся локально (volume /var/messenger/uploads). Подходит для команд до ~150 человек на одном сервере.

# Скачать compose-файл (адрес сообщается при покупке)
curl -O https://example.com/messenger/docker-compose.yml

# Минимальный .env
cat > .env <<'EOF'
MESSENGER_IMAGE=<your-namespace>/messenger-app
MESSENGER_IMAGE_TAG=latest
LICENSE_KEY=your-license-key
POSTGRES_PASSWORD=замените-на-надёжный-пароль
JWT_SECRET=замените-на-длинную-случайную-строку
EOF

# Скачать образ и запустить (встроенные PostgreSQL + Redis)
docker compose --profile with-postgres --profile with-redis pull
docker compose --profile with-postgres --profile with-redis up -d

После запуска мессенджер доступен на порту 80. Первый зарегистрированный пользователь становится администратором.

Enterprise: внешние БД, S3 и LiveKit

Для больших инсталляций подключите управляемые PostgreSQL и Redis, S3-совместимое хранилище файлов и отдельный LiveKit-сервер для звонков. Compose-профили не нужны — запускается только приложение.

# .env — внешние PostgreSQL, Redis, S3 и LiveKit
MESSENGER_IMAGE=<your-namespace>/messenger-app
MESSENGER_IMAGE_TAG=latest
LICENSE_KEY=...
JWT_SECRET=...

DATABASE_URL=postgresql://user:pass@db.internal:5432/messenger
REDIS_URL=redis://redis.internal:6380

STORAGE_TYPE=s3
S3_ENDPOINT=https://storage.yandexcloud.net
S3_BUCKET=messenger-prod
S3_REGION=ru-central1
S3_ACCESS_KEY=...
S3_SECRET_KEY=...
S3_PUBLIC_URL=https://cdn.example.com

LIVEKIT_URL=wss://livekit.example.com
LIVEKIT_API_KEY=...
LIVEKIT_API_SECRET=...
# Только приложение — внешние сервисы, без compose-профилей
docker compose pull
docker compose up -d

Браузерный доступ к микрофону/камере для звонков требует HTTPS вне localhost — терминируйте TLS на вашем reverse-proxy перед приложением.

Активация лицензии

Ключ можно задать двумя способами:

  • через переменную окружения LICENSE_KEY в .env (как в примерах выше);
  • в админке: вкладка Лицензия Активировать ключ. Значение из БД имеет приоритет над ENV.

После активации во вкладке «Лицензия» видны тариф, лимиты и текущее использование (пользователи, хранилище, воркспейсы).

Обновления

Когда выходит новая версия образа, сервер узнаёт об этом и показывает плашку в админке (вкладка Лицензия) с changelog и номером сборки.

Обновление из админки

Нажмите «Обновить» в плашке. Запрос уходит на отдельный контейнер-updater (sidecar), который скачивает свежий образ из Docker Hub и пересоздаёт контейнер приложения. Это вызывает короткий простой (около минуты на пересоздание) — мы указываем это честно. Updater переживает пересоздание app, поэтому процесс не прерывается.

Ручное обновление (fallback)

Если sidecar-updater не используется (например, нестандартный оркестратор), обновитесь командой:

# Ручное обновление (fallback / air-gapped)
# 1. Указать нужный тег в .env
MESSENGER_IMAGE_TAG=build-128   # или semver, напр. 1.4.0

# 2. Скачать образ и пересоздать контейнер приложения
docker compose pull app
docker compose up -d --no-deps app

Air-gapped (без интернета)

В изолированных контурах перенесите образ вручную через docker save / docker load:

# Air-gapped: перенос образа без доступа в интернет
# На машине с доступом:
docker pull <your-namespace>/messenger-app:1.4.0
docker save <your-namespace>/messenger-app:1.4.0 -o messenger-1.4.0.tar

# На изолированном сервере:
docker load -i messenger-1.4.0.tar
# затем выставить MESSENGER_IMAGE_TAG=1.4.0 и docker compose up -d --no-deps app

Версионирование

Каждый релиз — это latest + номер сборки (build-N) + semver-тег. Номер сборки растёт монотонно; сервер сравнивает свой build с последним опубликованным, чтобы решить, показывать ли плашку. Для предсказуемых деплоев закрепляйте конкретный тег вместо latest.

Лицензия: heartbeat, grace, fingerprint

Лицензионный ключ — это подписанный токен (Ed25519). Сервер периодически подтверждает лицензию (heartbeat) у облака лицензирования.

  • Grace-период 14 дней. Если облако временно недоступно, мессенджер продолжает работать в полном объёме ещё две недели.
  • Fingerprint сервера. Лицензия привязывается к отпечатку сервера. При переезде на другую машину сбросьте привязку в личном кабинете (не чаще 1 раза в 30 дней; для Enterprise — без ограничений).
  • Air-gapped. Для контуров без интернета доступны офлайн-лицензии без heartbeat — подтверждение лицензии и обновления выполняются вручную.

Управление ключами, продление и сброс fingerprint — в личном кабинете.