Translation in progress, please wait some minutes

Dostęp HTTPS (Proxy SSL)

Ta sekcja FAQ wyjaśnia, jak udostępnić publicznie swoje aplikacje internetowe (np. Gradio, FastAPI, Streamlit, Flask) na serwerach GPU Trooper.AI za pomocą HTTP(S). Jest to szczególnie przydatne dla pulpitów nawigacyjnych, interfejsów API i interfejsów użytkownika działających wewnątrz Twojego Bliba lub szablonu.

Zalecamy korzystanie z dołączonego serwera proxy SSL we wszystkich szablonach, aby łatwo zabezpieczyć swoje aplikacje. Przeczytaj więcej poniżej!

🌐🔢 Ile portów publicznych otrzymuję?

Każdy serwer na Trooper.AI jest wyposażony w co najmniej 10 publicznych portów na kartę GPUOznacza to:

  • Maszyna z 1×GPU → 10 portów publicznych
  • Maszyna z 4×GPU → 40 portów publicznych
  • Maszyna z 8×GPU → 80 portów publicznych

Wszystkie publiczne porty są zabezpieczone naszym proxy SSL. Większości użytkowników wystarcza 2–4 porty (np. jeden dla ich aplikacji, jeden do monitorowania, jeden dla WebSocket/API).

Możesz sprawdzić dostępne porty w panelu sterowania lub poprosić o pełną listę w naszym wsparciu technicznym.

Public Ports on Tempalte Installs
Porty publiczne na zainstalowanych szablonach

Na tym zrzucie ekranu: Od góry do dołu i od lewej do prawej widzisz:

  • Zakres portów publicznych
  • Publiczny host
  • Nazwy szablonów
  • Ikona zamkniętej kłódki oznacza, że możliwe jest bezpieczne połączenie HTTPS (kliknij ją, aby otworzyć interfejs WebUI szablonu). Przeczytaj więcej o serwerze proxy SSL HTTPS poniżej!
  • Ikona informacyjna dla dokumentacji szablonu
  • Przycisk ustawień dla szablonu

🚀 Jak udostępnić moją aplikację w Internecie?

  1. Uruchom aplikację nasłuchującą na 0.0.0.0, nie 127.0.0.1 i jeden z przypisanych do Ciebie publicznych portów, np. 11307

Przykład (Python/Flask):

bash
flask run --host=0.0.0.0 --port=11307

Przykład (Gradio):

python
app.launch(server_name="0.0.0.0", server_port=11307)

Przykład (uruchomienie aplikacji Gradio z powłoki):

bash
python your_app.py --server-name 0.0.0.0 --server-port 11307

Przykład (Docker):

bash
docker run -p 11307:8080 your-ai-webapp-image
  1. Użyj jednego z przypisanych do Ciebie publicznych portówna przykład 11307

Twoja aplikacja będzie dostępna pod adresem:

Kod
http://connectXX.trooper.ai:11307

⚠️ Czy mogę użyć portu 80 lub 443?

No. Bezpośredni dostęp do portu 80 (HTTP) i 443 (HTTPS) jest niedostępny ze względów bezpieczeństwa.

Jeśli potrzebujesz bezpiecznego punktu końcowego HTTPS (np. do osadzenia w interfejsie użytkownika lub przekierowania OAuth):

