Cover Image

Haciendo que tu ambiente de desarrollo esté disponible en internet usando tunneling

February 23, 2020 - Reading time: 7 minutes

Imagen por Aaron Burden en Unsplash

Si has llegado hasta aquí es porque seguramente necesitas poner tu ambiente local en internet, quizás porque necesitas probar algún webhook o cualquier otro método de verificación o notificatión desde un servidor público, con suerte ya sabrás que hay servicios como ngrok que hacen esto por ti en un sencillo paso.

Pues bien, esta es la historia de como yo estaba utilizando ngrok para hacer pruebas de integración con Stripe y como necesitaba hacer algo similar con Revolut, el problema es que ngrok solamente te permite utilizar una sola conexión a la vez cuando estás en plan gratuito y con ello vienen otras limitantes, como tener subdominios aleatorios cada vez que reinicias el servicio, en fin yo necesitaba algo similar y es por ello que decidí crear mi propio subdominio el cual apunta a mi equipo de desarrollo.

Básicamente todo funciona utilizando las conexiónes de túnel con SSH, ese es el principio básico y claro en lugar de pagar $10 USD al mes por un servicio, quizás podrías pagar lo mismo por un servidor privado (VPS) y crear cuantos subdominios necesites, entonces para empezar necesitarás un VPS con Linux instalado de preferencia.

Digamos que ya tienes tu servidor de VPS funcionando en la ip 111.111.111.111 y para iniciar será necesario que inicies sesión a través de SSH.

$ ssh [email protected]

Hay diferentes formas de conectarse a un servidor remoto, cada conexión es diferente dependiendo del proveedor que manejes, algunos solo requerirán que escribas una clave, otros que especifiques una llave u otros que simplemente no escribas nada porque tu llave pública ya se encuentra en el servidor remoto, en fin, todas las formas anteriores funcionan igual y al final darán el mismo resultado.

Entonces con la sesión iniciada en tu VPS, simplemente escribe el siguiente comando en la terminal, en caso de tener problemas, trata de localizar y abrir el archivo sshd_config para escribir al final del mismo "GatewayPorts yes", yo lo encontré en /etc/ssh/sshd_config por que estoy utilizando ubuntu.

$ echo "GatewayPorts yes" >> /etc/ssh/sshd_config

Reinicia el servicio de SSH y termina tu sesión.

$ service ssh restart
$ exit

Ahora deberías ser capaz de ejecutar un comando similar a este y adivina!!

$ ssh -R 8080:localhost:3000 [email protected]

Voilá, sabes qué has hecho? esto abrirá el puerto 8080 en tu servidor de VPS y redireccionará el tráfico de ese puerto hacia el puerto 3000 de tu computadora local, básicamente significa que tu puedes escribir en tu navegador http://111.111.111.111:8080 y efectivamente quien responderá será tu computadora.

Listo, funciona, pero yo sé que quieres más y que esto no se termina aqui, entonces digamos que quieres un subdominio y una conexión SSL.. venga, continuemos entonces.

La siguiente parte de este mini turorial se trata de crear un subdominio y asociarlo a tu VPS a través de la IP pública, imagino que ya sabes como hacerlo, así es que no entraré en detalle, esto depende más que nada de tu proveedor de servicio, yo utilizo AWS y administro todo a través de Route53.

Hasta este punto, tu debes tener entonces tu servidor VPS, redireccionando desde el puerto origen (8080) hacia el puerto destino (3000), entonces asumamos que el subdominio ya está creado y configurado para apuntar a tu VPS, lo que sigue entonces es configurar un servidor web con proxy reverso, yo te recomiendo utilizar Nginx, es sumamente sencillo instalarlo y configurarlo, incluso te comparto mi configuración:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

Después de guardar los cambios en el Nginx y reiniciar el servicio, que crees? funciona por supuerto!! tu servidor de VPS recibe el tráfico desde el subdominio y este lo redireccióna hacia 127.0.0.1:8080 el cual es tu computadora local, todo esto a través del túnel de SSH que creaste.

Si pruebas nuevamente en tu navegador a escribir en la barra de direcciones http://yoursubdomain.domain.com deberías ver funcionar nuevamente tu computadora local, atendiendo todas las peticiones enviadas a tu subdominio.

Y bueno, casi terminamos, lo único que hace falta es agregar un certificado de seguridad a tu subdominio y para ello yo te recomiendo que utilices certbot, es gratuito y lo tienes en un par se minutos (y clicks también), creo que no hay mucho que decir al respecto ya que es bastante sencillo y directo el como instalarlo, toda la documentación está en su sitio y básicamente una vez instalado certbot, ellos te guiarán con un pequeño wizard, sé que lo lograrás y al final tendrás tu dominio con SSL apuntando a tu máquina local.

About

After having lost my previous blog, this is a new intent to be back to writing content for the web, this site its a place to talk about stories, experiences and how I deal with my digital life.