Wiki » History » Version 28
Дмитрий Курнаев, 07/02/2025 12:39 PM
| 1 | 1 | Дмитрий Курнаев | h1. Инструкция |
|---|---|---|---|
| 2 | 2 | Дмитрий Курнаев | |
| 3 | h2. I - Устанавливаем ОС Ubuntu 22.04 |
||
| 4 | 3 | Дмитрий Курнаев | |
| 5 | p. Здесь вопросов быть не должно |
||
| 6 | 4 | Дмитрий Курнаев | |
| 7 | h2. II - Настройка сервера сигнализации (High-performance backend) для Nextcloud Talk |
||
| 8 | 5 | Дмитрий Курнаев | |
| 9 | h3. Введение |
||
| 10 | 6 | Дмитрий Курнаев | |
| 11 | 9 | Дмитрий Курнаев | p. Установка выполнена на ВМ: 4 CPU, 16 GB RAM, 60GB, ОС Ubuntu 22.04 |
| 12 | 7 | Дмитрий Курнаев | Должны быть включены следующие порты: |
| 13 | |||
| 14 | 22 (ваш SSH порт) |
||
| 15 | 80 (TCP) |
||
| 16 | 443 (TCP) |
||
| 17 | 3478 (UDP и TCP) |
||
| 18 | |||
| 19 | 11 | Дмитрий Курнаев | h3. 1. Подготовка системы |
| 20 | 12 | Дмитрий Курнаев | |
| 21 | 15 | Дмитрий Курнаев | p. sudo apt update && apt upgrade |
| 22 | sudo apt install make protobuf-compiler git python3 docker.io zip unzip |
||
| 23 | 16 | Дмитрий Курнаев | |
| 24 | h3. 2.Установка последней версии Go |
||
| 25 | 17 | Дмитрий Курнаев | |
| 26 | 18 | Дмитрий Курнаев | p. 2.1. wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz - качаем архив |
| 27 | |||
| 28 | 19 | Дмитрий Курнаев | p. 2.2. sha256sum go1.21.3.linux-amd64.tar.gz - проверяем хэш |
| 29 | 18 | Дмитрий Курнаев | |
| 30 | 19 | Дмитрий Курнаев | p. 2.3. sudo tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz - разворачиваем архив |
| 31 | 18 | Дмитрий Курнаев | |
| 32 | 19 | Дмитрий Курнаев | p. 2.4. sudo nano ~/.profile |
| 33 | 20 | Дмитрий Курнаев | |
| 34 | 27 | Дмитрий Курнаев | p. 2.5 Правим переменные окружения |
| 35 | export PATH=$PATH:/usr/local/go/bin - здесь лежит компилятор Golang |
||
| 36 | export GOPATH=/opt/extcloud-spreed-signaling-<version_name> - рабочая директория (должна совпадать с пунктом 6.5) |
||
| 37 | export PATH=/opt/extcloud-spreed-signaling-<version_name>/bin - здесь будет бинарный файл после компиляции |
||
| 38 | source ~/.profile - перечитываем переменные из профиля |
||
| 39 | 20 | Дмитрий Курнаев | |
| 40 | p. 2.6. mkdir $HOME/goproject - создаем рабочую директорию |
||
| 41 | |||
| 42 | p. 2.7. go version - проверяем версию |
||
| 43 | |||
| 44 | h3. 3. Настройка NATS сервера |
||
| 45 | 21 | Дмитрий Курнаев | |
| 46 | p. 3.1. docker pull nats:latest - стягиваем образ |
||
| 47 | |||
| 48 | p. 3.2. docker run -d --name nats-server -p 4222:4222 -ti nats:latest - запускаем в фоне на порту 4222 |
||
| 49 | |||
| 50 | 22 | Дмитрий Курнаев | h3. 4. Установка Janus |
| 51 | |||
| 52 | p. 4.1. sudo apt install janus - ставим |
||
| 53 | |||
| 54 | p. 4.2. systemctl enable janus - добавляем в автозагрузку |
||
| 55 | |||
| 56 | p. 4.3. systemctl status janus - проверям статус |
||
| 57 | |||
| 58 | p. 4.4. openssl rand -hex 8 - генерим ключ |
||
| 59 | |||
| 60 | p. 4.5. sudo nano /etc/janus/janus.jcfg - в разделе NAT находим раскомментим "full_trickle = true" и добавим turn_rest_api_key = <сгенерированый_ранее_ключ> |
||
| 61 | |||
| 62 | p. 4.6. sudo nano /etc/janus/janus.transport.http.jcfg - раскомментим "interface = eth0" и заменим "eth0" на "lo" |
||
| 63 | |||
| 64 | p. 4.7. sudo nano /etc/janus/janus.transport.websockets.jcfg - раскомментим "interface_ws = eth0" и заменим "eth0" на "lo" |
||
| 65 | |||
| 66 | p. 4.8. sudo systemctl restart janus - рестартуем |
||
| 67 | |||
| 68 | h3. 5. Установка coTURN |
||
| 69 | |||
| 70 | 23 | Дмитрий Курнаев | p. 5.1. sudo apt install coturn - устанавливаем |
| 71 | 21 | Дмитрий Курнаев | |
| 72 | 23 | Дмитрий Курнаев | p. 5.2. systemctl enable coturn - добавляем в автозагрузку |
| 73 | 21 | Дмитрий Курнаев | |
| 74 | 23 | Дмитрий Курнаев | p. 5.3. cp /etc/turnserver.conf /etc/turnserver.conf_BAK - бэкапим дефолтную конфигурацию |
| 75 | 21 | Дмитрий Курнаев | |
| 76 | 23 | Дмитрий Курнаев | p. 5.4. openssl rand -hex 16 - генерим ключ |
| 77 | 21 | Дмитрий Курнаев | |
| 78 | 23 | Дмитрий Курнаев | p. 5.5. sudo nano /etc/turnserver.conf - заменяем содержимое следующим: |
| 79 | |||
| 80 | listening-port=3478 |
||
| 81 | fingerprint |
||
| 82 | use-auth-secret |
||
| 83 | static-auth-secret=<key_created_above> |
||
| 84 | realm=talk.hackerspace.ru |
||
| 85 | total-quota=100 |
||
| 86 | bps-capacity=0 |
||
| 87 | stale-nonce |
||
| 88 | 1 | Дмитрий Курнаев | no-multicast-peers |
| 89 | |||
| 90 | 23 | Дмитрий Курнаев | p. 5.6. sudo systemctl restart coturn - рестартуем |
| 91 | |||
| 92 | 27 | Дмитрий Курнаев | p. 5.7. Пробрасываем порт3478 на маршрутере |
| 93 | |||
| 94 | 1 | Дмитрий Курнаев | h3. 6. Загрузка сервера сигнализации |
| 95 | 23 | Дмитрий Курнаев | |
| 96 | 27 | Дмитрий Курнаев | p. 6.1. cd /opt - перемещаемся в каталог |
| 97 | 1 | Дмитрий Курнаев | |
| 98 | 27 | Дмитрий Курнаев | p. 6.2. sudo wget https://github.com/strukturag/nextcloud-spreed-signaling/archive/refs/tags/v<version_name>.zip - скачиваем архив с нужной версией |
| 99 | 1 | Дмитрий Курнаев | |
| 100 | 27 | Дмитрий Курнаев | p. 6.3. unzip v1.2.2.zip - распаковываем архив |
| 101 | 26 | Дмитрий Курнаев | |
| 102 | 27 | Дмитрий Курнаев | p. 6.4. rm v1.2.2.zip - удаляем архив |
| 103 | 1 | Дмитрий Курнаев | |
| 104 | 27 | Дмитрий Курнаев | p. 6.5. chown -R boniq:boniq nextcloud-spreed-signaling-<version_name> - устанавливаем владельцем текущего пользователя (рекурсивно) |
| 105 | 1 | Дмитрий Курнаев | |
| 106 | 27 | Дмитрий Курнаев | p. 6.6. cd nextcloud-spreed-signaling-<version_name> - переходим в директорию с проектом |
| 107 | 1 | Дмитрий Курнаев | |
| 108 | 27 | Дмитрий Курнаев | p. 6.7. make build - компилируем сервер |
| 109 | 1 | Дмитрий Курнаев | |
| 110 | 27 | Дмитрий Курнаев | p. 6.8. cp bin/signaling /usr/bin/ - копируем исполняемый файл сервера |
| 111 | 1 | Дмитрий Курнаев | |
| 112 | 27 | Дмитрий Курнаев | p. 6.9. sudo mkdir /etc/signaling - создаем директорию для хранения кофигов сервера |
| 113 | 1 | Дмитрий Курнаев | |
| 114 | 27 | Дмитрий Курнаев | p. 6.10. cp server.conf.in /etc/signaling/server.conf - копируем дефолтный конфиг |
| 115 | 1 | Дмитрий Курнаев | |
| 116 | 27 | Дмитрий Курнаев | h3. 7. Подготовка сервера сигнализации |
| 117 | 1 | Дмитрий Курнаев | |
| 118 | 27 | Дмитрий Курнаев | p. 7.1. groupadd --system signaling - добавляем группу |
| 119 | 1 | Дмитрий Курнаев | |
| 120 | 27 | Дмитрий Курнаев | p. 7.2. useradd --system --gid signaling --shell /usr/sbin/nologin --comment "Standalone signaling server for Nextcloud Talk." signaling - создаем пользователя signaling, добавляемв группу, запрещаем вход |
| 121 | 1 | Дмитрий Курнаев | |
| 122 | 27 | Дмитрий Курнаев | p. 7.3. chmod 600 /etc/signaling/server.conf - присваиваем права |
| 123 | 1 | Дмитрий Курнаев | |
| 124 | 27 | Дмитрий Курнаев | p. 7.4. chown signaling:signaling /etc/signaling/server.conf - делаем владельцем |
| 125 | |||
| 126 | p. 7.5. cp /opt/nextcloud-spreed-signaling-<version_name>/dist/init/systemd/signaling.service /etc/systemd/system/signaling.service - делаем запуск в качестве демона |
||
| 127 | |||
| 128 | p. 7.6. sudo nano /etc/systemd/system/signaling.service открываем демона на редактирование |
||
| 129 | |||
| 130 | p. 7.7. After=janus.service - вставляем после описания (строка 2) |
||
| 131 | |||
| 132 | p. 7.8. systemctl daemon-reload - перезагружаем демона |
||
| 133 | |||
| 134 | h3. 8. Настройка сервера сигнализации |
||
| 135 | |||
| 136 | p. 8.1. openssl rand -hex 16 - генерим ключ (нужно создать 4 ключа) |
||
| 137 | |||
| 138 | p. 8.2. nano /etc/signaling/server.conf - открываем на редактирование конфигурационный файл |
||
| 139 | |||
| 140 | p. 8.3. Раскщмментирываем/изменяем следующие параметры: |
||
| 141 | |||
| 142 | [http] |
||
| 143 | listen = 127.0.0.1:8080 |
||
| 144 | [sessions] |
||
| 145 | hashkey = <ключ1_из_п8.1> |
||
| 146 | blockkey = <ключ2_из_п8.1> |
||
| 147 | [clients] |
||
| 148 | internalsecret = <ключ3_из_п8.1> |
||
| 149 | [backend] |
||
| 150 | backends = backend-1 |
||
| 151 | [backend-1] |
||
| 152 | url = https://cloud.krovelson.ru |
||
| 153 | secret = <ключ4_из_п8.1> |
||
| 154 | [nats] |
||
| 155 | url = nats://localhost:4222 |
||
| 156 | [mcu] |
||
| 157 | type = janus |
||
| 158 | url = ws://127.0.0.1:8188 |
||
| 159 | [turn] |
||
| 160 | apikey = <ключ_из_конфы_janus> |
||
| 161 | secret = <ключ_из_конфы_turn_сервера> |
||
| 162 | servers = turn:127.0.0.1:3478?transport=udp,turn:127.0.0.1:3478?transport=tcp |
||
| 163 | 28 | Дмитрий Курнаев | |
| 164 | 27 | Дмитрий Курнаев | p. 8.4. systemctl enable signaling - делаем автозагрузку сигнал-сервера |
| 165 | |||
| 166 | p.8.5. systemctl start signaling - стартуем его |
||
| 167 | |||
| 168 | h3. 9. Прокси-сервер |
||
| 169 | |||
| 170 | p. 9.1. sudo apt install apache2 - устанавливаем apache |
||
| 171 | |||
| 172 | p. 9.2. a2enmod ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env expires - определяем функционал |
||
| 173 | |||
| 174 | p. 9.3. systemctl restart apache2 - рестартуем |
||
| 175 | |||
| 176 | p. 9.4. systemctl enable apache2 - делаем автозагрузку |
||
| 177 | |||
| 178 | p. 9.4. rm /var/www/html/index.html - удаляем тестовую страницу |
||
| 179 | |||
| 180 | p. 9.5. cd /etc/apache2/sites-available/ - переходим в директорию настроки сайтов |
||
| 181 | |||
| 182 | p. 9.6. nano signaling.conf - создаем файл конфигурации для сайта |
||
| 183 | |||
| 184 | p. 9.7. Наполняем его содержимым: |
||
| 185 | <VirtualHost *:80> |
||
| 186 | ServerName talk.krovelson.ru |
||
| 187 | |||
| 188 | DocumentRoot /var/www/html |
||
| 189 | |||
| 190 | <Directory "/var/www/html"> |
||
| 191 | AllowOverride All |
||
| 192 | Options -Indexes +FollowSymLinks |
||
| 193 | </Directory> |
||
| 194 | |||
| 195 | ErrorLog /var/log/apache2/signaling_error.log |
||
| 196 | </VirtualHost> |
||
| 197 | |||
| 198 | p. 9.8. a2dissite 000-default.conf - отключаем дефолтный сайт |
||
| 199 | |||
| 200 | p. 9.9. a2ensite signaling.conf - включаем новый сайт |
||
| 201 | |||
| 202 | p.9.10. apachectl -t - проверяем конфу |
||
| 203 | |||
| 204 | p.9.11. systemctl restart apache2 - перезапускаем apache |
||
| 205 | |||
| 206 | h.3 10. SSL |
||
| 207 | |||
| 208 | p. 10.1. apt install certbot - ставим бота |
||
| 209 | |||
| 210 | p. 10.2. certbot certonly --webroot -w /var/www/html -d talk.krovelson.ru - получаем сертификат (прим.: перед этим нужно пробросить 80 порт) |
||
| 211 | |||
| 212 | h3. 11. Придулываем сертификат |
||
| 213 | |||
| 214 | p. 11.1. nano signaling.conf - открываем конфиг на редактирование |
||
| 215 | |||
| 216 | p. 11.2. Приводим к такому виду: |
||
| 217 | |||
| 218 | <VirtualHost *:443> |
||
| 219 | ServerName talk.krovelson.ru |
||
| 220 | |||
| 221 | SSLProtocol all -SSLv2 -SSLv3 |
||
| 222 | 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 |
||
| 223 | SSLHonorCipherOrder on |
||
| 224 | SSLCompression off |
||
| 225 | |||
| 226 | ErrorLog /var/log/apache2/signaling_error.log |
||
| 227 | |||
| 228 | SSLEngine on |
||
| 229 | SSLCertificateKeyFile /etc/letsencrypt/live/talk.krovelson.ru/privkey.pem |
||
| 230 | SSLCertificateFile /etc/letsencrypt/live/talk.krovelson.ru/fullchain.pem |
||
| 231 | |||
| 232 | ProxyPass "/standalone-signaling/" "ws://127.0.0.1:8080/" |
||
| 233 | |||
| 234 | RewriteEngine On |
||
| 235 | RewriteRule ^/standalone-signaling/spreed/$ - [L] |
||
| 236 | RewriteRule ^/standalone-signaling/api/(.*) http://127.0.0.1:8080/api/$1 [L,P] |
||
| 237 | </VirtualHost> |
||
| 238 | |||
| 239 | p. 11.3. apachectl -t - тестим конфиг |
||
| 240 | |||
| 241 | p. 11.4. systemctl restart apache2 - перезапускаем apache |
||
| 242 | |||
| 243 | h3. 12. Настройка NextClud |
||
| 244 | |||
| 245 | p. 12.1. Переходим https://cloud.krovelson.ru/index.php/settings/admin/talk |
||
| 246 | |||
| 247 | p. 12.2. "URL высокопроизводительного сервера" = https://talk.krovelson.ru/standalone-signaling/ |
||
| 248 | |||
| 249 | p. 12.3. "Проверять SSL" = V |
||
| 250 | |||
| 251 | p. 12.4. "Общая секретная фраза" = <токен_из_конф_файла_signaling>>beckend-1>>secret> |
||
| 252 | |||
| 253 | p.12.5. Сервер STUN >> Добавить talk.krovelson.ru:443 |
||
| 254 | |||
| 255 | p.12.6. Добавляем TURN-серверы: |"turn: и turns" | talk.krovelson.ru:3478 | <токен_из_конффайла_CoTURN | UDP/TCP> |