Docker + Caddy

Caddy проще, чем Nginx, потому что он может автоматически запрашивать сертификаты.

Вам необходимо сначала запустить контейнер проекта, а затем установить и настроить Caddy, иначе запрос сертификата может завершиться неудачей.

1. Копирование базовой конфигурации

Ниже приведена базовая конфигурация для VoceSpace. Вам необходимо скопировать эту конфигурацию перед запуском контейнера и указать её при запуске.

Настройки по умолчанию: "key": "devkey", "secret": "secret" работают нормально. Однако, если вы хотите повысить безопасность и стабильность, вы можете сгенерировать пару ключ/секрет на размещенном сервере LiveKit.

(Необязательно) Как получить key и secret?

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

Запуск контейнера

Вам необходимо сначала запустить контейнер проекта, а затем установить и настроить Caddy, иначе запрос сертификата может завершиться неудачей.

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. Установка и настройка Caddy

INFO

Ниже приведен метод установки для Ubuntu/Debian

Для других типов обратитесь к: Caddy install

3.1 Установка Caddy

1sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
2curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
3curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
4sudo apt update
5sudo apt install caddy

3.2 Настройка Caddy

Caddy поддерживает несколько способов настройки, а также напрямую поддерживает использование конфигурационных файлов в стиле nginx.

WARNING

Пожалуйста, убедитесь, что вы приобрели доменное имя и выполнили DNS-разрешение

1vim /etc/caddy/Caddyfile
1your.server.name {  # modify ⚠️
2    # webrtc
3    handle /rtc* {
4        reverse_proxy localhost:7880 {
5            header_up Host {host}
6            header_up Upgrade {http.request.header.Upgrade}
7            header_up Connection {http.request.header.Connection}
8            header_up X-Real-IP {remote_host}
9            header_up X-Forwarded-For {remote_host}
10            header_up X-Forwarded-Proto {scheme}
11        }
12    }
13
14    handle /socket.io/* {
15        reverse_proxy localhost:3000 {
16            header_up Host {host}
17            header_up Upgrade {http.request.header.Upgrade}
18            header_up Connection {http.request.header.Connection}
19            header_up X-Real-IP {remote_host}
20            header_up X-Forwarded-For {remote_host}
21            header_up X-Forwarded-Proto {scheme}
22        }
23    }
24
25    # main app https
26    handle {
27        reverse_proxy localhost:3000 {
28            header_up Host {host}
29            header_up Upgrade {http.request.header.Upgrade}
30            header_up Connection {http.request.header.Connection}
31            header_up X-Real-IP {remote_host}
32            header_up X-Forwarded-For {remote_host}
33            header_up X-Forwarded-Proto {scheme}
34        }
35    }
36
37    # log optional
38    #log {
39    #    output file /var/log/caddy/your.server.name.log
40    #    level DEBUG
41    #}
42}

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

Перезапуск Caddy и автозапуск при загрузке

1systemctl stop caddy
2systemctl enabled caddy
3systemctl start caddy

Инструкции по работе с облачными серверами

Настройка групп безопасности/брандмауэров

При использовании облачных серверов, таких как 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

Перезапуск Caddy и автозапуск при загрузке

1systemctl stop caddy
2systemctl enabled caddy
3systemctl start caddy