Развертывание 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 |
Далее: Первоначальная настройка