Skip to content

Развертывание VideoGrace Server на VPS со своим доменом и Let's Encrypt

Эта инструкция описывает типовой сценарий установки VideoGrace Server на VPS в облаке, когда пользователи подключаются к серверу по собственному домену, например vc.example.com, а TLS-сертификат выпускается через Let's Encrypt.

Подход подходит для публичного сервера видеоконференций, тестового стенда, пилотного внедрения и небольшой on-premise-инсталляции в облаке. Для закрытого корпоративного контура без публичного DNS используйте внутренний домен и корпоративный CA либо автогенерируемый сертификат VideoGrace.

Что получится

После настройки:

  • панель администратора и web-клиент будут доступны по адресу https://vc.example.com;
  • клиенты смогут скачивать преднастроенный инсталлятор со страницы https://vc.example.com/install;
  • браузеры будут доверять сертификату без ручной установки корневого CA;
  • медиа будет идти через UDP-порты VideoGrace, а при недоступности UDP - через WSS на TCP-порту сервера.

Требования

Перед началом подготовьте:

  • VPS с публичным IPv4-адресом;
  • домен или поддомен, например vc.example.com;
  • root-доступ или пользователя с sudo;
  • дистрибутив VideoGrace Server для Linux или Docker-образ VideoGrace Server;
  • открытые входящие порты в firewall облачного провайдера и в ОС.

Минимально нужны:

Назначение Порт Протокол
Выпуск и продление Let's Encrypt по HTTP-01 80 TCP
Панель, web-клиент, WebSocket/WSS fallback 443 TCP
Основные AV-трансляторы 5060-5063 UDP

Если в настройках сервера задано больше AV-трансляторов, откройте весь диапазон UDP-портов, который используется трансляторами. Подробнее см. требования к сети и обеспечение доступности сервиса.

1. Настройте DNS

Создайте A-запись:

vc.example.com.  A  203.0.113.10

Если на VPS не настроен IPv6, не добавляйте AAAA-запись. Если AAAA уже есть, она должна указывать на рабочий IPv6-адрес этого же сервера, иначе часть клиентов и Let's Encrypt могут пытаться подключаться по нерабочему IPv6.

Проверьте резолвинг:

dig +short vc.example.com

2. Откройте порты

На Ubuntu/Debian с ufw:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5060:5063/udp
sudo ufw status

Если облачный провайдер использует отдельные security groups, откройте те же порты в панели провайдера. Частая ошибка - открыть порты в ОС, но оставить закрытыми правила облачного firewall.

3. Установите VideoGrace Server

Установите сервер по обычной Linux-инструкции:

wget https://videograce.ru/download/VideoGraceServer-2.5.251116-x64.tar.bz2
tar vxf VideoGraceServer-2.5.251116-x64.tar.bz2
cd VideoGraceServer-2.5.251116-x64
sudo ./install.sh

После установки сервис запускается как systemd-служба vgserver, а конфигурация находится в:

/opt/VideoGrace/Server/vgserver.conf

4. Выпустите сертификат Let's Encrypt

Установите certbot:

sudo apt update
sudo apt install -y certbot

Выпустите сертификат для вашего домена:

sudo certbot certonly --standalone -d vc.example.com --agree-tos -m admin@example.com --no-eff-email

Для HTTP-01 challenge порт 80/tcp должен быть доступен из интернета. Если порт 80 закрыт политиками безопасности, используйте DNS-challenge у вашего DNS-провайдера.

После выпуска сертификаты будут доступны в:

/etc/letsencrypt/live/vc.example.com/fullchain.pem
/etc/letsencrypt/live/vc.example.com/privkey.pem

5. Пропишите домен и сертификат в VideoGrace Server

Откройте конфиг:

sudo nano /opt/VideoGrace/Server/vgserver.conf

Укажите домен в секции Network и пути к сертификату в секции Security:

[Network]
Address = vc.example.com
Port = 443
UseIPv6 = 1

