Docker + Nginx
В этом руководстве вы узнаете, как развернуть ваше приложение в производственной среде с помощью Docker и Nginx, а также настроить сертификаты HTTPS для обеспечения безопасной связи.
1. Копирование базовой конфигурации
Ниже приведена базовая конфигурация для Vocespace. Вам необходимо скопировать эту конфигурацию перед запуском контейнера и указать её при запуске.
Настройки по умолчанию: "ключ": "devkey", "секрет": "secret" работают нормально. Однако, если вы хотите повысить безопасность и стабильность, вы можете сгенерировать пару ключ/ключ на размещенном сервере LiveKit.
(Необязательно) Как получить ключ и секрет?
1{
2 "livekit": {
3 "key": "devkey",
4 "secret": "secret",
5 "url": "wss://your.server.name" // modify ⚠️
6 },
7 "codec": "vp9",
8 "resolution": "1080p",
9 "maxBitrate": 3000000,
10 "maxFramerate": 30,
11 "priority": "medium",
12 "redis": {
13 "enabled": true,
14 "host": "your.ip", // modify ⚠️
15 "port": 6379,
16 "password": "vocespace",
17 "db": 0
18 },
19 "serverUrl": "your.server.name", // modify ⚠️
20 "hostToken": "vocespace",
21 "license": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImhhbkBwcml2b2NlLmNvbSIsImV4cGlyZXNfYXQiOjQ4OTEzMzQ0MDAsImNyZWF0ZWRfYXQiOjE3MzU2NjA4MDAsImRvbWFpbnMiOiIqIiwibGltaXQiOiJmcmVlIiwiaWQiOiI2NGUyMjYwZS0xMzQwLTQxNjQtOWNmZC0zMGUwMjhlYTg0ZWQifQ.T0vIHUCxv9j75lb92RDDaegpPO9W9hxWEXqZVidwL0E"
22}
WARNING
your.ip: IP-адрес хост-машины пользователя, который можно просмотреть с помощью команды ifconfig | grep inet.
1inet 127.0.0.1 netmask 0xff000000
2inet 192.168.31.138 netmask 0xffffff00 broadcast 192.168.31.255
В этом примере 192.168.31.138 — это IP-адрес вашей хост-машины.
your.server.name: Доменное имя, используемое для развертывания
2. Развертывание приложений с помощью Docker
Получение образов VoceSpace
VoceSpace содержит два типа образов:
- amd:
privoce/vocespace:latest
- arm:
privoce/vocespace:latest_arm
Поэтому для выбора вам необходимо знать текущую архитектуру вашего сервера. См.: справка - просмотр архитектуры вашего Linux
1# amd
2docker pull privoce/vocespace:latest
3# arm
4docker pull privoce/vocespace:latest_arm
Запуск контейнера
Перед настройкой обратного прокси Nginx необходимо запустить контейнер серверной службы.
1docker run -d \
2 -p 3000:3000 \
3 -v ${PWD}/vocespace.conf.json:/app/vocespace.conf.json \
4 --name vocespace \
5 privoce/vocespace:latest
NOTE
-p 3000:3000:Сопоставьте порт 3000 контейнера с портом 3000 хост-машины.
-v ${PWD}/vocespace.conf.json:/app/vocespace.conf.json: Составьте карту конфигурации
--name:Присвоение имени контейнеру упрощает последующее управление.
3. Установка и настройка Nginx
3.1 Установка Nginx и Certbot
Убедитесь, что ваша система обновлена и установлены необходимые пакеты:
1apt update
2apt install nginx certbot python3-certbot-nginx -y
WARNING
- Если вы используете CentOS или другой дистрибутив, отличный от Debian, воспользуйтесь соответствующей командой управления пакетами (например,
yum или dnf).
certbot и python3-certbot-nginx — это инструменты для автоматической настройки HTTPS.
3.2 Настройте файл nginx.conf (глобальная конфигурация, её можно игнорировать).
path:/etc/nginx/nginx.conf
1user nginx;
2worker_processes auto;
3
4error_log /var/log/nginx/error.log warn;
5pid /var/run/nginx.pid;
6
7events {
8 worker_connections 1024;
9}
10
11http {
12 include /etc/nginx/mime.types;
13 default_type application/octet-stream;
14
15 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
16 '$status $body_bytes_sent "$http_referer" '
17 '"$http_user_agent" "$http_x_forwarded_for"';
18
19 access_log /var/log/nginx/access.log main;
20
21 sendfile on;
22 keepalive_timeout 65;
23
24 include /etc/nginx/conf.d/*.conf;
25}
NOTE
- Это глобальная конфигурация, и обычно её не нужно часто менять.
- Рекомендуется включить функцию logrotate для каталога логов, чтобы избежать заполнения дискового пространства.
3.3 Настройка файлов сайта (конфигурация виртуального хоста)
Рекомендуемый путь: /etc/nginx/sites-enabled/vocespace или /etc/nginx/conf.d/vocespace
Для начала выполним простую настройку:
1# Перенаправление HTTP на HTTPS
2server {
3 listen 80;
4 listen [::]:80;
5
6 server_name your.server.name; # modify ⚠️
7
8 location / {
9 return 301 https://$host$request_uri; # modify ⚠️
10 }
11
12 return 404;
13}
3.4 Получение HTTPS-сертификата с помощью Certbot
Убедитесь, что доменное имя правильно преобразуется в IP-адрес сервера в вашем DNS-провайдере.
Команда выдачи сертификата
1certbot --nginx -d your.server.name --register-unsafely-without-email
NOTE
--nginx: Certbot автоматически изменит конфигурацию nginx, чтобы включить HTTPS.
--register-unsafely-without-email:Не указывайте адрес электронной почты. Не рекомендуется для официального использования, рекомендуется добавить --email your@email.com.
Проверьте состояние Nginx и перезапустите его
1nginx -t
2systemctl reload nginx
3.5 Завершите настройку HTTPS.
1# HTTPS Конфигурация обратного прокси
2server {
3 listen 443 ssl;
4 listen [::]:443 ssl;
5
6 server_name your.server.name; # modify ⚠️
7
8 ssl_certificate /etc/letsencrypt/live/your.server.name/fullchain.pem;
9 ssl_certificate_key /etc/letsencrypt/live/your.server.name/privkey.pem;
10 include /etc/letsencrypt/options-ssl-nginx.conf;
11 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
12
13 # Основной сервис приложения (например, веб-интерфейс для внешнего или внутреннего интерфейса).
14 location / {
15 proxy_pass http://127.0.0.1:3000;
16 proxy_http_version 1.1;
17 proxy_set_header Upgrade $http_upgrade;
18 proxy_set_header Connection "Upgrade";
19 proxy_set_header Host $host;
20 proxy_cache_bypass $http_upgrade;
21 }
22
23 # Прокси-сервер WebRTC (порт и путь зависят от проекта)
24 location /rtc {
25 proxy_pass http://127.0.0.1:7880;
26 proxy_http_version 1.1;
27 proxy_set_header Upgrade $http_upgrade;
28 proxy_set_header Connection "Upgrade";
29 proxy_set_header Host $host;
30 }
31
32 # В данном случае можно игнорировать прокси-сервер Socket.IO для обмена данными в реальном времени в nginx.
33 # location /socket.io {
34 # proxy_pass http://127.0.0.1:3000;
35 # proxy_http_version 1.1;
36 # proxy_set_header Upgrade $http_upgrade;
37 # proxy_set_header Connection "Upgrade";
38 # proxy_set_header Host $host;
39 # proxy_set_header X-Real-IP $remote_addr;
40 # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
41 # proxy_set_header X-Forwarded-Proto $scheme;
42 # proxy_cache_bypass $http_upgrade;
43 # }
44}
WARNING
server_name Это должно быть то же доменное имя, что и у сертификата, на который вы фактически подавали заявку.
- Пожалуйста, убедитесь, что файл в каталоге
/etc/letsencrypt/live/your.server.name/ создан.
Конфигурация SSL генерируется программой certbot.
3.6 Запустите и проверьте состояние Nginx.
1# Проверьте правильность настроек.
2nginx -t
3
4# Перезагрузите конфигурацию (рекомендуется) или перезапустите службу.
5systemctl reload nginx
6# or
7systemctl restart nginx
4. Запустите livekit-server
Аналогично локальному развертыванию, для поддержки WebRTC также необходимо запустить livekit-server. Вы можете загрузить и запустить livekit, как при локальном развертывании, или использовать Docker для развертывания.
скачать livekit-server
1curl -sSL https://get.livekit.io | bash
После загрузки сервер обычно будет расположен в /usr/local/bin/livekit-server
Создание конфигурации
Мы предлагаем минимальное руководство по настройке, которое поможет вам быстро развернуть систему. Сначала создайте файл конфигурации vim /etc/livekit.yml
1port: 7880
2bind_addresses:
3 - "0.0.0.0"
4rtc:
5 tcp_port: 7881
6 port_range_start: 50000
7 port_range_end: 60000
8 use_external_ip: true
9 enable_loopback_candidate: false
10# optional
11turn:
12 enabled: false
13 domain: turn.vocespace.xyz
14 tls_port: 5349
15 udp_port: 3478
16 external_tls: true
17keys:
18 devkey: secret
Запуск в фоновом режиме с помощью команды nohup.
С помощью команды nohup вы можете запустить livekit-server в фоновом режиме и выводить логи в файл /usr/local/bin/logs/livekit_output.log для удобного просмотра.
1nohup /usr/local/bin/livekit-server --config /etc/livekit.yml > /usr/local/bin/logs/livekit_output.log 2>&1 &
5. Скачайте и запустите Redis.
1brew install redis
2brew services start redis -- --requirepass "vocespace" --bind 0.0.0.0 --protected-mode no --daemonize yes
Инструкции по работе с облачными серверами
Настройка групп безопасности/брандмауэров
При использовании облачных серверов, таких как Alibaba Cloud, Tencent Cloud и Google Cloud, необходимо настроить группы безопасности/брандмауэры сервера.
| port |
type |
ingress/egress |
allow ip |
| 3000 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 3000 |
tcp |
egress |
0.0.0.0/0 Ipv4 |
| 7880 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 7881 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 80 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 443 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
| 50000~60000 |
udp |
ingress |
0.0.0.0/0 Ipv4 |
| 6379 |
tcp |
ingress |
0.0.0.0/0 Ipv4 |
Дополнительные рекомендации
Автоматическое обновление сертификатов:
``bash
Тест обновления
certbot renew --dry-run
**Открытие портов брандмауэра** (например, с помощью `ufw`):
``bash
ufw allow 'Nginx Full'
Усиление безопасности и принудительное использование HTTPS: Добавьте следующую конфигурацию в nginx.conf:
1ssl_protocols TLSv1.2 TLSv1.3;
2ssl_prefer_server_ciphers on;