c53ad95104
Deploy PROD / deploy (push) Failing after 0s
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>
87 lines
3.7 KiB
YAML
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
|