Project

General

Profile

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