HTTPS-adgang (SSL-proxy)

Denne FAQ forklarer, hvordan du gør dine webapplikationer (f.eks. Gradio, FastAPI, Streamlit, Flask) offentligt tilgængelige på Trooper.AI GPU-servere via HTTP(S). Dette er især nyttigt for dashboards, API'er og brugergrænseflader, der kører inde i din Blib eller skabelon.

Vi anbefaler at bruge den inkluderede SSL-proxy i alle skabeloner for nemt at sikre dine apps. Læs mere nedenfor!

🌐🔢 Hvor mange offentlige porte får jeg?

Hver server på Trooper.AI leveres med minimum 10 offentlige porte pr. GPUDet betyder:

  • En 1×GPU maskine → 10 offentlige porte
  • En 4×GPU maskine → 40 offentlige porte
  • En 8×GPU maskine → 80 offentlige porte

Alle offentlige porte er sikret af vores SSL-proxy. De fleste brugere behøver kun 2–4 porte (f.eks. en til deres app, en til overvågning, en til WebSocket/API-adgang).

Du kan tjekke dine tilgængelige porte i dashboardet eller anmode om en fuld liste fra support.

Public Ports on Tempalte Installs
Offentlige porte på skabeloninstallationer

På dette skærmbillede: Fra top til bund og fra venstre til højre kan du se:

  • Offentligt portområde
  • Offentlig værtsnavn
  • Skabelonsnavne
  • Låseikonet indikerer, at en sikker HTTPS-forbindelse er mulig (klik på dette for at åbne WebUI for skabelonen). Læs mere om SSL HTTPS Proxy nedenfor!
  • Info-ikon for skabelonens dokumentation
  • Indstillingsknap for skabelonen

🚀 Hvordan eksponerer jeg min app til internettet?

  1. Start din app med at lytte på 0.0.0.0, ikke 127.0.0.1 og en af dine tildelte offentlige porte som 11307

Eksempel (Python/Flask):

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

Eksempel (Gradio):

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

Eksempel (start en Gradio-app fra shell):

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

Eksempel (Docker):

bash
docker run -p 11307:8080 your-ai-webapp-image
  1. Brug en af dine tildelte offentlige portesåsom 11307

Din app vil være tilgængelig på:

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

⚠️ Kan jeg bruge port 80 eller 443?

No. Direkte adgang til port 80 (HTTP) og 443 (HTTPS) er ikke tilgængelig af sikkerhedsmæssige årsager.

Hvis du har brug for et sikkert HTTPS-endepunkt (f.eks. til frontend-indlejring eller OAuth-omdirigering):

