26

Cómo hacer Debugging de una App Node.js en Docker

29390Puntos

hace un mes

Curso de Backend con Node.js
Curso de Backend con Node.js

Curso de Backend con Node.js

Crea aplicaciones backend utilizando Node.js, Express y Mongo. Entiende cómo funciona Javascript en un servidor y escribe aplicaciones con Node.js. Crea una API, manipula errores y valida tus datos con Express. Elabora pruebas para encontrar errores en tu código y finalmente pon tu aplicación en producción en un servicio web.

Hoy te voy a mostrar cómo hacer debugging con Visual Studio Code de una app hecha en NodeJS que corre dentro de un Docker container.

Pre-requisitos

Descargar el proyecto base

Nuestro proyecto es un sencillo servidor HTTP que lo único que hace es mostrar la ruta en la que se hizo la petición. Puedes clonar o bajar el zip de aquí.

El proyecto debe verse algo así:

initial-project.png

En nuestro caso no necesitamos correr npm install para instalar todas las dependencias ya que esto se hará en el Docker Container.

PASO 1: Crear y correr nuestro Docker Container

Primero Necesitamos un sistema Linux con NodeJS instalado, vamos a crearlo con el comando:

docker build -t http-server .

El comando anterior toma la configuración del Dockerfile para crear la imagen que necesitamos.

Ahora corremos nuestro contenedor con el comando:

docker run -p 3000:3000 -p 9229:9229 -v ${PWD}:/usr/httpServer -v /usr/httpServer/node_modules http-server

Explicación:

  • -p 3000:3000. Sirve para exponer el puerto 3000 del contenedor a nuestra máquina local, de otra forma no podríamos conectarnos al servidor web.
  • -p 9229:9229. Sirve para exponer el puerto 9229 del contenedor a nuestra máquina local, esto para conectarnos al web service que nos va a permitir hacer el debugging.
  • -v ${PWD}:/usr/httpServer. Crea un volumen que liga nuestros archivos con la ruta /usr/httpServer en el container, para que cuando hagamos cambios se vean reflejados.
  • -v /usr/httpServer/node_modules. Sirve para evitar que se copien los node_modules locales de nuestra máquina al container. No queremos sobreescribir dependencias.
  • http-server. Es el nombre de la imagen que queremos correr (previamente creada con el docker build).

¡Y listo!, podemos hacer un request a http://localhost:3000/

home-request.png

o a cualquier ruta, como por ejemplo LOLhttp://localhost:3000/lol

lol-request.png

PASO 2: Conectar el debugger de vsCode

Ya tenemos nuestra app corriendo en un Docker Container, ahora hay que conectar el debugger de vsCode. Para esto presionamos CMD/CTRL + SHIFT + p escribimos launch.json y damos enter.

launch.png

Seleccionamos Docker: Node.js

docker-nodejs.png

Ponemos la ruta /usr/httpServer

http-server.png

Esto va a crear un archivo launch.json al cual debemos agregar la siguiente configuración:

{
  // Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0",
  "configurations": [
    {
      "name": "Docker: Attach to Node", // Un nombre cualquiera"type": "node",
      "request": "attach",
      "remoteRoot": "/usr/httpServer", // Ruta dentro del Docker Container"localRoot": "${workspaceFolder}", // Ruta local"address": "localhost", // Para hacer testing local"port": 9229, // Puerto default del debugger"protocol": "inspector", // Tipo de protocolo"restart": true// Cada que hagamos cambio al servidor nodemon va hacer perder la conexón al debugger por eso hay que reiniciar automáticamente.
    }
  ]
}

Paso 3: Ejecutar nuestro servidor en Modo Inspector

Vamos a agregar --inspect al comando de nodemon en el archivo package.json

"scripts": {

"start": "nodemon --inspect=0.0.0.0 ./src/index.js"

},

Primer detenemos nuestro docker container y lo volvemos a correr con el comando docker run del Paso 1. Ahora vamos a vsCode, presionamos CMD/CTRL + SHIFT + p y escribimos Start Debugging.

Screen Shot 2019-08-14 at 11.07.16 AM.png

Y eso es todo, ya podemos poner breakpoints y hacer debug de nuestra aplicación como si estuviera corriendo directo en nuestra máquina y aprovechando todas las herramientas que proporciona Visual Studio Code.

Recuerda que estos sencillos pasos los puedes aplicar a cualquier proyecto hecho en NodeJS, si quieres aprender más te invito a ver el Curso de Backend con Node.js.

Curso de Backend con Node.js
Curso de Backend con Node.js

Curso de Backend con Node.js

Crea aplicaciones backend utilizando Node.js, Express y Mongo. Entiende cómo funciona Javascript en un servidor y escribe aplicaciones con Node.js. Crea una API, manipula errores y valida tus datos con Express. Elabora pruebas para encontrar errores en tu código y finalmente pon tu aplicación en producción en un servicio web.
Erik Elyager
Erik Elyager
@elyager

29390Puntos

hace un mes

Todas sus entradas
Escribe tu comentario
+ 2