Установка и настройка High-performance backend для Nextcloud Talk на Ubuntu

Обновлено и опубликовано Опубликовано:

Используемые термины: NextcloudUbuntu.

Для реализации высокопроизводительного сервера под Nextcloud Talk будут установлены и настроены следующие компоненты:

  • Signaling Server — ключевой компонент. Обрабатывает установление соединений между пользователями, координирует аудио- и видеопотоки.
  • Janus — сервер WebRTC общего назначения, решающий проблему соединения большого числа пользователей. Предоставляет низкоуровневый API для управления медиа-потоками.
  • Coturn — решает проблему NAT и фаерволов. Помогает устройствам узнать свои внешние IP-адреса. Когда нужно, получает трафик от одного пользователя и передает другому.
  • NATS Server — обмен служебными сообщениями, координация между компонентами.
  • Nginx — веб-сервер для обработки и проксирования https-запросов на Signaling Server.

Рассмотрим запуск этих компонентов по шагам.

Требования

Особое внимание стоит обратить на требования к High-performance backend:

  1. Внешний IP адрес.
  2. Зарегистрированное доменное имя. В нашем примере будет signaling.dmosk.ru.
  3. Отдельный сервер. Мы не можем установить Nextcloud и High-performance backend на одном сервере.
  4. Требования к оборудованию зависят от количества активных пользователей. Но начать стоит с конфигурации: CPU: 4 Cores / RAM: 8 GB / Disk: 32 GB.

Подготовка системы

Предварительно выполним настройки на сервере.

Пакеты

Обновим список пакетов в репозиториях:

apt update

На свежеустановленной системе также рекомендуется выполнить обновление пакетов:

apt upgrade

Установим следующие пакеты:

apt install make protobuf-compiler git python3 zip unzip curl

* где:

  • make — система сборки проектов. Автоматизирует компиляцию и сборку программ из исходного кода, управляя зависимостями и этапами сборки.
  • protobuf-compiler — компилятор Protocol Buffers (protobuf). Преобразует .proto файлы в код на различных языках программирования для сериализации структурированных данных.
  • git — утилита для работы с системами контроля версий. Нужна для загрузки проектов, которые хранятся в GitHub.
  • python3 — интерпретатор языка программирования Python. Используется для запуска Python-скриптов.
  • zip — утилита для архивации файлов в формат ZIP.
  • unzip — утилита для распаковки ZIP-архивов.
  • curl — инструмент для передачи данных (в нашем случае, загрузки файлов) по сетевым протоколам.

Время

Задаем часовой пояс:

timedatectl set-timezone Europe/Moscow

* В данном примере мы задаем зону по московскому времени.

Список всех доступных зон можно посмотреть командой:

timedatectl list-timezones

Если мы увидим только одну зону UTC, скорее всего, у нас установлена минимальная версия Ubuntu. Для установки всех зон вводим:

apt install tzdata

Устанавливаем утилиту для синхронизации времени:

apt install chrony

Настройка брандмауэра

Если в нашей системе по умолчанию блокируются сетевые запросы с помощью фаервола, необходимо открыть следующие порты:

  • 80, 443 / TCP — веб-запросы по http и https.
  • 3478 / TCP, UDP — TURN + STUN.

В системах на базе Deb для настройки фаервола можно использовать утилиту iptables. Вводим команды:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

iptables -I INPUT -p tcp --dport 3478 -j ACCEPT

iptables -I INPUT -p udp --dport 3478 -j ACCEPT

Для сохранения правил можно использовать утилиту iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

Последовательности для ключей

Для безопасного взаимодействия компонентов используются секреты — пароли. Нам нужно 6 таких последовательностей символов.

Можно придумать их самостоятельно, или сгенерировать, например:

seq 6 | xargs -I {} openssl rand -hex 16

Команда выдаст 6 строк, каждая из которых состоит из 16 символов. Сразу скопируйте их и подпишите, например:

# Janus
c178fcea4d2c0e45194cccb245283cff

# Turn Server
c3f84de2fe59c8bc1db0c10d9cf02450

# Hash
07e164de3c2ff5656ef10f115b3d54e3

# Block
e4bef0271402c471ba45e3d97fb3c2ac

# Internal secret
5aa3203091196cfb909af062b2022aae

# Nextcloud secret
f9b088e2cc8e4e175092f8663da498d9

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

Установка Golang

Для сборки signaling нам нужен Golang. Однако, его установка из репозитория считается ненадежной, так как таким методом может быть установлена низкая версия программного продукта. Рекомендуется ручная распаковка бинарного файла.

Переходим на официальный сайт Golang. Смотрим последнюю стабильную версию и создаем переменную:

GO_VER=1.25.0

