Домен и SSL — Nginx (опционально)
Если нужен собственный домен и HTTPS, настройте Nginx как обратный прокси перед SaveTest.
Nginx можно запускать любым способом: как системный пакет на хосте или как отдельный контейнер — это не принципиально. Главное, чтобы он проксировал трафик на ваш frontend SaveTest. По умолчанию используется порт 8080.
Установка Nginx
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install nginx
# CentOS/RHEL
sudo yum install nginx
Пример server
Файл /etc/nginx/sites-available/savetest или /etc/nginx/conf.d/savetest.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream savetest {
server localhost:8080;
keepalive 32;
}
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 1g;
proxy_connect_timeout 600;
proxy_send_timeout 600;
client_body_timeout 600;
location / {
proxy_pass http://savetest;
proxy_http_version 1.1;
# Критически важно для WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Увеличенные таймауты для WebSocket
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
# Отключаем буферизацию для WebSocket
proxy_buffering off;
}
}
Критичные параметры в конфиге прокси:
proxy_set_header Upgradeиproxy_set_header Connection— обязательны для WebSocket.proxy_read_timeout,proxy_send_timeoutиproxy_buffering off— нужны для стабильной работы долгих WebSocket-соединений.client_max_body_size,proxy_connect_timeout,proxy_send_timeout,client_body_timeout— важны для загрузки больших файлов (например, архивов Allure).
MCP (в рекомендуемом стеке)
Путь /mcp проксируется внутри frontend-контейнера на mcp-server:3000. Внешний Nginx достаточно направить весь трафик на frontend:8080 — отдельный location /mcp на хосте не нужен.
LiveKit
Голос в CallBox требует контейнер livekit и доступ клиентов к WebRTC-портам в обход основного Nginx:
| Протокол | Порт(ы) | Назначение |
|---|---|---|
| TCP | 7880 | WebSocket / сигналинг |
| TCP | 7881 | ICE/TCP fallback |
| UDP | 50000–50100 | Медиа (аудио) |
Пробросьте эти порты на хост с контейнером livekit. В .env задайте LIVEKIT_WS_URL (адрес, с которого браузер подключается к сигналингу) и LIVEKIT_RTC_NODE_IP — публичный IP для ICE.
Для wss:// на отдельном поддомене (например calls.example.com) можно добавить в Nginx:
upstream livekit_signaling {
server localhost:7880;
}
server {
listen 443 ssl http2;
server_name calls.example.com;
ssl_certificate /etc/letsencrypt/live/calls.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/calls.example.com/privkey.pem;
location / {
proxy_pass http://livekit_signaling;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_buffering off;
}
}
UDP-порты LiveKit Nginx не проксирует — их нужно открыть на фаерволе напрямую.
Выпуск сертификата Let's Encrypt
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
sudo certbot renew --dry-run
Активация конфига
sudo ln -s /etc/nginx/sites-available/savetest /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
После перехода на внешний домен и HTTPS:
docker compose restart backend