Project

General

Profile

Wiki » History » Version 27

Дмитрий Курнаев, 07/02/2025 12:38 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
p. 8.4. systemctl enable signaling - делаем автозагрузку сигнал-сервера
164
165
p.8.5. systemctl start signaling - стартуем его
166
167
h3. 9. Прокси-сервер
168
169
p. 9.1. sudo apt install apache2 - устанавливаем apache
170
171
p. 9.2. a2enmod ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env expires - определяем функционал
172
173
p. 9.3. systemctl restart apache2 - рестартуем
174
175
p. 9.4. systemctl enable apache2 - делаем автозагрузку
176
177
p. 9.4. rm /var/www/html/index.html - удаляем тестовую страницу 
178
179
p. 9.5. cd /etc/apache2/sites-available/ - переходим в директорию настроки сайтов
180
181
p. 9.6. nano signaling.conf - создаем файл конфигурации для сайта
182
183
p. 9.7. Наполняем его содержимым:
184
<VirtualHost *:80>
185
	ServerName talk.krovelson.ru
186
187
	DocumentRoot /var/www/html
188
189
	<Directory "/var/www/html">
190
		AllowOverride All
191
		Options -Indexes +FollowSymLinks
192
	</Directory>
193
194
	ErrorLog /var/log/apache2/signaling_error.log
195
</VirtualHost>
196
197
p. 9.8. a2dissite 000-default.conf - отключаем дефолтный сайт
198
199
p. 9.9. a2ensite signaling.conf - включаем новый сайт
200
201
p.9.10. apachectl -t - проверяем конфу
202
203
p.9.11. systemctl restart apache2 - перезапускаем apache
204
205
h.3 10. SSL
206
207
p. 10.1. apt install certbot - ставим бота
208
209
p. 10.2. certbot certonly --webroot -w /var/www/html -d talk.krovelson.ru - получаем сертификат (прим.: перед этим нужно пробросить 80 порт)
210
211
h3. 11. Придулываем сертификат
212
213
p. 11.1. nano signaling.conf - открываем конфиг на редактирование
214
215
p. 11.2. Приводим к такому виду: 
216
217
<VirtualHost *:443>
218
	ServerName talk.krovelson.ru
219
220
	SSLProtocol all -SSLv2 -SSLv3
221
	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
222
	SSLHonorCipherOrder on
223
	SSLCompression off
224
225
	ErrorLog /var/log/apache2/signaling_error.log
226
227
	SSLEngine on
228
	SSLCertificateKeyFile /etc/letsencrypt/live/talk.krovelson.ru/privkey.pem
229
	SSLCertificateFile /etc/letsencrypt/live/talk.krovelson.ru/fullchain.pem
230
231
	ProxyPass "/standalone-signaling/"  "ws://127.0.0.1:8080/"
232
233
    RewriteEngine On
234
    RewriteRule ^/standalone-signaling/spreed/$ - [L]
235
    RewriteRule ^/standalone-signaling/api/(.*) http://127.0.0.1:8080/api/$1 [L,P]
236
</VirtualHost>     
237
238
p. 11.3. apachectl -t - тестим конфиг
239
240
p. 11.4. systemctl restart apache2 - перезапускаем apache
241
242
h3. 12. Настройка NextClud
243
244
p. 12.1. Переходим https://cloud.krovelson.ru/index.php/settings/admin/talk 
245
246
p. 12.2. "URL высокопроизводительного сервера" = https://talk.krovelson.ru/standalone-signaling/
247
248
p. 12.3. "Проверять SSL" = V
249
250
p. 12.4. "Общая секретная фраза" = <токен_из_конф_файла_signaling>>beckend-1>>secret>
251
252
p.12.5. Сервер STUN >> Добавить talk.krovelson.ru:443
253
254
p.12.6. Добавляем TURN-серверы: |"turn: и turns" | talk.krovelson.ru:3478 | <токен_из_конффайла_CoTURN | UDP/TCP>