Dostęp zdalny: logowanie i lista dozwolonych adresów IP

Z tego przewodnika dowiesz się, jak połączyć się z aplikacją Marinara Engine z innego urządzenia: telefonu, laptopa albo kontenera Docker. Opisuje główną opcję, czyli logowanie. Wyjaśnia też listę dozwolonych adresów IP, proxy logowania, HTTPS, sekcję Admin Access (dostęp administracyjny) oraz komunikat CSRF o zablokowanym zapisie. Prawie każde ustawienie z tego przewodnika znajduje się w pliku .env serwera, a nie w aplikacji.

Kilka pojęć, które wracają w całym przewodniku:

Łączenie z dowolnego miejsca przez sieć Tailscale

Tailscale to prywatna sieć dla twoich własnych urządzeń. Użyj jej, żeby otworzyć aplikację Marinara na telefonie albo laptopie, w domu lub poza domem, bez otwierania portów na routerze i bez udostępniania aplikacji Marinara w publicznym internecie. Marinara ufa urządzeniom, które łączą się bezpośrednio przez sieć Tailscale, więc nie musisz ustawiać logowania.

  1. Zainstaluj aplikację Tailscale na komputerze, na którym działa aplikacja Marinara, oraz na drugim urządzeniu. Pobierzesz ją ze strony tailscale.com/download.
  2. Na obu urządzeniach zaloguj się w usłudze Tailscale tym samym kontem.
  3. Uruchom aplikację Marinara za pomocą start.sh, start.bat, start-termux.sh albo instalatora Windows. Te sposoby uruchomienia pozwalają innym urządzeniom się połączyć. Jeśli zamiast tego uruchamiasz pnpm start, najpierw dodaj HOST=0.0.0.0 do pliku .env (zobacz Gdzie znajduje się plik .env).
  4. Ustal adres Tailscale komputera, na którym działa aplikacja Marinara. Otwórz na nim aplikację Tailscale albo uruchom polecenie tailscale ip -4. Adres zaczyna się od 100., na przykład 100.101.102.103.
  5. Na drugim urządzeniu włącz Tailscale i otwórz w przeglądarce adres http://100.101.102.103:7860. Użyj własnego adresu, a także własnej wartości PORT, jeśli ją zmieniono. Marinara otworzy się bez strony logowania.

Jeśli strona się nie wczytuje, sprawdź, czy na obu urządzeniach włączono Tailscale i czy serwer nasłuchuje z ustawieniem HOST=0.0.0.0.

Uwaga: To nie działa w instalacjach w kontenerze Docker. Ruch z sieci Tailscale dociera do kontenera przez bramę sieci Docker, więc Marinara nie widzi, że przyszedł z sieci Tailscale. Najpierw ustaw logowanie (Opcja 1), a potem opublikuj port poza 127.0.0.1.

Ze zdalnego urządzenia kopie zapasowe, importy, aktualizacje i inne ryzykowne działania nadal wymagają sekretu administratora. Zobacz Sekcja Admin Access i działania uprzywilejowane.

Co Marinara blokuje domyślnie

Świeża instalacja aplikacji Marinara odrzuca połączenia z innych urządzeń, dopóki nie skonfigurujesz kontroli dostępu. Chodzi o ochronę danych. Domyślnie zaufane są tylko trzy rodzaje klientów:

  1. Loopback (127.0.0.1 lub ::1), czyli sam komputer z serwerem. Nie liczą się do niego goście przekazywani przez odwrotne proxy albo tunel na tym samym komputerze; zobacz Odwrotne proxy i tunele na tym samym komputerze.
  2. Urządzenia w sieci Tailscale. Tailscale to narzędzie do prywatnych sieci, a jego adresy mieszczą się w zakresie 100.64.0.0/10.
  3. Klienty Docker na tym samym komputerze. Marinara rozpoznaje typowy zakres mostka 172.16.0.0/12 oraz dokładną bramę domyślną kontenera, co obejmuje też Docker Desktop i własne pule adresów.

Wszystko inne, na przykład telefon w tej samej sieci Wi-Fi albo klient z publicznego internetu, jest zablokowane do czasu ustawienia logowania. Zablokowane urządzenie, które otworzy aplikację Marinara w przeglądarce, widzi ciemną stronę konfiguracyjną. Jej tytuł brzmi This Marinara Engine install needs a login before remote devices can connect. Strona ma formularz na jednorazowy kod konfiguracji z logu serwera, więc możesz ustawić logowanie z tego urządzenia.

