27

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

39085Puntos

hace 6 meses

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
Erik
@elyager

39085Puntos

hace 6 meses

Todas sus entradas
Escribe tu comentario
+ 2