[Security]
Certs = /opt/VideoGrace/Server/certs
Cert = /etc/letsencrypt/live/vc.example.com/fullchain.pem
PrivKey = /etc/letsencrypt/live/vc.example.com/privkey.pem

Важно: значение Address должно совпадать с доменом в сертификате. При старте сервер проверяет сертификат для Network.Address; если сертификат не подходит, будет использован автогенерируемый сертификат из локального CA.

Перезапустите сервис:

sudo systemctl restart vgserver
sudo systemctl status vgserver --no-pager

Проверьте последние сообщения журнала:

sudo journalctl -u vgserver -n 100 --no-pager

В логе должна быть строка о старте TLS с вашим сертификатом.

6. Проверьте доступ извне

Откройте в браузере:

https://vc.example.com

Затем проверьте страницу инсталлятора клиента:

https://vc.example.com/install

Проверить сертификат из консоли можно так:

openssl s_client -connect vc.example.com:443 -servername vc.example.com </dev/null | openssl x509 -noout -subject -issuer -dates

Если сайт открывается локально на VPS, но не открывается с внешнего компьютера, проверьте:

  • DNS-запись указывает на правильный публичный IP;
  • порт 443/tcp открыт в firewall ОС;
  • порт 443/tcp открыт в security group облачного провайдера;
  • VideoGrace Server слушает порт 443;
  • на сервере нет другого процесса, который занял порт 443.

7. Настройте автопродление сертификата

Certbot обычно ставит systemd timer для автоматического продления. Проверьте:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Чтобы VideoGrace Server перечитывал сертификат после продления, добавьте deploy hook:

sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy
sudo tee /etc/letsencrypt/renewal-hooks/deploy/restart-vgserver.sh >/dev/null <<'EOF'
#!/bin/sh
systemctl restart vgserver
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-vgserver.sh

Вариант с Docker

Для Docker-сценария базовая установка описана в разделе Установка Docker контейнера. Отличие в том, что сертификаты должны быть доступны внутри контейнера.

В штатном vgserver-docker-run.sh каталог хоста:

/opt/VideoGrace/Server/certs

монтируется внутрь контейнера как:

/home/vg_server/certs

В скрипте запуска укажите домен:

ADDRESS="vc.example.com"

После выпуска Let's Encrypt скопируйте сертификаты в каталог, который монтируется в контейнер:

sudo install -m 0644 /etc/letsencrypt/live/vc.example.com/fullchain.pem /opt/VideoGrace/Server/certs/server.crt
sudo install -m 0600 /etc/letsencrypt/live/vc.example.com/privkey.pem /opt/VideoGrace/Server/certs/server.key

Внутренние пути в скрипте запуска должны оставаться такими:

CERT="/home/vg_server/certs/server.crt"
PRIV_KEY="/home/vg_server/certs/server.key"

После этого перезапустите контейнер:

sudo docker restart vgserver

Для автопродления добавьте deploy hook, который копирует новые файлы и перезапускает контейнер:

sudo tee /etc/letsencrypt/renewal-hooks/deploy/restart-vgserver-docker.sh >/dev/null <<'EOF'
#!/bin/sh
set -e
DOMAIN="vc.example.com"
install -m 0644 "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/VideoGrace/Server/certs/server.crt
install -m 0600 "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/VideoGrace/Server/certs/server.key
docker restart vgserver
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-vgserver-docker.sh

Типовые проблемы

Симптом Что проверить
Let's Encrypt не выпускает сертификат DNS A-запись, доступность 80/tcp, отсутствие неверной AAAA-записи
Браузер показывает недоверенный сертификат Network.Address, Security.Cert, Security.PrivKey, журнал vgserver
Панель открывается, но конференции нестабильны UDP-порты трансляторов, firewall провайдера, требования к сети
Клиенты подключаются по IP вместо домена Значение Address в vgserver.conf и адрес в клиентском инсталляторе
После продления сертификата браузер видит старый сертификат Наличие deploy hook и перезапуск vgserver после certbot renew

Далее: Первоначальная настройка