Инструкция¶
I - Устанавливаем ОС Ubuntu 22.04¶
Здесь вопросов быть не должно
II - Настройка сервера сигнализации (High-performance backend) для Nextcloud Talk¶
Введение¶
Установка выполнена на ВМ: 4 CPU, 16 GB RAM, 60GB, ОС Ubuntu 22.04
Должны быть включены следующие порты:
22 (ваш SSH порт)
80 (TCP)
443 (TCP)
3478 (UDP и TCP)
1. Подготовка системы¶
sudo apt update && apt upgrade
sudo apt install make protobuf-compiler git python3 docker.io zip unzip
2.Установка последней версии Go¶
2.1. wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz - качаем архив
2.2. sha256sum go1.21.3.linux-amd64.tar.gz - проверяем хэш
2.3. sudo tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz - разворачиваем архив
2.4. sudo nano ~/.profile
2.5 Правим переменные окружения
export PATH=$PATH:/usr/local/go/bin - здесь лежит компилятор Golang
export GOPATH=/opt/extcloud-spreed-signaling-<version_name> - рабочая директория (должна совпадать с пунктом 6.5)
export PATH=/opt/extcloud-spreed-signaling-<version_name>/bin - здесь будет бинарный файл после компиляции
source ~/.profile - перечитываем переменные из профиля
2.6. mkdir $HOME/goproject - создаем рабочую директорию
2.7. go version - проверяем версию
3. Настройка NATS сервера¶
3.1. docker pull nats:latest - стягиваем образ
3.2. docker run -d --name nats-server -p 4222:4222 -ti nats:latest - запускаем в фоне на порту 4222
4. Установка Janus¶
4.1. sudo apt install janus - ставим
4.2. systemctl enable janus - добавляем в автозагрузку
4.3. systemctl status janus - проверям статус
4.4. openssl rand -hex 8 - генерим ключ
4.5. sudo nano /etc/janus/janus.jcfg - в разделе NAT находим раскомментим "full_trickle = true" и добавим turn_rest_api_key = <сгенерированый_ранее_ключ>
4.6. sudo nano /etc/janus/janus.transport.http.jcfg - раскомментим "interface = eth0" и заменим "eth0" на "lo"
4.7. sudo nano /etc/janus/janus.transport.websockets.jcfg - раскомментим "interface_ws = eth0" и заменим "eth0" на "lo"
4.8. sudo systemctl restart janus - рестартуем
5. Установка coTURN¶
5.1. sudo apt install coturn - устанавливаем
5.2. systemctl enable coturn - добавляем в автозагрузку
5.3. cp /etc/turnserver.conf /etc/turnserver.conf_BAK - бэкапим дефолтную конфигурацию
5.4. openssl rand -hex 16 - генерим ключ
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
5.6. sudo systemctl restart coturn - рестартуем
5.7. Пробрасываем порт3478 на маршрутере
6. Загрузка сервера сигнализации¶
6.1. cd /opt - перемещаемся в каталог
6.2. sudo wget https://github.com/strukturag/nextcloud-spreed-signaling/archive/refs/tags/v<version_name>.zip - скачиваем архив с нужной версией
6.3. unzip v1.2.2.zip - распаковываем архив
6.4. rm v1.2.2.zip - удаляем архив
6.5. chown R boniq:boniq nextcloud-spreed-signaling<version_name> - устанавливаем владельцем текущего пользователя (рекурсивно)
6.6. cd nextcloud-spreed-signaling-<version_name> - переходим в директорию с проектом
6.7. make build - компилируем сервер
6.8. cp bin/signaling /usr/bin/ - копируем исполняемый файл сервера
6.9. sudo mkdir /etc/signaling - создаем директорию для хранения кофигов сервера
6.10. cp server.conf.in /etc/signaling/server.conf - копируем дефолтный конфиг
7. Подготовка сервера сигнализации¶
7.1. groupadd --system signaling - добавляем группу
7.2. useradd --system --gid signaling --shell /usr/sbin/nologin --comment "Standalone signaling server for Nextcloud Talk." signaling - создаем пользователя signaling, добавляемв группу, запрещаем вход
7.3. chmod 600 /etc/signaling/server.conf - присваиваем права
7.4. chown signaling:signaling /etc/signaling/server.conf - делаем владельцем
7.5. cp /opt/nextcloud-spreed-signaling-<version_name>/dist/init/systemd/signaling.service /etc/systemd/system/signaling.service - делаем запуск в качестве демона
7.6. sudo nano /etc/systemd/system/signaling.service открываем демона на редактирование
7.7. After=janus.service - вставляем после описания (строка 2)
7.8. systemctl daemon-reload - перезагружаем демона
8. Настройка сервера сигнализации¶
8.1. openssl rand -hex 16 - генерим ключ (нужно создать 4 ключа)
8.2. nano /etc/signaling/server.conf - открываем на редактирование конфигурационный файл
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
8.4. systemctl enable signaling - делаем автозагрузку сигнал-сервера
p.8.5. systemctl start signaling - стартуем его
9. Прокси-сервер¶
9.1. sudo apt install apache2 - устанавливаем apache
9.2. a2enmod ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env expires - определяем функционал
9.3. systemctl restart apache2 - рестартуем
9.4. systemctl enable apache2 - делаем автозагрузку
9.4. rm /var/www/html/index.html - удаляем тестовую страницу
9.5. cd /etc/apache2/sites-available/ - переходим в директорию настроки сайтов
9.6. nano signaling.conf - создаем файл конфигурации для сайта
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>
9.8. a2dissite 000-default.conf - отключаем дефолтный сайт
9.9. a2ensite signaling.conf - включаем новый сайт
p.9.10. apachectl -t - проверяем конфу
p.9.11. systemctl restart apache2 - перезапускаем apache
h.3 10. SSL
10.1. apt install certbot - ставим бота
10.2. certbot certonly --webroot -w /var/www/html -d talk.krovelson.ru - получаем сертификат (прим.: перед этим нужно пробросить 80 порт)
11. Придулываем сертификат¶
11.1. nano signaling.conf - открываем конфиг на редактирование
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>
11.3. apachectl -t - тестим конфиг
11.4. systemctl restart apache2 - перезапускаем apache
12. Настройка NextClud¶
12.1. Переходим https://cloud.krovelson.ru/index.php/settings/admin/talk
12.2. "URL высокопроизводительного сервера" = https://talk.krovelson.ru/standalone-signaling/
12.3. "Проверять SSL" = V
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>
Updated by Дмитрий Курнаев 7 months ago · 28 revisions