👉 Otrzymasz automatycznie SSL do każdego szablonu lub skontaktuj się z naszym wsparciem, aby uzyskać pomoc. To przypisze Twój publiczny port (np. 11307do bezpiecznego punktu końcowego HTTPS, takiego jak:

Kod
https://ssl-access-id.app.trooper.ai/

Ten serwer proxy SSL jest zawarty we wszystkich planach GPU i jest automatycznie aktywowany przy każdej instalacji szablonu. Dane są bezpiecznie przesyłane w naszej sieci wewnętrznej, zapewniając zwiększone bezpieczeństwo i gwarantując, że certyfikaty są specyficzne dla środowiska sieciowego Twojego GPU Server Blib.


🔒 Jak zabezpieczyć moją aplikację HTTP?

Masz cztery główne opcje:

  1. Skorzystaj z naszego zarządzanego serwera proxy HTTPS (zalecane, patrz następny rozdział) Automatycznie wdrażane po zainstalowaniu szablonu. Ruch sieciowy w pełni kierowany w wewnętrznej sieci bezpośrednio do Twojego GPU Server Blib!

  2. Uruchom własny serwer proxy wsteczny (np. nginx z Let’s Encrypt) na swoim publicznym serwerze frontend (web). Uwaga: nadal będziesz używać niestandardowego portu, takiego jak 11306 na serwerze GPU. Upewnij się, że obsługuje WebSockets, jeśli to konieczne.

  3. Użyj usługi tunelowania, takiej jak SSH tunnel, ngrok lub Cloudflare Tunnel To zapewnia szybki dostęp do publicznej domeny HTTPS, ale utrudnia utrzymanie. Używaj tylko podczas szybkiego prototypowania.

  4. Komunikuj się poprzez API (standard branżowy) Komunikuj się wyłącznie przez API z serwera publicznego z serwerem GPU. Można to połączyć z (1) proxy HTTPS lub (3) tunelem SSH. Jest to standard branżowy i stosowany przez produkcyjne usługi.


Jak poprawnie korzystać z naszego serwera proxy SSL HTTPS

Nasz serwer proxy SSL zawsze obsługuje HTTPS on https://<ssl-id>.app.trooper.ai i przekazuje ruch przez naszą wewnętrzną sieć do portu Twojej aplikacji. automatycznie wykrywa co robisz (zwykłe HTTP, streaming/chat, duże pobieranie, WebSockets) i stosuje inteligentny limit czasu, aby długie zadania nie zostały przerwane, ale bezczynne/uszkodzone połączenia nie wisiały w nieskończoność.

Klasy limitów czasu (domyślne ustawienia)

Typ ruchu Jak jest wykrywane Limit czasu połączenia proxy
Standardowa żądanie/odpowiedź HTTP Wszystko, czego nie udało się dopasować 60s (DOMYŚLNIE)
Czat/Strumieniowanie (SSE / NDJSON) Ścieżka zawiera /api/chat, /chat/completions, /api/generate, /generate, /stream, /events, or Accept: text/event-stream / application/x-ndjson 10 min (DŁUGI)
Pobieranie dużych plików Range nagłówek, ścieżka/rozszerzenie pliku Accept: application/octet-stream 30 min (POBIERANIE)
WebSocket Uaktualnienie HTTP do WS/WSS Brak limitu czasu bezczynności proxy

Proxy również dynamicznie dostosowuje limity czasowe na podstawie odpowiedź (np. jeśli twój serwer wysyła 206 or Content-Disposition: attachment, zwiększa się do POBIERANIE nawet jeśli żądanie nie zostało początkowo zaklasyfikowane jako pobieranie).

Co powinieneś zrobić w swojej aplikacji

Dla czatu/strumieniowania (SSE/NDJSON)

  • Wyślij poprawne nagłówki, aby proxy wiedziało, że to strumień:

    • SSE: Content-Type: text/event-stream
    • NDJSON: Content-Type: application/x-ndjson
  • Wysyłaj sygnał pulsu co najmniej co 15–30 sekund (SSE może wysłać linię komentarza :\n; NDJSON może wysłać pustą linię). Pomaga to utrzymać połączenie podczas długotrwałych uruchomień modelu.

Dla WebSocketów

  • Utrzymuj włączoną wymianę ping/pong (co 20–30 sekund). Proxy nie zakończy połączenia WS; Twoja aplikacja musi je utrzymywać aktywne.

Dla dużych pobierań

  • Wsparcie Zakres HTTP żądania (wznowienie, transfery częściowe) i odpowiedź 206 Partial Content w odpowiednim przypadku
  • Dodaj Content-Disposition: attachment dla plików do pobrania
  • Użyj konkretnego Content-Type (lub pozwól klientom zażądać z Accept: application/octet-streamw celu sklasyfikowania go przez proxy jako pobieranie i zastosowania dłuższego okna.

Szybkie testy

Strumień SSE (curl):

bash
curl -N -H "Accept: text/event-stream" https://<ssl-id>.app.trooper.ai/api/stream

Strumień NDJSON:

bash
curl -N -H "Accept: application/x-ndjson" https://<ssl-id>.app.trooper.ai/generate

Pobieranie z możliwością wznowienia:

bash
curl -O -H "Range: bytes=0-" https://<ssl-id>.app.trooper.ai/files/big-model.bin

Pułapki (i poprawki)

  • Długie obliczenia bez wyjścia: zostanie potraktowane jako standardowy HTTP i może osiągnąć 60s limit bezczynności. Napraw, przesyłając strumieniowo wyniki częściowe/sygnały pulsu (lub przełączając punkt końcowy na SSE/NDJSON).
  • Pobieranie bez rozszerzeń plików: ustaw Content-Disposition: attachment i odpowiedni Content-Typelub mieć klienta wysyłającego Accept: application/octet-streamZapewnia to 30 min okno pobierania.

🧪 Jak mogę sprawdzić, czy port jest osiągalny?

Z poziomu twojego serwera:

bash
ss -tlnp | grep :11307

Powinieneś zobaczyć:

Kod
LISTEN 0 128 0.0.0.0:11307 ...

Z Twojej lokalnej maszyny:

bash
curl http://connectXX.trooper.ai:11307

Jeśli port się zawiesza lub przekracza limit czasu:

  • Upewnij się, że Twoja aplikacja jest uruchomiona
  • Sprawdź, czy nasłuchuje na 0.0.0.0
  • Upewnij się, że używasz prawidłowego przypisanego portu

🧰 Example: Port forwarding with socat

If your app only runs on localhost:8000, you can forward it:

bash
sudo socat TCP-LISTEN:11307,fork TCP:localhost:8000

This exposes localhost:8000 externally as connectXX.trooper.ai:11307.


🔁 Port Remapping and Additional Ports

Public port ranges are automatically assigned and cannot be modified.

If your application requires more ports than the standard allocation (such as for parallel applications or multi-tenant deployments), please contact our support team after reviewing our documentation thoroughly. It is important to understand that GPU servers are not intended to function as public-facing web servers, and we do not offer the ability to open additional public ports.


🧯 Troubleshooting

  • App not reachable: Check if it’s bound to 0.0.0.0
  • Wrong port: Only use ports assigned to your server
  • No HTTPS: Check automatically creation of SSL Proxy during template install
  • Firewall inside container: Disable or open internal rules (don’t use UFW at all!)
  • App crashes immediately: Check logs and system resources
  • UDP connections: We only support stateful TCP connections for security reasons

🧑‍💻 Example: FastAPI on a public port

python
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=11308)

Access it at:

Kod
http://connectXX.trooper.ai:11308

Need HTTPS? You should automatically see the lock icon on your template installs pointing to:

Kod
https://ssl-token.apps.trooper.ai/

📎 Useful Links


💬 Still stuck?

We’re here to help. Please prepare these information before contacting us:

  • Your Server ID (e.g. aiXX_trooperai_000XXX)
  • Ten port number you’re using
  • A screenshot or terminal output showing your issue
  • Go to: Kontakty z wsparciem