Project

General

Profile

Actions

Wiki » History » Revision 27

« Previous | Revision 27/28 (diff) | Next »
Дмитрий Курнаев, 07/02/2025 12:38 PM


Инструкция

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=&lt;key_created_above&gt;
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&lt;version_name&gt;.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
p. 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
&lt;Directory "/var/www/html"&gt;
AllowOverride All
Options -Indexes +FollowSymLinks
&lt;/Directory&gt;
ErrorLog /var/log/apache2/signaling_error.log
&lt;/VirtualHost&gt;

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]
&lt;/VirtualHost&gt;

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 · 27 revisions