FlaskTunnel Client
Alternative gratuite et open-source à ngrok pour créer des tunnels HTTP sécurisés vers vos applications locales.

🚀 Installation
pip install flasktunnel-client
pip install git+https://github.com/flasktunnel/client.git
🌟 Fonctionnalités
- ✅ Tunnels HTTP/HTTPS sécurisés vers localhost
- 🎯 Sous-domaines personnalisés (ex:
monapp.flasktunnel.dev
)
- 🔐 Protection par mot de passe optionnelle
- ⏰ Durées configurables (1h à 24h)
- 🌐 Support CORS automatique
- 📡 Mode webhook pour intégrations
- 🏠 Mode local pour développement
- 📊 Monitoring en temps réel
- 🎨 Interface CLI moderne avec Rich
🎯 Usage Rapide
Commande basique
flasktunnel --port 3000
Avec sous-domaine personnalisé
flasktunnel --port 5000 --subdomain monapp
📋 Table des Matières
🛠 Commandes CLI
Créer un Tunnel
Tunnel basique
flasktunnel --port 8000
flasktunnel --port 3000 --subdomain myapp
flasktunnel --port 3000 --name myapp
Tunnel sécurisé
flasktunnel --port 5000 --password monsecret
flasktunnel --port 443 --https
flasktunnel --port 3000 --cors
Durées personnalisées
flasktunnel --port 3000 --duration 1h
flasktunnel --port 3000 --duration 24h
Mode webhook
flasktunnel --port 4000 --webhook
Gestion des Tunnels
Lister les tunnels actifs
flasktunnel --list
Tester la connexion
flasktunnel --test
Diagnostic du système
flasktunnel --diagnose
Mode Développement
Mode local (serveur local sur port 8080)
flasktunnel --local-mode --port 3000
Serveur personnalisé
flasktunnel --server-url http://monserveur.com --port 3000
Mode verbeux
flasktunnel --port 3000 --verbose
🔐 Authentification
Créer un compte
flasktunnel --register
Se connecter
flasktunnel --login
Se déconnecter
flasktunnel --logout
Utiliser une clé API
flasktunnel --auth MA_CLE_API --port 3000
export FLASKTUNNEL_API_KEY="ma_cle_api"
flasktunnel --port 3000
⚙️ Options Avancées
Commande complète avec toutes les options
flasktunnel \
--port 3000 \
--subdomain monapp \
--password secret123 \
--duration 4h \
--cors \
--https \
--webhook \
--auth MA_CLE_API \
--verbose
Configuration personnalisée
flasktunnel --config ./ma-config.json --port 3000
📁 Configuration
Fichier de configuration (.flasktunnel.json)
Créez un fichier .flasktunnel.json
dans votre projet :
{
"port": 3000,
"subdomain": "monapp",
"duration": "4h",
"cors": true,
"https": false,
"password": "monsecret",
"webhook": false,
"server_url": "https://flasktunnel.dev",
"local_mode": false
}
Configuration par projet
echo '{
"port": 3000,
"subdomain": "monprojet",
"cors": true,
"duration": "8h"
}' > .flasktunnel.json
flasktunnel
Fichier d'authentification (~/.flasktunnel/credentials.json)
Stockage automatique des identifiants après connexion :
{
"api_key": "ft_1234567890abcdef",
"user_id": "user_123",
"email": "mon@email.com",
"plan": "free"
}
🔧 Variables d'Environnement
Variables principales
export FLASKTUNNEL_PORT=3000
export FLASKTUNNEL_SUBDOMAIN=monapp
export FLASKTUNNEL_DURATION=4h
export FLASKTUNNEL_API_KEY=ma_cle_api
export FLASKTUNNEL_AUTH_TOKEN=mon_token
export FLASKTUNNEL_PASSWORD=monsecret
export FLASKTUNNEL_CORS=true
export FLASKTUNNEL_HTTPS=true
export FLASKTUNNEL_LOCAL_MODE=true
export FLASKTUNNEL_SERVER_URL=http://localhost:8080
export FLASKTUNNEL_WEBHOOK=true
export FLASKTUNNEL_CUSTOM_DOMAIN=mondomaine.com
Exemple avec .env
cat > .env << EOF
FLASKTUNNEL_PORT=5000
FLASKTUNNEL_SUBDOMAIN=devapp
FLASKTUNNEL_CORS=true
FLASKTUNNEL_DURATION=8h
FLASKTUNNEL_API_KEY=ft_votre_cle_ici
EOF
source .env
flasktunnel
💻 Usage Programmatique
Exemple basique
from flasktunnel import FlaskTunnelClient
client = FlaskTunnelClient()
tunnel = client.create_tunnel(port=3000)
print(f"URL publique: {tunnel.public_url}")
tunnel.wait_until_expired()
Exemple avancé
from flasktunnel import FlaskTunnelClient, FlaskTunnelConfig
config = FlaskTunnelConfig(
port=5000,
subdomain="monapp",
password="secret123",
duration="4h",
cors=True,
https=True
)
client = FlaskTunnelClient(config)
tunnel = client.create_tunnel(
port=config.port,
subdomain=config.subdomain,
password=config.password,
duration=config.duration,
cors=config.cors,
https=config.https
)
def on_request(data):
print(f"Requête reçue: {data['method']} {data['path']}")
def on_error(data):
print(f"Erreur: {data['message']}")
tunnel.on('request', on_request)
tunnel.on('error', on_error)
tunnel.connect_websocket()
print(f"✅ Tunnel actif: {tunnel.public_url}")
tunnel.wait_until_expired()
Gestion des tunnels
from flasktunnel import FlaskTunnelClient
client = FlaskTunnelClient()
tunnels = client.list_tunnels()
for tunnel in tunnels:
print(f"- {tunnel['public_url']} (port {tunnel['port']})")
tunnel_id = "tunnel_123456"
client.delete_tunnel(tunnel_id)
stats = client.get_tunnel_stats(tunnel_id)
if stats:
print(f"Requêtes: {stats['requests_count']}")
print(f"Trafic: {stats['bandwidth_used']}")
Configuration depuis fichier
from flasktunnel import FlaskTunnelConfig, FlaskTunnelClient
config = FlaskTunnelConfig.from_file("ma-config.json")
config = FlaskTunnelConfig.from_env()
config = FlaskTunnelConfig.from_file().merge_with_args(
port=8000,
subdomain="override"
)
client = FlaskTunnelClient(config)
🌍 Exemples Pratiques
1. Application Flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World depuis Flask!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
python app.py
flasktunnel --port 5000 --subdomain flask-demo
2. Application Django
python manage.py runserver 8000
flasktunnel --port 8000 --subdomain django-api --cors
3. Server de développement Node.js
npm start
flasktunnel --port 3000 --subdomain node-app --verbose
4. Webhook pour GitHub
flasktunnel --port 4000 --subdomain github-webhook --webhook --password secret123
5. API avec authentification
flasktunnel --port 8080 --subdomain secure-api --password api-secret --https --cors
6. Développement mobile (React Native, etc.)
flasktunnel --port 19006 --subdomain expo-app --cors --duration 8h
🔍 Troubleshooting
Diagnostic automatique
flasktunnel --diagnose
Problèmes courants
1. Port non disponible
python -m http.server 3000
flasktunnel --port 8000
2. Serveur inaccessible
flasktunnel --test
flasktunnel --local-mode --port 3000
3. Authentification
flasktunnel --login
flasktunnel --auth YOUR_API_KEY --port 3000
4. Sous-domaine occupé
flasktunnel --port 3000 --subdomain monapp-v2
flasktunnel --port 3000
Logs et debugging
flasktunnel --port 3000 --verbose
python -c "
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(('', PORT), Handler) as httpd:
print(f'Server running on port {PORT}')
httpd.serve_forever()
" &
flasktunnel --port 8000 --verbose
🛡️ Sécurité
Bonnes pratiques
flasktunnel --port 3000 --password "mon-mot-de-passe-fort"
flasktunnel --port 8080 --https --password secret
flasktunnel --port 3000 --duration 1h
Protection des credentials
chmod 600 ~/.flasktunnel/credentials.json
export FLASKTUNNEL_API_KEY="$(cat ~/.flasktunnel/api_key)"
📊 Monitoring et Stats
Interface temps réel
flasktunnel --port 3000 --verbose
Stats programmatiques
from flasktunnel import FlaskTunnelClient
client = FlaskTunnelClient()
tunnel = client.create_tunnel(port=3000)
import time
while tunnel.is_active:
stats = client.get_tunnel_stats(tunnel.tunnel_id)
if stats:
print(f"Requêtes: {stats['requests_count']}")
print(f"Bande passante: {stats['bandwidth_used']}")
time.sleep(60)
🤝 Support et Contribution
Liens utiles
Alternative si FlaskTunnel est indisponible
ngrok http 3000
npx localtunnel --port 3000
ssh -R 80:localhost:3000 serveo.net
📄 License
MIT License - voir le fichier LICENSE pour plus de détails.
FlaskTunnel - Rendez vos applications locales accessibles au monde entier ! 🚀