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 для развертывания.

местный
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.

Macos
Windows
Linux
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;