Files
akademiawodociagowca/livekit/livekit.yaml
T
debian c53ad95104
Deploy PROD / deploy (push) Failing after 0s
LiveKit: jeden port UDP dla wszystkich (mux) zamiast zakresu
Zakres port_range 50000-50100 rezerwowal osobny port na kazde polaczenie.
Test z 200 botami wszedl dokladnie w 49, a log serwera pokazal kandydata
UDP tylko przy 52 polaczeniach i TCP przy wszystkich 204: kolejni
uczestnicy dostawali juz tylko TCP. Zmienna UDP_PORT z zakresem nie
wlaczala muxa, bo przegrywala z zakresem z pliku.

Teraz udp_port: 7882 (sprawdzone lokalnie: rtc.portUDP Start 7882, End 0),
nowa zmienna LIVEKIT_UDP_PORT, zeby stara LIVEKIT_UDP_RANGE w .env nie
mogla przywrocic zakresu.

Automatyczne wdrozenie nie dotyka profilu livekit: kontener trzeba
przeladowac recznie.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 09:16:01 +02:00

87 lines
3.7 KiB
YAML

# Konfiguracja serwera LiveKit.
#
# Klucze API nie sa tutaj: podaje je zmienna LIVEKIT_KEYS w docker-compose,
# zeby nie trzymac sekretow w pliku wchodzacym do repozytorium.
port: 7880
rtc:
# JEDEN PORT UDP DLA WSZYSTKICH (tryb mux).
#
# Wczesniej byl tu zakres `port_range_start/end` 50000-50100. W tym trybie
# serwer REZERWUJE OSOBNY PORT NA KAZDE POLACZENIE, a uczestnik ma ich do
# dwoch. Test z botami pokazal skutek: po okolo 50 osobach pula sie konczyla
# i kolejni dostawali juz tylko kandydata TCP na 7881. Przegladarka wchodzi
# wtedy po TCP (zacinajacy sie obraz i dzwiek przy kazdej utracie pakietu),
# klient bez obslugi ICE-TCP nie wchodzi wcale. Zmienna UDP_PORT z zakresem
# NIE wlaczala muxa: przegrywala z zakresem z tego pliku.
#
# W trybie mux wszyscy uczestnicy dziela jeden port, rozrozniani po
# identyfikatorze sesji ICE. Liczba osob nie zalezy juz od liczby portow.
#
# **Serwer NIE rozwija zmiennych srodowiskowych w tym pliku.** Port idzie
# takze zmienna UDP_PORT z docker-compose i ona ma pierwszenstwo, wiec
# instancja z zajetym 7882 zmienia jedna wartosc w .env (LIVEKIT_UDP_PORT).
# **Nie dopisywac tu z powrotem port_range_start/end**: zakres wylacza mux.
#
# Port musi byc otwarty na firewallu. To glowna droga ruchu audio i wideo.
udp_port: 7882
tcp_port: 7881
# Adres, ktory serwer rozglasza uczestnikom jako swoj.
#
# `use_external_ip: true` na produkcji: serwer sam wykrywa adres publiczny,
# bo bez tego rozglaszalby adres wewnetrzny kontenera.
#
# **Przy uruchomieniu lokalnym trzeba to wylaczyc i podac 127.0.0.1**
# zmienna NODE_IP: inaczej serwer rozglasza publiczny adres lacza, a
# przegladarka na tej samej maszynie probuje sie tam polaczyc i nie dochodzi
# do wymiany mediow. Objawia sie to tak, ze uczestnik dolacza do pokoju
# i widzi liste obecnych, ale nie slyszy i nie widzi nikogo.
#
# UWAGA: `use_external_ip: true` **nadpisuje** zmienna NODE_IP. Przy
# uruchomieniu lokalnym trzeba ustawic tu `false`, inaczej serwer i tak
# wykryje publiczny adres lacza i zignoruje 127.0.0.1.
use_external_ip: false
# Kandydaci ICE rozglaszani takze po TCP.
#
# Media ida normalnie po UDP, ale przy uruchomieniu lokalnym w Dockerze
# kontener Egress i przegladarka na hoscie widza serwer pod **roznymi
# adresami**: przegladarka pod 127.0.0.1, Egress pod adresem kontenera.
# Serwer rozglasza jeden adres (NODE_IP), wiec jedna z tych stron nie
# zestawi polaczenia po UDP.
#
# TCP jest tu droga wspolna: dziala niezaleznie od tego, ktory adres
# zostal rozgloszony, bo polaczenie zestawia sie na porcie 7881, do ktorego
# obie strony docieraja. Na produkcji, gdzie serwer ma jeden adres publiczny,
# ta opcja nie jest potrzebna, ale nie szkodzi: TCP zostaje droga zapasowa
# dla uczestnikow za firewallem blokujacym UDP.
use_ice_lite: false
# TURN: przekazywanie ruchu dla uczestnikow za restrykcyjnym NAT-em.
# Serwer coturn stoi obok, w tym samym profilu.
turn:
enabled: false
# Redis: kanal do Egress.
#
# **Wymagany do nagrywania.** Serwer wrzuca tu zadanie nagrania, a Egress je
# odbiera; bez Redisa serwer przyjmuje zadanie, nie ma go komu przekazac
# i nagrywanie konczy sie timeoutem, mimo ze sam serwer dziala poprawnie.
#
# Do samych spotkan Redis nie jest potrzebny: serwer w trybie jednowezlowym
# radzi sobie bez niego. Adres wskazuje usluge z tego samego profilu.
redis:
address: redis:6379
# Logi czyta administrator w terminalu, wiec bez nadmiaru szczegolow.
logging:
level: info
json: false
# Pokoj znika po wyjsciu ostatniego uczestnika. Nie trzymamy pustych pokoi:
# webinar konczy sie raz, a pusty pokoj zajmowalby pamiec do restartu serwera.
room:
empty_timeout: 300
max_participants: 0