Bez żadnej zmiany i bez ustawienia hasła Marinara nadal wpuszcza tylko te trzy zaufane źródła. To bezpieczne ustawienie domyślne.

Gdzie znajduje się plik .env

Wszystkie ustawienia dostępu znajdują się w pliku .env w głównym folderze projektu, obok package.json. Jeśli tego pliku jeszcze nie ma, skopiuj przykładowy:

cp .env.example .env

Otwórz plik .env w dowolnym edytorze tekstu. Większość ustawień dostępu działa w ciągu kilku sekund, bez restartu: dotyczy to Basic Auth, listy dozwolonych adresów IP, sekretu administratora i źródeł CSRF. Kilka ustawień niskiego poziomu nadal wymaga restartu, w tym PORT, HOST oraz ścieżki do certyfikatu HTTPS.

Czasem inne urządzenia w ogóle nie docierają do serwera i zamiast błędu 403 dostają przekroczony limit czasu. Wtedy serwer prawdopodobnie nasłuchuje tylko na lokalnym komputerze. Ustaw nasłuchiwanie na wszystkich interfejsach sieciowych:

HOST=0.0.0.0

Programy uruchamiające (start.bat, start.sh) ustawiają HOST=0.0.0.0 za ciebie. Bezpośrednie uruchomienie pnpm start tego nie robi.

Domyślny adres wiązania zależy od sposobu uruchomienia aplikacji Marinara Engine:

Sposób uruchomieniaDomyślna wartość HOST
pnpm start, start-local.bat127.0.0.1
start.sh, start.bat, instalator Windows, start-termux.sh0.0.0.0
Obraz Docker0.0.0.0 wewnątrz kontenera
docker-compose.ymlPublikuje port tylko na 127.0.0.1

Którą opcję wybrać

Czytaj po kolei i zatrzymaj się przy pierwszym pasującym punkcie.

  1. Łączysz się wyłącznie bezpośrednio przez sieć Tailscale albo tylko z kontenerów Docker na tym samym komputerze. Przy pnpm start bezpośredni klienci Tailscale pomijają logowanie; ustaw HOST=0.0.0.0, żeby mogli dotrzeć do serwera. Domyślny plik Compose publikuje tylko na 127.0.0.1. Jeśli publikujesz port poza loopback, żeby urządzenie Tailscale mogło do niego dotrzeć, najpierw ustaw logowanie. Docker będzie wtedy pytał o nie każde urządzenie, także urządzenia Tailscale, bo Docker widzi je pod adresem bramy. Zobacz Pominięcie dla sieci Tailscale i kontenerów Docker.
  2. Chcesz otworzyć aplikację Marinara na telefonie, tablecie albo laptopie w domowej sieci Wi-Fi. Ustaw logowanie (opcja 1 poniżej).
  3. Udostępniasz aplikację Marinara w publicznym internecie. Ustaw logowanie i użyj HTTPS.
  4. Proxy logowania w twojej sieci, na przykład tinyauth, Authelia albo Authentik, już pyta każdego gościa o logowanie. Przeczytaj Proxy logowania (forward auth).

Logowanie to najbardziej elastyczny wybór. Działa z każdego adresu IP, nie wymaga konfiguracji na każdym urządzeniu, a każda przeglądarka pozostaje zalogowana.

Opcja 1: Logowanie (zalecana)

Logowanie to nazwa użytkownika i hasło, których wymaga każde urządzenie zdalne. Możesz je ustawić na trzy sposoby:

BASIC_AUTH_USER=alice
BASIC_AUTH_PASS=correct-horse-battery-staple

Logowanie w .env ma pierwszeństwo przed logowaniem ustawionym w aplikacji i zmieniasz je tylko w .env. Zapisz .env; zmiana działa w ciągu kilku sekund, bez restartu.

Wybierz silne i unikalne hasło. Aplikacja wymaga co najmniej 10 znaków. Losowe hasło możesz wygenerować:

openssl rand -base64 24

Potem wykonaj te kroki na zdalnym urządzeniu.

  1. Otwórz aplikację Marinara w przeglądarce pod adresem serwera, na przykład http://192.168.1.50:7860.
  2. Zaloguj się na stronie logowania swoją nazwą użytkownika i hasłem.
  3. Aplikacja powinna się załadować. Przeglądarka pozostaje zalogowana do roku, dopóki jej nie wylogujesz. Skrypty i klienci API wysyłają nazwę użytkownika i hasło z każdym żądaniem (Basic Auth).

