Project

General

Profile

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>