avoice

Документация

Настройки config.json

config.json лежит рядом с сервером. Его создаёт мастер настройки или первый запуск; поля, которых нет в файле, берутся по умолчанию. После правки перезапустите сервер. Каналы, роли, блокировки и ники в config.json не хранятся - они в базе и меняются из клиента.

Поля

Поле По умолчанию Значение
version версия сервера Какая версия записала файл (см. ниже)
name AVOICE Название сервера
welcome текст Приветствие при подключении
description - Описание сервера (Markdown), видно в «О сервере»
listen 0.0.0.0:7700 Адрес и порт. Тот же номер используется для UDP
publicIP - Внешний IP при NAT или в Docker
tls auto auto - свой сертификат; files - ваш (certFile, keyFile); off - без TLS, за HTTPS-прокси
dataDir data База, файлы и сертификат
maxUsers 64 Слотов на сервере
maxRoomUsers 25 Человек в одной голосовой комнате
maxUploadMB 25 Предел одного файла
storageMB 2048 Общее место под файлы; старые удаляются, когда оно кончается
storage local Где хранить файлы: local или s3
s3 - Подключение к S3, см. Файлы, S3 и резервные копии
listed false Показывать сервер в общем списке
publicAddress - Адрес для общего списка: домен или IP, с :порт, если не 7700
ownerId - ID владельца
ownerPassword случайный Пароль владельца
serverPassword - Пароль на весь сервер: его спрашивают один раз у всех, кроме владельца. Сервер с паролем не попадает в общий список
checkUpdates true Узнавать у сайта проекта о новой версии
autoUpdate false Ставить новую версию самому, когда никого нет (только для службы)
backupDays 7 Сколько дней хранить ежедневные копии базы; 0 - выключить
trustProxy false Брать IP клиента из X-Forwarded-For (только за своим прокси)
iceServers [] STUN/TURN для сетей, где UDP закрыт

Пример

{
  "name": "Ламповый уголок",
  "listen": "0.0.0.0:7700",
  "publicIP": "203.0.113.5",
  "maxUsers": 32,
  "ownerId": "1460bac4f4a6c0c6dcd80cbfeca27f66",
  "ownerPassword": "длинный-случайный-пароль",
  "listed": true,
  "publicAddress": "voice.example.com"
}

Переменные окружения

Любое поле можно переопределить переменной - удобно в Docker: AVOICE_NAME, AVOICE_LISTEN, AVOICE_PUBLIC_IP, AVOICE_TLS, AVOICE_DATA_DIR, AVOICE_MAX_USERS, AVOICE_MAX_ROOM_USERS, AVOICE_MAX_UPLOAD_MB, AVOICE_STORAGE_MB, AVOICE_OWNER_ID, AVOICE_OWNER_PASSWORD, AVOICE_SERVER_PASSWORD, AVOICE_STORAGE, AVOICE_S3_ENDPOINT, AVOICE_S3_REGION, AVOICE_S3_BUCKET, AVOICE_S3_PREFIX, AVOICE_S3_ACCESS_KEY, AVOICE_S3_SECRET_KEY, AVOICE_S3_PATH_STYLE, AVOICE_S3_INSECURE, AVOICE_LISTED, AVOICE_PUBLIC_ADDRESS, AVOICE_CHECK_UPDATES, AVOICE_AUTO_UPDATE, AVOICE_TRUST_PROXY, AVOICE_ICE_SERVERS (JSON).

Значения из переменных никогда не записываются в config.json - например, секрет S3 из Docker не окажется в файле.

Когда сервер обновился

Новая версия при первом запуске со старым config.json дописывает в него новые настройки со значениями по умолчанию, не трогая ваши, и сохраняет прежний файл рядом как config.json.bak-<старая версия>. В журнале появится строка, какие поля добавлены. Настройки, которых эта версия не знает, сохраняются как есть.

Свой сертификат и домен

По умолчанию сервер сам выпускает себе сертификат, и клиенты один раз подтверждают его отпечаток. Если есть домен, можно поставить сервер за Caddy с сертификатом Let's Encrypt: "tls": "off", "listen": "127.0.0.1:7700", "trustProxy": true, а Caddy принимает HTTPS на 443 и передаёт AVOICE. Голос при этом по-прежнему идёт напрямую на UDP 7700. В клиенте такой сервер указывается как https://voice.example.com (порт 443).