Documentation T-Hoster

T-Hoster est une plateforme de tunneling qui vous permet d'exposer vos services locaux sur Internet. Similaire à ngrok, mais hébergé sur votre propre infrastructure.

💡 Astuce

Nouveau sur T-Hoster ? Commencez par le guide de démarrage rapide pour créer votre premier tunnel en moins de 2 minutes.

Démarrage rapide

Suivez ces 4 étapes pour exposer votre premier service local :

1. Créer un compte

Rendez-vous sur le dashboard et entrez votre email pour obtenir une clé API.

2. Télécharger le client

# Linux / macOS
curl -L -o thoster https://{{.Domain}}/downloads/thoster-linux
chmod +x thoster

# Windows (PowerShell)
Invoke-WebRequest -Uri "https://{{.Domain}}/downloads/thoster.exe" -OutFile "thoster.exe"

3. Lancer un tunnel

# Exposer le port 3000
./thoster --server wss://{{.Domain}}/ws --api-key VOTRE_CLE_API --port 3000

4. Accéder à votre service

Votre service est maintenant accessible via l'URL affichée, par exemple :

https://abc12345.{{.Domain}}

Installation

Prérequis

  • Un compte T-Hoster avec une clé API
  • Un service local à exposer (serveur web, API, etc.)

Linux / macOS

# Télécharger
curl -L -o thoster https://{{.Domain}}/downloads/thoster-linux
chmod +x thoster

# Optionnel: déplacer dans le PATH
sudo mv thoster /usr/local/bin/

Windows

# PowerShell
Invoke-WebRequest -Uri "https://{{.Domain}}/downloads/thoster.exe" -OutFile "thoster.exe"

Compilation depuis les sources

git clone https://github.com/t-hoster/client.git
cd client
go build -o thoster main.go

Créer un tunnel

Syntaxe de base

./thoster --server wss://{{.Domain}}/ws --api-key VOTRE_CLE --port PORT_LOCAL

Options disponibles

Option Description Exemple
--server URL du serveur T-Hoster wss://{{.Domain}}/ws
--api-key Votre clé API abc123-def456
--port Port local à exposer 3000

Variables d'environnement

Vous pouvez aussi configurer le client via des variables d'environnement :

export THOSTER_SERVER="wss://{{.Domain}}/ws"
export THOSTER_API_KEY="votre-cle-api"

./thoster --port 3000

Exemples d'utilisation

# Exposer un serveur de développement React
./thoster --port 3000

# Exposer une API Flask
./thoster --port 5000

# Exposer un serveur Node.js
./thoster --port 8080

Domaines custom

Les domaines custom vous permettent d'utiliser votre propre nom de domaine au lieu d'un sous-domaine T-Hoster.

⚠️ Plan requis

Les domaines custom sont disponibles à partir du plan Pro. Voir les tarifs

Configuration DNS

Ajoutez un enregistrement A pointant vers notre serveur :

Type: A
Nom: @ (ou votre sous-domaine)
Valeur: 72.62.146.228
TTL: 3600

Ajouter le domaine

  1. Allez dans le Dashboard
  2. Cliquez sur l'onglet "Custom Domains"
  3. Entrez votre domaine et l'ID du tunnel associé
  4. Cliquez sur "Add Domain"

Le certificat SSL sera automatiquement généré par Let's Encrypt.

Dashboard

Le dashboard vous permet de :

  • Voir vos tunnels actifs et leur statut
  • Consulter les statistiques en temps réel
  • Gérer vos domaines custom
  • Voir les logs de requêtes en direct

Logs en direct

L'onglet "Live Logs" du dashboard vous permet de voir toutes les requêtes HTTP passant par vos tunnels en temps réel.

Chaque entrée affiche :

  • Timestamp : Heure de la requête
  • Méthode : GET, POST, PUT, DELETE, etc.
  • Path : Chemin de la requête
  • Status : Code de réponse HTTP
  • Latence : Temps de réponse en ms
  • Taille : Bytes entrants/sortants

Authentification API

Toutes les requêtes API authentifiées doivent inclure votre clé API dans le header :

X-API-Key: votre-cle-api

API Users

POST /api/users

Créer un nouveau compte utilisateur

# Requête
curl -X POST https://{{.Domain}}/api/users \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

# Réponse
{
  "email": "user@example.com",
  "api_key": "550e8400-e29b-41d4-a716-446655440000"
}

API Tunnels

GET /api/tunnels

Lister tous vos tunnels

# Requête
curl https://{{.Domain}}/api/tunnels \
  -H "X-API-Key: votre-cle-api"

# Réponse
[
  {
    "public_id": "abc12345",
    "public_url": "https://abc12345.{{.Domain}}",
    "local_port": 3000,
    "status": "active",
    "custom_domains": ["example.com"],
    "created_at": "2025-01-15T10:30:00Z"
  }
]

API Domains

GET /api/domains

Lister vos domaines custom

POST /api/domains

Ajouter un domaine custom

curl -X POST https://{{.Domain}}/api/domains \
  -H "X-API-Key: votre-cle-api" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com", "tunnel_id": "abc12345"}'
DELETE /api/domains?domain=example.com

Supprimer un domaine custom

API Statistics

GET /api/stats

Statistiques globales du serveur (public)

# Réponse
{
  "total_requests": 15420,
  "total_bytes_in": 5242880,
  "total_bytes_out": 104857600,
  "active_tunnels": 12,
  "total_connects": 156,
  "uptime_seconds": 86400
}
GET /api/stats/tunnel?tunnel_id=xxx

Statistiques d'un tunnel spécifique

GET /api/logs/stream?api_key=xxx

Stream SSE des logs en temps réel

Protocole WebSocket

Le client communique avec le serveur via WebSocket. Voici le protocole utilisé :

Connexion et enregistrement

// Client -> Serveur
{
  "type": "register",
  "api_key": "votre-cle-api",
  "local_port": 3000
}

// Serveur -> Client (succès)
{
  "type": "register_response",
  "success": true,
  "public_id": "abc12345",
  "public_url": "https://abc12345.{{.Domain}}"
}

Requête HTTP

// Serveur -> Client
{
  "type": "http_request",
  "request_id": "uuid",
  "method": "GET",
  "path": "/api/users",
  "headers": {"Content-Type": "application/json"},
  "body": null
}

// Client -> Serveur
{
  "type": "http_response",
  "request_id": "uuid",
  "status_code": 200,
  "headers": {"Content-Type": "application/json"},
  "body": "base64_encoded_body"
}

Limites par plan

Limite Free Pro Business
Tunnels simultanés 2 10 50
Domaines custom 0 5 20
Requêtes/minute 60 300 1000
Bande passante/mois 1 GB 50 GB Illimitée

Dépannage

Le tunnel ne se connecte pas

Vérifiez que votre clé API est correcte et que vous n'avez pas atteint la limite de tunnels de votre plan.

Erreur "Rate limit exceeded"

Vous avez dépassé le nombre de requêtes par minute autorisé. Attendez quelques secondes ou passez à un plan supérieur.

Le tunnel se déconnecte fréquemment

  • Vérifiez votre connexion Internet
  • Le client se reconnecte automatiquement après 5 secondes
  • Vérifiez les logs du client pour plus de détails

Certificat SSL invalide sur domaine custom

  1. Vérifiez que votre DNS pointe bien vers 72.62.146.228
  2. Attendez quelques minutes pour la propagation DNS
  3. Le certificat est généré automatiquement à la première requête
✅ Besoin d'aide ?

Contactez-nous à contact@t-hoster.cloud ou ouvrez une issue sur GitHub.

Accéder au Dashboard