Aby zalogować inne urządzenie bez wpisywania hasła, użyj kodu parowania. Na zalogowanym urządzeniu otwórz Settings → Advanced → Access i wybierz Add a device. Potem wpisz kod na stronie logowania nowego urządzenia. Kod działa raz, przez kilka minut. Wygasły kod dostaje własny komunikat; utwórz nowy. W sekcji Signed-in devices widzisz każde urządzenie z jego sposobem logowania i datą pierwszego logowania. Możesz wylogować każde urządzenie, także to, z którego korzystasz. Możesz też zmienić albo usunąć hasło. Do tego Marinara prosi o obecne hasło, chyba że pracujesz na komputerze, na którym działa aplikacja Marinara, albo ustawiono ADMIN_SECRET.

Jeśli zapomnisz hasła, uruchom node scripts/reset-login.mjs w folderze aplikacji Marinara na komputerze, na którym ona działa. W kontenerze Docker uruchom docker exec <container> node scripts/reset-login.mjs. To usuwa logowanie ustawione w aplikacji i wylogowuje każdą przeglądarkę. Jeśli serwer nasłuchuje poza loopbackiem, wypisuje wtedy nowy kod konfiguracji. Tylko jeśli to polecenie nie zadziała, usuń zamiast tego .remote-login.json i .remote-sessions.json z folderu danych. Przy domyślnym /app/data uruchom docker exec <container> rm -f /app/data/.remote-login.json /app/data/.remote-sessions.json; jeśli zmieniono DATA_DIR, użyj tego folderu. Logowania w .env, które zmieniasz w .env, to nie dotyczy.

Serwer bez interfejsu i bez przeglądarki? Natywna instalacja na serwerze bez interfejsu nasłuchuje tylko na loopbacku i nie wypisuje kodu konfiguracji. Na własnym komputerze uruchom ssh -L 7860:127.0.0.1:7860 user@server. Potem otwórz tam http://localhost:7860 i użyj Settings.

Po 10 różnych błędnych hasłach lub kodach w ciągu 15 minut Marinara odrzuca logowania z tego adresu z kodem 429 Too Many Requests, dopóki te 15 minut nie minie. Poprawne hasło wpisane wcześniej zeruje licznik. Goście przekazywani przez odwrotne proxy albo tunel na komputerze z serwerem mają jeden wspólny licznik, a zalogowanie się jednego z nich go nie zeruje. Licznik zeruje też restart serwera. Przeglądarka, która logowała się już wcześniej, nadal wchodzi po podaniu poprawnego hasła, więc cudze błędne hasła nie zablokują ci dostępu z urządzenia, z którego już korzystasz. Strona logowania podaje, ile minut trzeba czekać. Jeśli zapomnisz hasła, strona logowania ma podpowiedź Forgot the password?.

Przeglądarki logują się na stronie /login. Zmienna BASIC_AUTH_REALM zmienia realm w zapytaniu Basic Auth dla skryptów i klientów API; nie zmienia strony logowania.

Część klientów pomija hasło nawet przy włączonym Basic Auth:

Ważne: Basic Auth tylko koduje hasło, ale go nie szyfruje. Ktoś, kto podsłuchuje niezaszyfrowane połączenie, odczyta je bez trudu. Przy udostępnianiu aplikacji Marinara w publicznym internecie połącz Basic Auth z HTTPS (zobacz niżej).

Opcja 2: lista dozwolonych adresów IP

Lista dozwolonych adresów IP wpuszcza wskazane adresy bez hasła. Sprawdza się wtedy, gdy urządzenia mają stałe adresy IP. Podaj listę adresów lub zakresów rozdzielonych przecinkami:

IP_ALLOWLIST=192.168.1.0/24,203.0.113.42

Zapis /24 w przykładzie to notacja CIDR. CIDR to skrócony sposób zapisania całego zakresu adresów w jednym wpisie. Na przykład 192.168.1.0/24 obejmuje wszystkie adresy od 192.168.1.0 do 192.168.1.255. Sam adres bez ukośnika, taki jak 203.0.113.42, pasuje tylko do tego jednego urządzenia.

Szeroki publiczny zakres, na przykład 0.0.0.0/0, może wpuścić klientów z internetu bez logowania. Wpisuj tylko adresy, którym ufasz.