👉 Du får automatisk SSL til enhver skabelon eller kontakt support for at få hjælp Dette vil mappe din offentlige port (f.eks. 11307til en sikker HTTPS-slutpunkt som:

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

Denne SSL-proxy er inkluderet i alle GPU-planer og aktiveres automatisk ved hver skabeloninstallation. Data dirigeres sikkert på vores interne netværk, hvilket giver øget sikkerhed og sikrer, at certifikater er specifikke for dit GPU Server Blib's netværksmiljø.


🔒 Hvordan kan jeg sikre min HTTP-app?

Du har fire hovedmuligheder:

  1. Brug vores administrerede HTTPS-proxy (anbefales, se næste kapitel) Automatisk implementeret ved skabeloninstallation. Trafik dirigeres fuldt ud i det interne netværk direkte til din GPU Server Blib!

  2. Kør din egen reverse proxy (f.eks. nginx med Let's Encrypt) på din offentlige frontend (web)server Bemærk: Du vil stadig bruge en ikke-standard port som 11306 på GPU-serveren. Sørg for at understøtte WebSockets, hvis det er nødvendigt.

  3. Brug en tunneleringstjeneste som SSH-tunnel, ngrok eller Cloudflare Tunnel Dette giver dig et offentligt HTTPS-domæne hurtigt, men gør det vanskeligt at vedligeholde. Brug kun under hurtig udvikling.

  4. Kommuniker via API (industristandard) Kommuniker kun via API fra din offentlige server med din GPU-server. Dette kan kombineres med (1) en HTTPS-proxy eller (3) en SSH-tunnel. Dette er industristandarden og anvendes af produktive tjenester.


Sådan bruger du vores SSL HTTPS Proxy korrekt

Vores SSL-proxy serverer altid HTTPS on https://<ssl-id>.app.trooper.ai og videresender trafik over vores interne netværk til din apps port. auto-detekterer hvad du laver (almindelig HTTP, streaming/chat, store downloads, WebSockets) og anvender en smart timeout, så lange jobs ikke afbrydes – men inaktive/brudte forbindelser hænger ikke fast for evigt.

Timeout-klasser (hvad du får som standard)

Trafiktype Hvordan det opdages Proxy timeout
Almindelig HTTP-anmodning/svar Alt der ikke matcher nedenfor 60s (STANDARD)
Chat/Streaming (SSE / NDJSON) Stien indeholder /api/chat, /chat/completions, /api/generate, /generate, /stream, /events, or Accept: text/event-stream / application/x-ndjson 10 min (LANG)
Store filneddownloadninger Range header, fil-lignende sti/udvidelse Accept: application/octet-stream 30 min (DOWNLOAD)
WebSockets HTTP-opgradering til WS/WSS Ingen proxy inaktivitetstimeout

Proxyen opgraderer også timeouts dynamisk på svar (f.eks. hvis din server sender 206 or Content-Disposition: attachment, øges den til DOWNLOAD selv hvis anmodningen ikke oprindeligt blev klassificeret som en download).

Hvad du bør gøre i din app

For chat/streaming (SSE/NDJSON)

  • Send de korrekte headere, så proxyen ved, at det er en stream:

    • SSE: Content-Type: text/event-stream
    • NDJSON: Content-Type: application/x-ndjson
  • Send et heartbeat mindst hvert 15–30 sekund (SSE kan sende en kommentar linje :\n; NDJSON kan sende en tom linje). Dette holder forbindelsen varm under lange modelkørsler.

For WebSockets

  • Hold ping/pong aktiveret (typisk 20–30 sekunder). Proxyen vil ikke slå WS ihjel; din app skal holde den i live.

For store downloads

  • Support HTTP Range anmodninger (genoptag, delvise overførsler) og returner 206 Partial Content hvis relevant
  • Tilføj Content-Disposition: attachment til downloadbare filer.
  • Brug en specifik Content-Type (eller lad klienter anmode om med Accept: application/octet-streamså klassificerer proxyen det som en download og anvender det længere vindue.

Hurtige tests

SSE stream (curl):

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

NDJSON-stream:

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

Genoptagelig download:

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

Faldgruber (og løsninger)

  • Langvarig beregning uden output: det vil blive behandlet som almindelig HTTP og kan ramme 60s inaktiv tidsgrænse. Løs ved at streame delvise resultater/heartbeats (eller skift slutpunktet til SSE/NDJSON).
  • Downloads uden filtypenavne: sæt Content-Disposition: attachment og en korrekt Content-Typeeller få klienten til at sende Accept: application/octet-streamDette sikrer 30 min downloadvindue.

🧪 Hvordan kan jeg teste, om porten er tilgængelig?

Fra din server:

bash
ss -tlnp | grep :11307

Du bør se:

Kode
LISTEN 0 128 0.0.0.0:11307 ...

Fra din lokale maskine:

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

Hvis porten hænger eller timeout opstår:

  • Sørg for, at din applikation kører
  • Kontroller, at den lytter på 0.0.0.0
  • Bekræft, at du bruger en gyldig tildelt port

🧰 Eksempel: Portvideresendelse med socat

Hvis din app kun kører på localhost:8000, du kan videresende det:

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

Dette eksponerer localhost:8000 eksternt som connectXX.trooper.ai:11307.


🔁 Portomlægning og yderligere porte

Offentlige portområder tildeles automatisk og kan ikke ændres.

Hvis din applikation kræver flere porte end standardallokeringen (f.eks. til parallelle applikationer eller multi-tenant deployments), bedes du kontakte vores supportteam, efter at have gennemgået vores dokumentation grundigt. Det er vigtigt at forstå, at GPU-servere ikke er beregnet til at fungere som offentlige webservere, og vi tilbyder ikke mulighed for at åbne yderligere offentlige porte.


🧯 Fejlfinding

  • Appen er ikke tilgængelig: Kontroller om den er bundet til 0.0.0.0
  • Forkert portBrug kun de porte, der er tildelt din server
  • Ingen HTTPSKontroller automatisk oprettelse af SSL-proxy under skabeloninstallation
  • Firewall inde i containerDeaktiver eller åbn interne regler (brug ikke UFW overhovedet!)
  • Applikationen crasher øjeblikkeligt: Tjek logfiler og systemressourcer
  • UDP-forbindelserVi understøtter kun stateful TCP-forbindelser af sikkerhedsmæssige årsager

🧑‍💻 Eksempel: FastAPI på en offentlig port

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

Få adgang til det på:

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

Har du brug for HTTPS? Du bør automatisk se hængelåseikonet på dine skabeloninstallationer, der peger på:

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

📎 Nyttige links


💬 Stadig fastlåst?

Vi er her for at hjælpe. Forbered venligst disse oplysninger, før du kontakter os:

  • Din Server ID (e.g. aiXX_trooperai_000XXX)
  • The portnummer du bruger
  • A skærmbillede eller terminal output der viser dit problem
  • Go to: Kontakt Support