Accès HTTPS (Proxy SSL)

Cette FAQ explique comment rendre vos applications web (par exemple, Gradio, FastAPI, Streamlit, Flask) accessibles publiquement sur les serveurs GPU Trooper.AI via HTTP(S). Ceci est particulièrement utile pour les tableaux de bord, les API et les interfaces utilisateur fonctionnant à l'intérieur de votre Blib ou de votre modèle.

Nous vous recommandons d'utiliser le proxy SSL inclus dans tous les modèles afin de sécuriser facilement vos applications. Lisez la suite ci-dessous !

Combien de ports publics puis-je obtenir ?

Chaque serveur sur Trooper.AI est fourni avec au moins 10 ports publics par GPUCela signifie :

  • Une machine 1×GPU → 10 ports publics
  • Une machine 4×GPU → 40 ports publics
  • Une machine 8×GPU → 80 ports publics

Tous les ports publics sont sécurisés par notre proxy SSL. La plupart des utilisateurs n'en ont besoin que de 2 à 4 ports (par exemple, un pour leur application, un pour la surveillance, un pour l'accès WebSocket/API).

Vous pouvez vérifier vos ports disponibles dans le tableau de bord ou demander une liste complète au support.

Public Ports on Tempalte Installs
Ports Publics sur les Installations de Modèles

Sur cette capture d'écran : De haut en bas et de gauche à droite, vous voyez :

  • Plage de ports publics
  • Nom d'hôte public
  • Noms des modèles
  • Icône de verrouillage sécurisé indiquant qu'une connexion HTTPS sécurisée est possible (cliquez dessus pour ouvrir l'interface Web du modèle). Lisez-en davantage sur le proxy SSL HTTPS ci-dessous !
  • Icône d'information pour la documentation du modèle
  • Bouton de configuration pour le modèle

Comment exposer mon application à Internet ?

  1. Démarrez votre application en écoute sur 0.0.0.0, pas 127.0.0.1 et l'un de vos ports publics attribués comme 11307

Exemple (Python/Flask) :

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

Exemple (Gradio) :

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

Exemple (démarrer une application Gradio depuis le shell) :

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

Exemple (Docker) :

bash
docker run -p 11307:8080 your-ai-webapp-image
  1. Utilisez l'un de vos ports publics attribuéstel que 11307

Votre application sera accessible à l'adresse :

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

⚠️ Puis-je utiliser les ports 80 ou 443 ?

No. L'accès direct aux ports 80 (HTTP) et 443 (HTTPS) n'est pas disponible pour des raisons de sécurité.

Si vous avez besoin d'un point de terminaison HTTPS sécurisé (par exemple, pour l'intégration en frontend ou la redirection OAuth) :

👉 Vous obtenez automatiquement un certificat SSL pour n'importe quel modèle ou contactez le support pour obtenir de l'aide. Cela mappera votre port public (par exemple, 11307) à un point de terminaison HTTPS sécurisé comme :

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

Ce proxy SSL est inclus avec tous les plans GPU et activé automatiquement lors de l'installation de chaque modèle. Les données sont acheminées en toute sécurité sur notre réseau interne, offrant une sécurité renforcée et garantissant que les certificats sont spécifiques à l'environnement réseau de votre GPU Server Blib.


🔒 Comment sécuriser mon application HTTP ?

Vous avez quatre options principales :

  1. Utilisez notre proxy HTTPS géré (recommandé, voir le chapitre suivant) Déploiement automatique lors de l'installation du modèle. Le trafic est entièrement acheminé sur le réseau interne directement vers votre GPU Server Blib !

  2. Exécutez votre propre proxy inverse (par exemple, nginx avec Let’s Encrypt) sur votre serveur frontal (web) public Remarque : vous utiliserez toujours un port non standard comme 11306 sur le serveur GPU. Assurez-vous de prendre en charge les WebSockets si nécessaire.

  3. Utilisez un service de tunneling comme SSH tunnel, ngrok ou Cloudflare Tunnel Cela vous donne un domaine HTTPS public rapidement, mais il est difficile à maintenir. À utiliser uniquement pendant le développement rapide.

  4. Communiquer via l'API (standard de l'industrie) Communiquez uniquement via l'API depuis votre serveur public avec votre serveur GPU. Cela peut être combiné avec (1) le proxy HTTPS ou (3) le tunnel SSH. C'est la norme de l'industrie et est utilisé par les services en production.


Comment utiliser correctement notre proxy SSL HTTPS

Notre proxy SSL sert toujours HTTPS on https://<ssl-id>.app.trooper.ai et transmet le trafic sur notre réseau interne au port de votre application. détecte automatiquement ce que vous faites (HTTP standard, streaming/chat, téléchargements importants, WebSockets) et applique une temporisation intelligente afin que les tâches longues ne soient pas interrompues, mais que les connexions inactives ou rompues ne restent pas bloquées indéfiniment.

Classes de délai d'attente (ce que vous obtenez par défaut)

