Files
akademiawodociagowca/.env.production.example
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

179 lines
7.1 KiB
Bash

# Konfiguracja instancji produkcyjnej.
#
# Skopiuj do .env.production i uzupelnij. Plik z realnymi wartosciami NIE trafia
# do repozytorium i nie moze byc kopiowany miedzy klientami.
#
# cp .env.production.example .env.production
# chmod 600 .env.production
#
# Wartosci sekretow sa celowo puste. Aplikacja nie wystartuje bez JWT_SECRET,
# a pozostale puste sekrety uniemozliwia dzialanie odpowiednich funkcji.
# =============================================================================
# BAZA DANYCH
# =============================================================================
# Nazwa bazy tworzonej przy pierwszym starcie kontenera postgres.
DB_NAME=webinar
# Uzytkownik bazy.
DB_USER=webinar
# Haslo uzytkownika bazy. WYMAGANE. Wygeneruj losowe, na przyklad:
# openssl rand -base64 24
# Baza nie jest wystawiona poza siec Dockera, ale haslo i tak musi byc mocne.
DB_PASSWORD=
# =============================================================================
# JWT
# =============================================================================
# Sekret podpisujacy tokeny. WYMAGANE, minimum 32 znaki.
# Aplikacja NIE WYSTARTUJE bez tej wartosci ani z krotsza niz 32 znaki.
# Nie da sie go zmienic przez panel, wylacznie tutaj. Wygeneruj:
# openssl rand -base64 48
# Zmiana sekretu uniewaznia wszystkie wydane tokeny, czyli wylogowuje wszystkich.
JWT_SECRET=
# Czas waznosci tokenu w minutach.
JWT_EXPIRATION_MINUTES=120
# =============================================================================
# PIERWSZE KONTO ADMINISTRATORA
# =============================================================================
# Uzywane tylko przy pierwszym starcie, gdy tabela users jest pusta.
# Po utworzeniu konta te zmienne nie maja juz znaczenia.
# Adres e-mail pierwszego administratora.
ADMIN_EMAIL=
# Haslo pierwszego administratora. Minimum 10 znakow.
# Gdy zostawisz puste, haslo zostanie wylosowane i wypisane JEDEN RAZ w logu:
# docker compose -f docker-compose.prod.yml logs backend | grep -A6 "UTWORZONO PIERWSZE KONTO"
# Zalecane: zostaw puste i odczytaj z logu, wtedy haslo nie lezy w pliku.
ADMIN_PASSWORD=
# =============================================================================
# MINIO
# =============================================================================
# Nagrania, materialy i zalaczniki. Nie jest wystawione poza siec Dockera.
# Klucz dostepu, jednoczesnie login do konsoli MinIO. WYMAGANE.
MINIO_ACCESS_KEY=
# Klucz tajny, jednoczesnie haslo do konsoli. WYMAGANE, minimum 8 znakow.
# Wygeneruj: openssl rand -base64 24
MINIO_SECRET_KEY=
# Bucket na pliki instancji.
MINIO_BUCKET=webinar
# =============================================================================
# APLIKACJA
# =============================================================================
# Publiczny adres instancji, z protokolem, bez ukosnika na koncu.
# Uzywany do budowania linkow w mailach i w zajawkach dla komunikatorow.
# Musi byc adresem HTTPS widocznym dla uczestnika, nie adresem wewnetrznym.
# Przyklad: https://webinary.klient.pl
APP_PUBLIC_URL=
# Dozwolone originy CORS, rozdzielone przecinkiem. Zwykle to samo co APP_PUBLIC_URL.
CORS_ALLOWED_ORIGINS=
# Port, na ktorym frontend nasluchuje na petli lokalnej serwera.
# Reverse proxy klienta przekazuje tu ruch. Zmien, gdy port jest zajety.
FRONTEND_PORT_EXPOSED=8081
# Znacznik wersji obrazow, przydatny przy wycofywaniu zmian.
APP_VERSION=latest
# =============================================================================
# POCZTA I BRAMKA SMS
# =============================================================================
#
# Tych ustawien NIE MA w tym pliku i nie nalezy ich tu dodawac.
#
# Konfiguracja SMTP i bramki SMS odbywa sie wylacznie przez panel
# administracyjny, w sekcji Ustawienia. Wartosci trafiaja do tabeli app_settings
# i maja pierwszenstwo przed zmiennymi srodowiskowymi. Haslo SMTP i klucz API
# bramki sa oznaczone jako sekrety: nigdy nie wracaja w odpowiedzi API, a puste
# pole w formularzu oznacza brak zmiany.
#
# Powody, dla ktorych nie trzymamy ich w .env:
# - zmiana nie wymaga restartu kontenera ani dostepu do serwera,
# - klient moze poprawic konfiguracje poczty samodzielnie,
# - sekrety nie leza w pliku na dysku obok reszty konfiguracji,
# - panel ma wbudowany test wysylki, ktory od razu pokazuje blad serwera SMTP.
#
# Po pierwszym uruchomieniu: zaloguj sie do panelu, wejdz w Ustawienia,
# uzupelnij sekcje "Konto e-mail (SMTP)" i "Bramka SMS", zapisz, a nastepnie
# uzyj bloku "Test konfiguracji" pod kazda sekcja.
# =============================================================================
# WIDEO
# =============================================================================
# Wybor implementacji VideoProvider. Brak implementacji na tym etapie.
# Domyslny dostawca instancji: NONE, LIVEKIT, JITSI albo DAILY.
# Pojedynczy webinar moze wybrac wlasnego w formularzu.
VIDEO_PROVIDER=NONE
# Adres serwera LiveKit widziany przez PRZEGLADARKE uczestnika: publiczna
# domena z waznym certyfikatem, bo klient laczy sie z nia po wss://.
LIVEKIT_URL=
# Adres widziany przez BACKEND, do wywolan API i nagrywania przez Egress.
# Puste oznacza "ten sam co publiczny". W sieci Dockera podaj `ws://livekit:7880`:
# backend nie musi wtedy wychodzic na zewnatrz i wracac przez nginx po to, zeby
# porozmawiac z kontenerem stojacym obok.
LIVEKIT_INTERNAL_URL=
# -----------------------------------------------------------------------------
# PROFIL LIVEKIT: wlasny serwer wideo
# -----------------------------------------------------------------------------
# Wypelnij wylacznie, gdy stawiasz serwer u siebie:
# docker compose --profile livekit up -d
#
# Klucz i sekret sluza DWOM rzeczom naraz: konfiguruja serwer LiveKit
# i trafiaja do backendu, ktory podpisuje nimi tokeny dostepu oraz zleca
# nagrywanie. Dlatego wystarczy wpisac je TUTAJ, a nie takze w panelu:
# `SettingsService` czyta baze, potem srodowisko, potem wartosc domyslna.
#
# Puste `app_settings` jest przy tym stanem NORMALNYM, a nie brakiem
# konfiguracji: zapytanie do bazy o klucze LIVEKIT nie zwroci niczego takze
# na dzialajacej instancji. Stan faktyczny czyta sie z wypisu
# `SettingsStartupReport` w logu backendu.
LIVEKIT_API_KEY=
LIVEKIT_API_SECRET=
# Porty serwera. UDP jest **glowna droga ruchu audio i wideo**: bez otwarcia
# tego portu uczestnicy dolacza do pokoju, ale nie beda sie slyszec.
# Jeden port UDP dla wszystkich uczestnikow (tryb mux). Dawny zakres
# LIVEKIT_UDP_RANGE konczyl sie po okolo 50 osobach i nie jest juz czytany.
LIVEKIT_PORT=7880
LIVEKIT_TCP_PORT=7881
LIVEKIT_UDP_PORT=7882
# TURN: przekazuje ruch uczestnikom za restrykcyjnym NAT-em, czyli w praktyce
# wiekszosci osob w sieciach firmowych. Bez niego czesc uczestnikow nie
# zobaczy i nie uslyszy nikogo.
TURN_REALM=webinar.twojadomena.pl
TURN_USER=webinar
TURN_PASSWORD=
TURN_MIN_PORT=49160
TURN_MAX_PORT=49200
# =============================================================================
# DOKUMENTACJA I LOGI
# =============================================================================
# Swagger UI. Na produkcji zostaw false.
SWAGGER_ENABLED=false
# Poziom logow calej aplikacji.
LOG_LEVEL_ROOT=INFO
# Poziom logow kodu aplikacji. Na produkcji INFO, DEBUG tylko przy diagnozie.
LOG_LEVEL_APP=INFO