Wiki » History » Revision 27
Revision 26 (Дмитрий Курнаев, 07/01/2025 07:53 AM) → Revision 27/28 (Дмитрий Курнаев, 07/02/2025 12:38 PM)
h1. Инструкция
h2. I - Устанавливаем ОС Ubuntu 22.04
p. Здесь вопросов быть не должно
h2. II - Настройка сервера сигнализации (High-performance backend) для Nextcloud Talk
h3. Введение
p. Установка выполнена на ВМ: 4 CPU, 16 GB RAM, 60GB, ОС Ubuntu 22.04
Должны быть включены следующие порты:
22 (ваш SSH порт)
80 (TCP)
443 (TCP)
3478 (UDP и TCP)
h3. 1. Подготовка системы
p. sudo apt update && apt upgrade
sudo apt install make protobuf-compiler git python3 docker.io zip unzip
h3. 2.Установка последней версии Go
p. 2.1. wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz - качаем архив
p. 2.2. sha256sum go1.21.3.linux-amd64.tar.gz - проверяем хэш
p. 2.3. sudo tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz - разворачиваем архив
p. 2.4. sudo nano ~/.profile
p. 2.5 Правим переменные окружения
export PATH=$PATH:/usr/local/go/bin - здесь лежит компилятор Golang
правим переменные окружения
export GOPATH=/opt/extcloud-spreed-signaling-<version_name> - рабочая директория (должна совпадать с пунктом 6.5)
GOPATH=$HOME/goproject
export PATH=/opt/extcloud-spreed-signaling-<version_name>/bin - здесь будет бинарный файл после компиляции
PATH=$PATH:$GOPATH/bin
source ~/.profile - перечитываем переменные из профиля
p. 2.6. mkdir $HOME/goproject - создаем рабочую директорию
p. 2.7. go version - проверяем версию
h3. 3. Настройка NATS сервера
p. 3.1. docker pull nats:latest - стягиваем образ
p. 3.2. docker run -d --name nats-server -p 4222:4222 -ti nats:latest - запускаем в фоне на порту 4222
h3. 4. Установка Janus
p. 4.1. sudo apt install janus - ставим
p. 4.2. systemctl enable janus - добавляем в автозагрузку
p. 4.3. systemctl status janus - проверям статус
p. 4.4. openssl rand -hex 8 - генерим ключ
p. 4.5. sudo nano /etc/janus/janus.jcfg - в разделе NAT находим раскомментим "full_trickle = true" и добавим turn_rest_api_key = <сгенерированый_ранее_ключ>
p. 4.6. sudo nano /etc/janus/janus.transport.http.jcfg - раскомментим "interface = eth0" и заменим "eth0" на "lo"
p. 4.7. sudo nano /etc/janus/janus.transport.websockets.jcfg - раскомментим "interface_ws = eth0" и заменим "eth0" на "lo"
p. 4.8. sudo systemctl restart janus - рестартуем
h3. 5. Установка coTURN
p. 5.1. sudo apt install coturn - устанавливаем
p. 5.2. systemctl enable coturn - добавляем в автозагрузку
p. 5.3. cp /etc/turnserver.conf /etc/turnserver.conf_BAK - бэкапим дефолтную конфигурацию
p. 5.4. openssl rand -hex 16 - генерим ключ
p. 5.5. sudo nano /etc/turnserver.conf - заменяем содержимое следующим:
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=<key_created_above>
realm=talk.hackerspace.ru
total-quota=100
bps-capacity=0
stale-nonce
no-multicast-peers
p. 5.6. sudo systemctl restart coturn - рестартуем
p. 5.7. Пробрасываем порт3478 на маршрутере
h3. 6. Загрузка сервера сигнализации
07d33c884ba67d02
47576fe6d8fd27c20361f75b6c4a360
https://github.com/mailru/easyjson/archive/refs/tags/v0.9.0.zip
p. 6.1. cd /opt - перемещаемся в каталог google.golang.org/grpc/cmd/protoc-gen-go-grpc
p. 6.2. sudo wget https://github.com/strukturag/nextcloud-spreed-signaling/archive/refs/tags/v<version_name>.zip - скачиваем архив с нужной версией Hash ключ: 796b0fc8718aff580267d4b1d872a104
p. 6.3. unzip v1.2.2.zip - распаковываем архив Block ключ: 0a6c3b9959bbccc7a38cb647ee0fce97
p. 6.4. rm v1.2.2.zip - удаляем архив
p. 6.5. chown -R boniq:boniq nextcloud-spreed-signaling-<version_name> - устанавливаем владельцем текущего пользователя (рекурсивно)
p. 6.6. cd nextcloud-spreed-signaling-<version_name> - переходим в директорию с проектом
p. 6.7. make build - компилируем Internal secret (используется для внешних клиентов, таких как сервер
p. 6.8. cp bin/signaling /usr/bin/ - копируем исполняемый файл сервера
p. 6.9. sudo mkdir /etc/signaling - создаем директорию для хранения кофигов сервера
p. 6.10. cp server.conf.in /etc/signaling/server.conf - копируем дефолтный конфиг
h3. 7. Подготовка сервера сигнализации
p. 7.1. groupadd --system signaling - добавляем группу
p. 7.2. useradd --system --gid signaling --shell /usr/sbin/nologin --comment "Standalone signaling server for записи): 92543f1751347542ef9155c9ad013fdc
Nextcloud Talk." signaling - создаем пользователя signaling, добавляемв группу, запрещаем вход облачный секретный ключ: c79c7399d9d866d4f100867198a7be17
p. 7.3. chmod 600 /etc/signaling/server.conf - присваиваем права
p. 7.4. chown signaling:signaling /etc/signaling/server.conf - делаем владельцем
p. 7.5. cp /opt/nextcloud-spreed-signaling-<version_name>/dist/init/systemd/signaling.service /etc/systemd/system/signaling.service - делаем запуск в качестве демона
p. 7.6. sudo nano /etc/systemd/system/signaling.service открываем демона на редактирование
p. 7.7. After=janus.service - вставляем после описания (строка 2)
p. 7.8. systemctl daemon-reload - перезагружаем демона
h3. 8. Настройка сервера сигнализации
p. 8.1. openssl rand -hex 16 - генерим ключ (нужно создать 4 ключа)
p. 8.2. nano /etc/signaling/server.conf - открываем на редактирование конфигурационный файл
p. 8.3. Раскщмментирываем/изменяем следующие параметры:
[http]
listen = 127.0.0.1:8080
[sessions]
hashkey = <ключ1_из_п8.1>
blockkey = <ключ2_из_п8.1>
[clients]
internalsecret = <ключ3_из_п8.1>
[backend]
backends = backend-1
[backend-1]
url = https://cloud.krovelson.ru
secret = <ключ4_из_п8.1>
[nats]
url = nats://localhost:4222
[mcu]
type = janus
url = ws://127.0.0.1:8188
[turn]
apikey = <ключ_из_конфы_janus>
secret = <ключ_из_конфы_turn_сервера>
servers = turn:127.0.0.1:3478?transport=udp,turn:127.0.0.1:3478?transport=tcp
p. 8.4. systemctl enable signaling - делаем автозагрузку сигнал-сервера
p.8.5. systemctl start signaling - стартуем его
h3. 9. Прокси-сервер
p. 9.1. sudo apt install apache2 - устанавливаем apache
p. 9.2. a2enmod ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env expires - определяем функционал
p. 9.3. systemctl restart apache2 - рестартуем
p. 9.4. systemctl enable apache2 - делаем автозагрузку
p. 9.4. rm /var/www/html/index.html - удаляем тестовую страницу
p. 9.5. cd /etc/apache2/sites-available/ - переходим в директорию настроки сайтов
p. 9.6. nano signaling.conf - создаем файл конфигурации для сайта
p. 9.7. Наполняем его содержимым:
<VirtualHost *:80>
ServerName talk.krovelson.ru
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
Options -Indexes +FollowSymLinks
</Directory>
ErrorLog /var/log/apache2/signaling_error.log
</VirtualHost>
p. 9.8. a2dissite 000-default.conf - отключаем дефолтный сайт
p. 9.9. a2ensite signaling.conf - включаем новый сайт
p.9.10. apachectl -t - проверяем конфу
p.9.11. systemctl restart apache2 - перезапускаем apache
h.3 10. SSL
p. 10.1. apt install certbot - ставим бота
p. 10.2. certbot certonly --webroot -w /var/www/html -d talk.krovelson.ru - получаем сертификат (прим.: перед этим нужно пробросить 80 порт)
h3. 11. Придулываем сертификат
p. 11.1. nano signaling.conf - открываем конфиг на редактирование
p. 11.2. Приводим к такому виду:
<VirtualHost *:443>
ServerName talk.krovelson.ru
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression off
ErrorLog /var/log/apache2/signaling_error.log
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/talk.krovelson.ru/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/talk.krovelson.ru/fullchain.pem
ProxyPass "/standalone-signaling/" "ws://127.0.0.1:8080/"
RewriteEngine On
RewriteRule ^/standalone-signaling/spreed/$ - [L]
RewriteRule ^/standalone-signaling/api/(.*) http://127.0.0.1:8080/api/$1 [L,P]
</VirtualHost>
p. 11.3. apachectl -t - тестим конфиг
p. 11.4. systemctl restart apache2 - перезапускаем apache
h3. 12. Настройка NextClud
p. 12.1. Переходим https://cloud.krovelson.ru/index.php/settings/admin/talk
p. 12.2. "URL высокопроизводительного сервера" = https://talk.krovelson.ru/standalone-signaling/
p. 12.3. "Проверять SSL" = V
p. 12.4. "Общая секретная фраза" = <токен_из_конф_файла_signaling>>beckend-1>>secret>
p.12.5. Сервер STUN >> Добавить talk.krovelson.ru:443
p.12.6. Добавляем TURN-серверы: |"turn: и turns" | talk.krovelson.ru:3478 | <токен_из_конффайла_CoTURN | UDP/TCP> ws://talk.krovelson.ru/apps/spreed/api/socket