Jak działa lista dozwolonych adresów IP:

Lista nie tworzy układu mieszanego, w którym wskazane urządzenia wchodzą bez hasła, a reszta się loguje. Jeśli pozostałe urządzenia mają logować się hasłem, zostaw IP_ALLOWLIST bez wartości i użyj samego Basic Auth.

Egzekwowanie listy da się wyłączyć na chwilę, bez kasowania jej zawartości. Przydaje się to przy szukaniu problemów z nowego adresu IP. Ustaw flagę włączenia na false:

IP_ALLOWLIST_ENABLED=false

Pominięcie ochrony w sieci prywatnej (opis)

Kilka flag znosi blokadę dla zaufanej sieci prywatnej. Służą do specjalnych konfiguracji. Lepszym wyborem jest logowanie. Flagi i ich ryzyko opisuje Kontrola dostępu.

Pominięcie dla sieci Tailscale i kontenerów Docker

Domyślnie Marinara ufa urządzeniu, które łączy się bezpośrednio przez twoją sieć Tailscale. Ufa też własnemu hostowi kontenera Docker. Logowanie, lista dozwolonych adresów IP albo TRUSTED_AUTH_PROXY wyłącza automatyczne zaufanie do hosta kontenera Docker, więc każde urządzenie potrzebuje wtedy swojego logowania albo miejsca na liście. Flagi, które to zmieniają, opisuje Kontrola dostępu.

W środowiskach Docker Desktop, OrbStack i rootless Docker każde urządzenie korzystające z opublikowanego portu widać pod adresem bramy Docker. Jeśli opublikujesz port na wszystkich interfejsach (-p 7860:7860) i nie ustawisz logowania, wejdzie każdy w twojej sieci. Zostaw port na 127.0.0.1 albo najpierw ustaw logowanie. Dziennik serwera ostrzega o tym przy starcie.

Odwrotne proxy i tunele na tym samym komputerze

Odwrotne proxy albo tunel na komputerze, na którym działa Marinara, na przykład nginx, Caddy, Traefik, Cloudflare Tunnel, Tailscale Serve lub Funnel albo ngrok, łączy się z aplikacją Marinara Engine przez loopback. Marinara rozpoznaje to po nagłówkach przekazywania, które dodaje proxy: Forwarded, X-Forwarded-For, X-Real-IP, X-Forwarded-Host, X-Forwarded-Proto, CF-Connecting-IP, True-Client-IP, nagłówkach tożsamości Tailscale albo Via. Marinara rozpoznaje także żądanie przychodzące przez HTTP/1.0, bo przeglądarki nigdy go nie używają, a domyślne proxy_pass w nginx tak. Marinara rozpoznaje także żądanie, którego nagłówek Host wskazuje inny komputer, na przykład domenę lub adres w sieci LAN, nawet gdy proxy nie dodaje nagłówków. Każde takie żądanie traktuje wtedy tak, jak należy, czyli jako żądanie zdalnego gościa:

Twoja własna przeglądarka na tym komputerze, otwarta pod adresem http://127.0.0.1:7860 albo http://localhost:7860, nadal działa bez hasła.

Caddy, Traefik, Cloudflare Tunnel, Tailscale i ngrok domyślnie dodają nagłówki przekazywania. W nginx nadal zalecana jest ta linia w bloku location:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Narzędzia przekazujące surowe połączenia, takie jak socat albo ssh -R, nie dodają żadnych nagłówków, więc ich ruch wygląda na lokalny. Nie publikuj nimi aplikacji Marinara Engine.

Jeśli twoje proxy już wymusza logowanie każdego gościa, zanim cokolwiek przekaże, zobacz Proxy logowania (forward auth).

Proxy logowania (forward auth)

Proxy typu forward-auth, na przykład tinyauth, Authelia, Authentik albo oauth2-proxy, pyta każdego gościa o logowanie, zanim przekaże żądanie. Jeśli takie proxy to jedyna droga do aplikacji Marinara, możesz pominąć drugie logowanie w aplikacji Marinara Engine. Nie ustawiaj tego bez takiego proxy.

Wpisz adres proxy w .env:

TRUSTED_AUTH_PROXY=192.168.1.5

