Translation in progress, please wait some minutes

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 without file extensions: set Content-Disposition: attachment and a proper Content-Type, or have the client send Accept: application/octet-stream. This ensures the 30 min download window.

🧪 How can I test if the port is reachable?

From inside your server:

bash
ss -tlnp | grep :11307

You should see:

Kode
LISTEN 0 128 0.0.0.0:11307 ...

From your local machine:

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

If the port hangs or times out:

  • Make sure your app is running
  • Check it listens on 0.0.0.0
  • Confirm you’re using a valid assigned port

🧰 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:

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

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

Kode
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)
  • The port number you’re using
  • A screenshot or terminal output showing your issue
  • Go to: Kontakt Support