# 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