Marinara wpuszcza wtedy każde żądanie, którego połączenie pochodzi z tego adresu. Nie pyta ich o własne logowanie i nie wypisuje kodu konfiguracji. Marinara sprawdza adres samego połączenia. Do tej decyzji ignoruje nagłówki przekazywania, takie jak X-Forwarded-For. Żądania z proxy przechodzą też przez IP_ALLOWLIST, bo to proxy decyduje, kto wchodzi. Nie liczą się jako lokalne, więc działania uprzywilejowane nadal wymagają sekretu administratora. Settings → Advanced → Access pokazuje Trusted login proxy: Set, dopóki to ustawienie jest aktywne.

Zanim to ustawisz:

Gdy ustawiono TRUSTED_AUTH_PROXY, Marinara wyłącza też automatyczne zaufanie do hosta kontenera Docker. Goście bezpośredni, którzy nie są proxy, potrzebują logowania do aplikacji Marinara Engine albo listy dozwolonych adresów IP. Marinara nie pokazuje wtedy też banera "no login yet".

Jeśli proxy działa na tym samym komputerze co Marinara, użyj TRUSTED_AUTH_PROXY=127.0.0.1 i skieruj proxy na 127.0.0.1:7860, nie na localhost:7860. Proxy, które łączy się z localhost, może połączyć się z ::1, co nie pasuje do 127.0.0.1. Wtedy każde inne proxy albo tunel na tym komputerze też jest zaufane, więc używaj tego tylko wtedy, gdy proxy logowania jest jedyne. To nie daje gościom przez proxy dostępu lokalnej maszyny.

Przykład dla Caddy, z aplikacją Marinara Engine pod adresem 192.168.1.20:7860:

marinara.example.com {
  forward_auth tinyauth:3000 {
    uri /api/auth/caddy
  }
  reverse_proxy 192.168.1.20:7860
}

Dla Authelii użyj forward_auth authelia:9091 z uri /api/authz/forward-auth. Authentik też obsługuje własne strony logowania przez proxy. Umieść jego linie w bloku route, żeby Caddy zachował ich kolejność, a ścieżka outpost nie przechodziła sama przez forward auth:

marinara.example.com {
  route {
    reverse_proxy /outpost.goauthentik.io/* authentik-server:9000
    forward_auth authentik-server:9000 {
      uri /outpost.goauthentik.io/auth/caddy
    }
    reverse_proxy 192.168.1.20:7860
  }
}

Dla Traefika i nginx postępuj według przewodnika forward-auth swojego proxy. Marinara nie potrzebuje niczego więcej poza adresem proxy.

Udostępnianie przez HTTPS

HTTPS szyfruje połączenie za pomocą TLS. TLS to szyfrowanie, które zamienia zwykły adres http w bezpieczny adres https. Zawsze używaj HTTPS przy instalacji dostępnej spoza w pełni zaufanej sieci prywatnej, zwłaszcza razem z Basic Auth.

Są na to dwa sposoby.

  1. Wbudowany TLS. Wskaż serwerowi plik certyfikatu i plik klucza prywatnego:
SSL_CERT=/path/to/cert.pem
SSL_KEY=/path/to/key.pem
  1. Odwrotne proxy. Postaw aplikację Marinara za nginx, Caddy, Traefik albo Cloudflare Tunnel. Proxy obsługuje część HTTPS i przekazuje ruch do aplikacji Marinara zwykłym HTTP na tym samym komputerze. Najpierw przeczytaj sekcję Odwrotne proxy i tunele na tym samym komputerze.

Zanim ustawisz SSL_CERT i SSL_KEY, potrzebujesz certyfikatu i klucza. Do użytku lokalnego wygenerujesz je narzędziem mkcert, a dla publicznej domeny narzędziem certbot. Jeśli plików brakuje albo nie da się ich odczytać, serwer zatrzymuje się przy starcie i podaje dokładne ścieżki, których szukał.

Sekcja Admin Access i działania uprzywilejowane

Część działań jest szczególnie wrażliwa: czyszczenie danych, tworzenie i pobieranie kopii zapasowych, import i eksport profili, instalowanie motywów i agentów oraz instalacja środowiska Local Model. Wymagają one osobnego wspólnego sekretu, nazywanego sekretem administratora, niezależnie od wybranej wyżej opcji dostępu.

Na komputerze z serwerem te działania zwykle udają się bez sekretu administratora. Ze zdalnego urządzenia sekret trzeba najpierw ustawić. Możesz go utworzyć w aplikacji albo ustawić w pliku .env.

Zainstalowani agenci, na przykład ci na ekranie głównym, nie wymagają sekretu administratora. Urządzenie zalogowane danymi logowania może z nich korzystać. Instalowanie, aktualizowanie i usuwanie agenta nadal go wymaga.

Tworzenie sekretu administratora w aplikacji

  1. Na komputerze, na którym działa aplikacja Marinara, otwórz sekcję Settings (Ustawienia), potem zakładkę Advanced, a następnie sekcję Admin Access.
  2. Kliknij Make admin secret (utworzenie sekretu administratora). Marinara pokazuje nowy sekret jeden raz i zapisuje go w tej przeglądarce.
  3. Na każdym zdalnym urządzeniu otwórz Settings → Advanced → Admin Access, wpisz sekret w pole i kliknij Save (Zapisz). Wielkość liter, spacje i myślniki nie mają znaczenia.

Sekret może utworzyć także urządzenie, które już go ma. Urządzenie zalogowane tylko danymi logowania nie może tego zrobić. Dzięki temu skradziona sesja logowania nie przejmie kontroli nad ryzykownymi działaniami.

Przy instalacji w kontenerze Docker przeglądarka łączy się z aplikacją Marinara przez sieć Docker, więc Marinara nie traktuje jej jako tego samego komputera. Pierwszy sekret ustaw zamiast tego w pliku .env (zobacz niżej).

Aby zmienić sekret, kliknij Replace admin secret (zastąpienie sekretu administratora). Stary sekret przestaje działać na każdym urządzeniu. Aby go wyłączyć, kliknij Remove admin secret (usunięcie sekretu administratora). Marinara przechowuje tylko odcisk sekretu, w pliku .admin-secret.json w folderze danych. Usunięcie tego pliku również usuwa sekret.

Ustawianie sekretu administratora w pliku .env

  1. W pliku .env wpisz silną, losową wartość i zapisz plik. Zmiana działa w ciągu kilku sekund, bez restartu.
ADMIN_SECRET=some-long-random-string
  1. Na zdalnym urządzeniu otwórz Settings → Advanced → Admin Access.
  2. Wklej tę samą wartość do pola (jego tekst zastępczy to ADMIN_SECRET) i kliknij przycisk Save.
  3. Powinien pojawić się komunikat Admin secret saved for this browser.

ADMIN_SECRET w pliku .env ma pierwszeństwo przed sekretem utworzonym w aplikacji. Dopóki jest ustawiony, sekcja Admin Access to pokazuje, a sekret zmieniasz wyłącznie w pliku .env.

Warto wiedzieć

Kiedy działanie uprzywilejowane nie uda się na zdalnym urządzeniu, Marinara pokazuje komunikat o błędzie z dwoma rozwiązaniami. Pierwsze: otworzyć aplikację przez localhost. Drugie: skonfigurować sekret administratora w sposób opisany wyżej.

Dlaczego zapis jest blokowany (CSRF)

CSRF to skrót od cross-site request forgery, czyli fałszowania żądań między witrynami. To zabezpieczenie nie pozwala innej otwartej stronie po cichu zmieniać czegokolwiek w aplikacji Marinara bez twojej zgody. Działa automatycznie i nie ma ustawienia, które trzeba włączyć.

Czasem CSRF blokuje też twoje własne zapisy. Dzieje się tak zwykle przy wejściu do aplikacji Marinara przez publiczną nazwę domeny albo nietypowy port, którego serwer jeszcze nie zna. Poznasz to po dwóch rzeczach.

Żeby to naprawić, dopisz swój adres do listy zaufanych w pliku .env:

CSRF_TRUSTED_ORIGINS=https://chat.example.com,http://203.0.113.10:7831

Przy publicznej domenie albo domenie odwrotnego proxy dopuść też nazwę hosta:

TRUSTED_HOSTS=chat.example.com

Bezpośrednie adresy w sieci LAN i Tailscale oraz adresy IPv4 i IPv6 nie wymagają TRUSTED_HOSTS. Lokalne nazwy .local/.home.arpa i jednoczłonowe nazwy komputerów są akceptowane automatycznie. Dokładna nazwa hosta wpisana już w CSRF_TRUSTED_ORIGINS również przechodzi.

Loopback, zwykłe adresy w sieci LAN, Tailscale (100.64.0.0/10) i mostek Docker (172.16.0.0/12) są zaufane automatycznie. Wypisywać trzeba tylko publiczne adresy IP i nazwy domen. Zmiana działa w ciągu kilku sekund, bez restartu.

Uwaga o blokowanych lokalnych dostawcach

Załóżmy, że łączysz aplikację Marinara z lokalnym dostawcą AI, na przykład takim, który działa na tym samym komputerze. Żądanie może zostać odrzucone z komunikatem o "private, loopback, metadata, or reserved IP range". To inne zabezpieczenie, nazywane ochroną SSRF. SSRF to skrót od server-side request forgery, czyli fałszowania żądań po stronie serwera. Blokuje ono wywołania serwera pod adresy prywatne, dopóki nie zostaną dopuszczone. Komunikat błędu podaje dokładną zmienną z pliku .env, na przykład PROVIDER_LOCAL_URLS_ENABLED. Pełną listę znajdziesz w dokumencie Konfiguracja serwera.

Dostęp z telefonu lub tabletu

Żeby otworzyć aplikację Marinara na telefonie lub tablecie w tej samej sieci:

  1. Sprawdź, czy serwer nasłuchuje na wszystkich interfejsach – w pliku .env musi być HOST=0.0.0.0.
  2. Ustaw logowanie (opcja 1 powyżej). Z telefonu możesz to zrobić na stronie, która cię blokuje, za pomocą kodu konfiguracji z logu serwera.
  3. Ustal lokalny adres IP komputera z serwerem (na przykład 192.168.1.50).
  4. Otwórz na telefonie adres http://192.168.1.50:7860 w przeglądarce. Domyślny port to 7860.
  5. Zaloguj się swoją nazwą użytkownika i hasłem.

Jeśli strona w ogóle się nie wczytuje, serwer prawdopodobnie jest nieosiągalny. Sprawdź HOST=0.0.0.0 i wartość PORT. Błąd 403 oznacza co innego: urządzenie dociera do serwera, ale nie ma jeszcze wstępu. Wróć do wybranej wyżej opcji i sprawdź ją jeszcze raz.

Zablokowany dostęp po aktualizacji

Nowsze wersje wymagają logowania, gdy wizyta przychodzi przez odwrotne proxy, tunel, Tailscale Serve lub Tailscale Funnel. Starsze wersje wpuszczały takie wizyty bez hasła. Jeśli teraz widzisz stronę logowania, stronę konfiguracji albo 403, to jest powód.

Uwaga przy aktualizacji: jeśli używasz Tailscale Serve albo innego proxy na tym samym komputerze i nigdy nie ustawiono hasła, twoje inne urządzenia są po aktualizacji zablokowane. Proxy na tym samym komputerze zwykle łączy się z serwerem, który nasłuchuje tylko na loopbacku, więc serwer nie wypisuje kodu konfiguracji. Ustaw logowanie na komputerze, na którym działa aplikacja Marinara.

Aby wrócić:

  1. Otwórz aplikację Marinara na komputerze, na którym działa, pod adresem http://localhost:7860 (lub własnym PORT). Użycie lokalne nie wymaga hasła. Na serwerze bez interfejsu najpierw uruchom na własnym komputerze ssh -L 7860:127.0.0.1:7860 user@server, potem otwórz tam http://localhost:7860. W kontenerze Docker to działa tylko wtedy, gdy nie ustawiono logowania ani IP_ALLOWLIST. W przeciwnym razie wpisz kod konfiguracji z logu serwera (docker logs <container> 2>&1 | grep "setup code") na stronie, która cię blokuje, albo w Settings → Advanced → Access, albo użyj przeglądarki, która jest jeszcze zalogowana.
  2. Przejdź do Settings → Advanced → Access i ustaw nazwę użytkownika oraz hasło w sekcji Remote login. Albo otwórz plik .env na tym komputerze i ustaw BASIC_AUTH_USER oraz BASIC_AUTH_PASS. Jeśli ustawiono IP_ALLOWLIST, dodaj do niej adres swojego drugiego urządzenia albo usuń to ustawienie, bo urządzenie spoza listy dostaje 403 nawet po zalogowaniu.
  3. Zaloguj się z drugiego urządzenia tą nazwą użytkownika i tym hasłem.

Wyszukiwarki

Marinara prosi wyszukiwarki, aby nie indeksowały jego stron (X-Robots-Tag: noindex, nofollow). Nie chroni to twojej instalacji i nie usuwa stron, które są już zindeksowane. Aby zachować prywatność instalacji, użyj opisanych wyżej kontroli dostępu.

Powiązane przewodniki