* в моем случае последней версией была 1.25.0.

Скачиваем архив с бинарным файлом:

curl -sLO https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz

Удаляем старый бинарник (если он есть), распаковываем новый:

rm -rf /usr/local/go && tar -C /usr/local -xzf go${GO_VER}.linux-amd64.tar.gz

Указываем дополнительный путь для поиска исполняемых файлов и сохраняем его в общий конфигурационный файл профилей пользователей:

echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile

Применяем настройки общего профиля, чтобы сразу наша среда знала, где искать бинарник для go:

source /etc/profile

Проверим, что установка прошла успешно:

go version

Мы должны увидеть что-то на подобие:

go version go1.25.0 linux/amd64

Можно двигаться дальше.

Установка компонентов для Signaling

В данном разделе мы рассмотрим установку, настройку и запуск всех компонентов, которые нужны для корректной работы Signaling Server.

Nats Server

Данный компонент может быть установлен из репозитория и не требует настройки. 

Выполняем команду:

apt install nats-server

Проверить работу сервиса можно командой:

systemctl status nats-server

Janus

Выполним команду для установки компонента:

apt install janus

Открываем конфигурационный файл:

vi /etc/janus/janus.jcfg

Приводим следующие строки к виду:

full_trickle = true
...
turn_rest_api_key = <Janus Key>

* обратите внимание, что <Janus Key> — один из 6-и ключей, которые мы сгенерировали при подготовке к работе.

Перезапускаем сервис:

systemctl restart janus

Turn Server

Устанавливаем программное обеспечение:

apt install coturn

Открываем конфигурацию:

vi /etc/turnserver.conf

В самый низ добавим:

listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=<Turn Server Key>
realm=signaling.dmosk.ru
total-quota=100
bps-capacity=0
stale-nonce
no-multicast-peers

* где:

  • static-auth-secret — один из сгенерированных ключей.
  • realm — внешней доменное имя, по которому будет доступен высокопроизводительный сервер.

Перезапускаем TURN-сервер:

systemctl restart coturn

Переходим к запуску основного компонента.

Signaling server

Приступаем к установке и настройке сервиса, который будет принимать основные запросы от Nextcloud Talk. Разделим процесс на установку и настройку.

Установка

Переходим на страницу репозитория проекта и смотрим последнюю версию. Фиксируем ее, создав переменную:

SIG_VER=2.0.4

Скачиваем исходник:

curl -sLO https://github.com/strukturag/nextcloud-spreed-signaling/archive/refs/tags/v${SIG_VER}.tar.gz

Распаковываем его:

tar -zxf v${SIG_VER}.tar.gz

Переходим в каталог, который появился после распаковки архива:

cd nextcloud-spreed-signaling-${SIG_VER}

Собираем рабочие файлы из исходников:

make build

После копируем бинарник signaling в каталог /usr/bin:

cp bin/signaling /usr/bin/

Создаем каталог для хранения конфигурации и копируем в него файл server.conf.in:

mkdir /etc/signaling

cp server.conf.in /etc/signaling/server.conf

* обратите внимание, что целевое имя файла уже server.conf.

Копируем файл для юнита systemd:

cp dist/init/systemd/signaling.service /etc/systemd/system/signaling.service

И немного его подредактируем:

vi /etc/systemd/system/signaling.service

[Unit]
...
After=janus.service

* в первый раздел Unit добавляем одну строку.

Создаем пользователя signaling:

useradd -r -s /usr/sbin/nologin signaling

Установка завершена.

Настройка и запуск

Открываем конфигурационный файл

vi /etc/signaling/server.conf

Правим следующие строки:

[http]
listen = 127.0.0.1:8080

[sessions]
hashkey = <Hash Key>
blockkey = <Block Key>

[clients]
internalsecret = <Internal Secret Key>

[backend]
backends = backend-1

[backend-1]
url = https://nextcloud.dmosk.ru
secret = <Nextcloud Secret Key>


[mcu] 
type = janus
url = ws://127.0.0.1:8188

[turn] 
apikey = <Janus Key>
secret = <Turn Server Key>
servers = turn:127.0.0.1:3478?transport=udp,turn:127.0.0.1:3478?transport=tcp

* строки, которые будут закомментированы необходимо раскомментировать. Недостающие строки нужно добавить.
** обратите внимание на:

  • hashkey, blockkey, internalsecret, backend-1 secret, apikey, turn secret — ключи, которые были ранее сгенерированы.
  • backend-1 url — доменное имя с адресом, по которому доступен nextcloud.

Разрешаем автозапуск сервиса signaling:

systemctl enable signaling

И запустим его:

systemctl start signaling

Проверяем, что нет ошибок:

systemctl status signaling

Можно сделать запрос:

curl -i http://127.0.0.1:8080/api/v1/welcome

Если все работает корректно, мы должны увидеть что-то на подобие:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: nextcloud-spreed-signaling/unknown
X-Spreed-Signaling-Features: audio-video-permissions, dialout, federation, hello-v2, incall-all, join-features, mcu, offer-codecs, recipient-call, serverinfo, simulcast, switchto, transient-data, update-sdp, welcome
Date: Sun, 31 Aug 2025 16:59:34 GMT
Content-Length: 61

{"nextcloud-spreed-signaling":"Welcome","version":"unknown"}

Идем дальше.

Прокси NGINX

Для корректной работы веб-запросы к сигналинг серверу должны отправляться по https с использованием корректного сертификата. Мы рассмотрим пример использования NGINX с получением сертификата от Let's Encrypt.

Устанавливаем пакеты:

apt install nginx certbot

Удалим конфигурацию виртуального домена, которая создается по умолчанию:

rm -f /etc/nginx/sites-enabled/default

Создаем новый файл:

vi /etc/nginx/sites-enabled/signaling.conf

server {
    listen       80;
    server_name  signaling.dmosk.ru;

    location ~ /.well-known/acme-challenge {
        root /usr/share/nginx/html;
        allow all;
    }
}

* где в качестве server_name указываем свой домен для подключения к серверу signaling.

Перечитываем конфигурацию nginx:

nginx -t && nginx -s reload

Запрашиваем сертификат для домена:

certbot certonly --webroot --agree-tos --email postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d signaling.dmosk.ru

Сразу добавим задание для автопродления:

crontab -e

0 0 * * 1,4 /usr/bin/certbot renew --noninteractive

И добавляем хук на перезапуск nginx:

vi /etc/letsencrypt/cli.ini

...
deploy-hook = systemctl reload nginx

Снова открываем конфигурационный файл nginx:

vi /etc/nginx/sites-enabled/signaling.conf

Приводим его к виду:

server {
    listen       80;
    server_name  signaling.dmosk.ru;
    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    server_name  signaling.dmosk.ru;

    ssl_certificate     /etc/letsencrypt/live/signaling.dmosk.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/signaling.dmosk.ru/privkey.pem;

    access_log off;
    
    location ~ /.well-known/acme-challenge {
        root /usr/share/nginx/html;
        allow all;
    }
    
    location / {
        proxy_pass          http://127.0.0.1:8080;
        proxy_redirect      off;
        proxy_http_version  1.1;

        proxy_set_header  Host               $host;
        proxy_set_header  Upgrade            $http_upgrade;
        proxy_set_header  Connection         "upgrade";
        proxy_set_header  X-Real-IP          $remote_addr;
        proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto  http;
    }
}

Проверяем конфигурацию и перечитываем конфигурацию nginx:

nginx -t && nginx -s reload

Можно еще раз сделать запрос, но уже без указания порта:

curl -k https://127.0.0.1/api/v1/welcome

Мы должны увидеть:

{"nextcloud-spreed-signaling":"Welcome","version":"unknown"}

Сервер готов к работе. Остается настроить Nextcloud.

Подключение Nextcloud к High-performance backend

Открываем веб-интерфейс Nextcloud и переходим к настройкам (Administration settings):

Переходим к настройкам сервера Nextcloud в веб-интерфейсе

Переходим в раздел с настройками конференций:

Переходим к настройкам конференций

Сначала меняем настройки для STUN — указываем свой новый сервер, а также добавляем TURN-сервер:

Настраиваем stub и turn

Добавляем высокопроизводительный сервер. Для этого указываем https адрес домена, который планировали использовать для signaling server, а также секретный ключ, сгенерированный для Nextcloud:

Добавляем высокопроизводительный сервер

Настройки применяются сразу.

Если мы увидим ошибку при проверке High-performance backend:

Ошибка при проверке высокопроизводительного сервера

... перезагружаем страницу.

Настройка завершена. Можно тестировать звонки.

# Ubuntu # Мультимедиа # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку облака

Нужна бесплатная консультация?

Мини-инструкции

Как установить систему для удаленного управления устройствами MeshCentral на Linux

Настройка Dovecot Solr для ускорения поиска по почте

Установка и настройка Signaling Server (High-performance backend) для Nextcloud Talk на Ubuntu Server

Как установить и настроить сервис S3 на базе Minio на Linux

Организация сервиса календаря и адресной книги Baikal на Linux Debian

Установка и запуск Aptly API, а также примеры работы с ним

Установка различных версий python на Rocky и работа с ними

Другие инструкции

Все статьи

Нужна помощь? Пишите:






Реклама