A cosa serve
Quando si sviluppa un nuovo progetto software, una delle cose che ne determinano la riuscita è il feedback continuo del cliente, mostrargli gli avanzamenti in modo costante e continuo infatti, lo rende più partecipe e si riducono gli errori derivanti da requisiti non compresi a pieno.
Non a caso questo infatti è uno dei principi cardine di una tra le principali metodologie Agili, XP Programming che parla proprio di On site Customer.
Un altro ambito molto utile, potrebbe essere la condivisione con altri membri del Team di progetto della propria versione locale del prodotto, se lavorano in sedi differenti o come sempre più spesso accade in Remote Working.
Tunnel sicuri
Per risolvere queste problematiche una soluzione che ho scoperto da poco è il servizio ngrok.
Questo servizio, effettua un tunnel sicuro dell’indirizzo locale (localhost), anche se la propria rete è dietro un proxy oppure un firewall, cosa tipica nelle reti aziendali.
Ma andiamo subito a vedere come funziona, la prima cosa da fare come ovvio che sia, è il download del software per la propria piattaforma (Mac, Windows, Linux) da questo indirizzo.
Comando
Una volta scaricato e scompattato se lanciamo il comando senza parametri abbiamo questo risultato:
$ ./ngrok
NAME:
ngrok - tunnel local ports to public URLs and inspect traffic
DESCRIPTION:
ngrok exposes local networked services behinds NATs and firewalls to the
public internet over a secure tunnel. Share local websites, build/test
webhook consumers and self-host personal services.
Detailed help for each command is available with 'ngrok help <command>'.
Open http://localhost:4040 for ngrok's web interface to inspect traffic.
EXAMPLES:
ngrok http 80 # secure public URL for port 80 web server
ngrok http -subdomain=baz 8080 # port 8080 available at baz.ngrok.io
ngrok http foo.dev:80 # tunnel to host:port instead of localhost
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls -hostname=foo.com 443 # TLS traffic for foo.com to port 443
ngrok start foo bar baz # start tunnels from the configuration file
VERSION:
2.0.25
AUTHOR:
inconshreveable - <alan@ngrok.com>
COMMANDS:
authtoken save authtoken to configuration file
credits prints author and licensing information
http start an HTTP tunnel
start start tunnels by name from the configuration file
tcp start a TCP tunnel
test test ngrok service end-to-end
tls start a TLS tunnel
update update ngrok to the latest version
version print the version string
help Shows a list of commands or help for one command
Il semplice help del comando è di per sé molto esplicativo, lo scenario classico che andrà bene per molti progetti Web, è quello di avere un Web Server per esempio Apache, sulla porta standard 80, in questo caso basterà digitare questo comando:
./ngrok http 80
per mostrare al mondo il nostro capolavoro di progetto.
Nel mio caso specifico, di sviluppatore Java non utilizzo Apache2 per i miei siti bensì Tomcat che di default crea una connessione sulla porta 8080 quindi:
./ngrok http 8080
Una volta lanciato si presenta in questo modo:
ngrok by @inconshreveable (Ctrl+C to quit)
Tunnel Status reconnecting (dial tcp 198.58.96.133:443: ConnectEx tcp: i/o timeout)
Version 2.0.25/
Region United States (us)
Web Interface http://127.0.0.1:4040
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
In questo modo però il processo non è in background per lanciarlo in background, basterà aggiungere questo:
./ngrok http 8080 --log=stdout
tutto molto semplice ed immediato.
Se invece fossimo dietro ad un server proxy che non permette ad ngrok di connettersi, basta impostare la variabile d’ambiente in questo modo.
export http_proxy="http://username:password@host:port"
ngrok http 8080
Il servizio ngrok infatti, utilizza la variabile ambiente http_proxy in pieno stile linux (funziona anche su macchine Windows).
Proviamo a vedere cosa succede se decido di mostrare al mondo il mio blog direttamente dalla versione ospitata sulla mia macchina locale senza deploy su Github.
Il server Jekyll lanciato con il comando jekyll serve
si mette in ascolto su localhost:4000
andiamo a vedere come utilizzare ngrok:
./ngrok http 4000
ngrok by @inconshreveable (Ctrl+C to quit)
Tunnel Status online
Version 2.0.25/2.0.25
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://020de402.ngrok.io -> localhost:4000
Forwarding https:///020de402.ngrok.io -> localhost:4000
Connections ttl opn rt1 rt5 p50 p90
10 0 0.00 0.00 31.03 32.86
HTTP Requests
-------------
GET /public/favicon.ico 200 OK
GET /public/font-awesome/fonts/fontawesome-webfont.woff 200 OK
GET /assets/codemotion_2016_header.png 200 OK
GET /assets/jekyll_header.png 200 OK
GET /assets/rest_API.png 200 OK
GET /assets/ascatox.jpg 200 OK
GET /public/font-awesome/css/font-awesome.min.css 200 OK
GET /public/css/ascatox.css 200 OK
GET /public/css/syntax.css 200 OK
GET /public/css/poole.css 200 OK
Il mio sito jekyll locale è ora accessibile tramite due indirizzi pubblici della rete di ngrok http://020de402.ngrok.io e https://020de402.ngrok.io come si vede da queste immagini.
Una cosa per tutti coloro che storceranno il naso nel vedere gli indirizzi, ngrok è un servizio che offre dei piani a pagamento dove fornisce molte funzionalità aggiuntive,
tra le quali anche la possibilità di poter utilizzare degli indirizzi personalizzati.
Un’altra possibilità è quella di modificare gli indirizzi in modo da appartenere al proprio dominio come spiegato nell’apposita
documentazione.
Conclusioni
Questa è solamente una piccola introduzione al servizio ngrok, uno strumento molto potente che permette di gestire anche situazioni molto complesse come viene spiegato nella documentazione ufficiale e nelle FAQ e che in tantissime situazioni può davvero essere molto utile.
PS: Per chi vuole approfondire, consiglio questo post e questo che forniscono una guida esaustiva al servizio.
Interessante poi il post di Odino, che mostra l’utilizzo di ngrok all’interno di un container docker.
Stay Tuned!
Image Courtesy of ngrok.com
Source: antonioscatoloni.site
ciao, ho un problema,
il terminale mi dice command not found .. leggo online che devo posizionarlo in usr/local/bin
ma come faccio?
se ci provo mi dice permission denied!
🙁
prova così:
unzippa ngrok.zip dopo averlo scaricato,
poi apri il terminale e con il comando cd naviga fino alla directory dove si trova ngrok
esempio:
cd ~/downloads
oppure
cd /path/to/directory
quando sei nella directory giusta muovi il file con il comando mv, ma da super user, o da root come preferisci.. dunque digita:
sudo mv ngrok /usr/local/bin
il gioco è fatto