Type de trafic Comment c'est détecté Délai d'attente du proxy
Requête/réponse HTTP standard Tout ce qui ne correspond pas ci-dessous 60s (PAR DÉFAUT)
Chat/Streaming (SSE / NDJSON) Le chemin contient /api/chat, /chat/completions, /api/generate, /generate, /stream, /events, or Accept: text/event-stream / application/x-ndjson 10 min (LONG)
Téléchargements de fichiers volumineux Range en-tête, chemin d'accès ou extension de fichier Accept: application/octet-stream 30 min (TÉLÉCHARGEMENT)
WebSockets Mise à niveau HTTP vers WS/WSS Pas de délai d'inactivité du proxy

Le proxy ajuste également dynamiquement les délais d'attente sur la réponse (par exemple, si votre serveur envoie 206 or Content-Disposition: attachment, cela augmente le délai d'attente TÉLÉCHARGEMENT même si la requête n'avait pas été initialement classée comme un téléchargement).

Ce que vous devez faire dans votre application

Pour le chat/streaming (SSE/NDJSON)

  • Envoyez les en-têtes corrects pour que le proxy sache qu'il s'agit d'un flux :

    • SSE : Content-Type: text/event-stream
    • NDJSON : Content-Type: application/x-ndjson
  • Émettre un heartbeat au moins tous les 15–30 secondes (SSE peut envoyer une ligne de commentaire :\n; NDJSON peut pousser une ligne vide). Cela maintient la connexion active pendant les longues exécutions du modèle.

Pour les WebSockets

  • Maintenez les échanges ping/pong activés (toutes les 20 à 30 secondes). Le proxy ne fermera pas la connexion WS ; votre application doit la maintenir active.

Pour les téléchargements importants

  • Support Plage HTTP requêtes (reprise, transferts partiels) et retour 206 Partial Content le cas échéant.
  • Ajouter Content-Disposition: attachment pour les fichiers téléchargeables.
  • Utilisez un type de contenu spécifique (ou laissez les clients en faire la demande avec Accept: application/octet-stream) afin que le proxy le classifie comme un téléchargement et applique la fenêtre plus longue. Content-Type (ou laissez les clients demander avec Accept: application/octet-streamafin que le proxy le classifie comme un téléchargement et applique une fenêtre plus longue.

Tests rapides

Flux SSE (curl) :

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

Flux NDJSON :

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

Téléchargement reprenable :

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

Points d'attention (et solutions)

  • Calcul long sans sortie: il sera traité comme une requête HTTP standard et risque de dépasser la 60s limite d'inactivité. Corrigez en diffusant des résultats/battements cardiaques partiels (ou en passant à l'endpoint SSE/NDJSON).
  • Téléchargements sans extension de fichier: définir Content-Disposition: attachment et un type approprié Content-Type, ou que le client envoie Accept: application/octet-streamCela garantit que 30 min fenêtre de téléchargement

Comment puis-je tester si le port est accessible ?

Depuis l'intérieur de votre serveur :

bash
ss -tlnp | grep :11307

Vous devriez voir :

Code
LISTEN 0 128 0.0.0.0:11307 ...

Depuis votre machine locale :

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

Si le port reste bloqué ou dépasse le délai imparti :

  • Assurez-vous que votre application est en cours d'exécution
  • Vérifiez qu'il écoute sur 0.0.0.0
  • Vérifiez que vous utilisez un port attribué valide

🧰 Exemple : Transfert de port avec socat

Si votre application ne fonctionne que sur localhost:8000, vous pouvez le transférer :

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

Cela expose localhost:8000 en externe connectXX.trooper.ai:11307.


🔁 Reconfiguration de port et ports supplémentaires

Les plages de ports publics sont attribuées automatiquement et ne peuvent pas être modifiées.

Si votre application nécessite plus de ports que l'allocation standard (par exemple pour des applications parallèles ou des déploiements multi-locataires), veuillez contacter notre équipe de support après avoir consulté attentivement notre documentation. Il est important de comprendre que les serveurs GPU ne sont pas destinés à fonctionner comme des serveurs web publics et que nous n'offrons pas la possibilité d'ouvrir des ports publics supplémentaires.


🧯 Dépannage

  • Application inaccessibleVérifiez s’il est lié à 0.0.0.0
  • Mauvais portN'utilisez que les ports attribués à votre serveur
  • Pas de HTTPSVérifiez la création automatique du proxy SSL lors de l'installation du modèle
  • Pare-feu à l'intérieur du conteneurDésactivez ou ouvrez les règles internes (n'utilisez surtout pas UFW !)
  • L'application se bloque immédiatement: Vérifiez les journaux et les ressources système
  • Connexions UDPNous ne prenons en charge que les connexions TCP avec état pour des raisons de sécurité.

🧑‍💻 Exemple : FastAPI sur un port public

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

Accessible à :

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

Besoin de HTTPS ? Vous devriez automatiquement voir l'icône de verrouillage sur vos installations de modèles pointant vers :

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

📎 Liens utiles


💬 Toujours bloqué(e) ?

Nous sommes là pour vous aider. Veuillez préparer ces informations avant de nous contacter :

  • Votre ID de serveur (e.g. aiXX_trooperai_000XXX)
  • Le numéro de port vous utilisez
  • A capture d'écran ou une capture d'écran [ou une sortie de terminal montrant votre problème]
  • Go to: Contacts Support