ngrok : exposer un port local sur Internet en une commande
Tester un webhook Stripe, montrer une démo à un client, recevoir un callback OAuth sur votre machine locale — tous ces scénarios nécessitent que votre machine soit accessible depuis Internet. C’est exactement ce que fait ngrok.
Ce que fait ngrok
ngrok ouvre un tunnel entre un serveur public et un port de votre machine. Vous lancez une commande, vous obtenez une URL publique HTTPS, et tout le trafic qui arrive sur cette URL est transmis à votre serveur local.
ngrok http 3000
Résultat immédiat :
Forwarding https://abc123.ngrok-free.app -> http://localhost:3000
N’importe qui dans le monde peut accéder à https://abc123.ngrok-free.app et atterrir sur votre serveur local.
Installation
# macOS
brew install ngrok
# Linux
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
sudo apt update && sudo apt install ngrok
# Tous systèmes (avec npm)
npm install -g ngrok
Créez un compte gratuit sur ngrok.com et configurez votre token :
ngrok config add-authtoken VOTRE_TOKEN
Cas d’usage concrets
Tester un webhook Stripe en local :
# Démarrez votre serveur sur le port 4000
node server.js
# Dans un autre terminal, ouvrez le tunnel
ngrok http 4000
# Collez l'URL ngrok dans la config webhook de Stripe
# https://abc123.ngrok-free.app/webhook/stripe
Chaque requête entrante est visible en temps réel dans l’interface ngrok (http://localhost:4040).
Partager une démo sans déployer :
ngrok http 5173
# Envoyez l'URL à votre client — il voit votre Vite dev server en direct
Exposer une API locale pour un partenaire :
ngrok http 8080 --host-header="localhost:8080"
Interface d’inspection
ngrok embarque une interface web à http://localhost:4040 qui affiche chaque requête entrante : headers, body, réponse. Vous pouvez rejouer une requête d’un clic — pratique quand vous déboguez un webhook qui a échoué.
+ Les points forts
- Zéro configuration réseau — pas de port forwarding, pas de VPN, fonctionne derrière n’importe quel NAT ou firewall
- HTTPS automatique — le tunnel est chiffré, certificat valide inclus
- Interface d’inspection — voir et rejouer chaque requête en temps réel
- Fonctionne partout — macOS, Linux, Windows, même dans WSL
- Domaines personnalisés — avec un plan payant, votre URL reste fixe entre les sessions
- Les points faibles
- URL aléatoire à chaque démarrage — sur le plan gratuit, l’URL change à chaque
ngrok http. Vous devez reconfigurer le webhook à chaque fois - Limite de connexions simultanées — le plan gratuit est limité à 1 tunnel actif et 40 connexions/minute
- Dépendance à un service tiers — le trafic transite par les serveurs ngrok. À éviter pour des données sensibles en production
- Latence ajoutée — le tunnel ajoute quelques dizaines de ms
Alternatives
- Cloudflare Tunnel (
cloudflared) — gratuit, sans limite de durée, domaine fixe avec votre propre domaine Cloudflare - bore — open source, auto-hébergeable
- localtunnel — simple, sans inscription, mais moins fiable
En résumé
ngrok est l’outil de référence pour exposer un port local. Pour un usage ponctuel sur des webhooks de développement, il n’a pas d’équivalent en simplicité. Pour un usage régulier avec une URL fixe, Cloudflare Tunnel est une meilleure option à long terme.
Voir aussi :