Curso de Deploy de Aplicaciones NodeJS

Aprende a llevar a producción aplicaciones NodeJS, mediante varias alternativas y las mejores prácticas
Material disponible
Intermedio
46 Clases 10 h
100€
75€
Precio en promoción
Este curso empieza justo donde acaban los demás cursos de NodeJS: aprendiendo a desplegar aplicaciones construidas con NodeJS, mediante diversas aproximaciones que irán incrementando sus ventajas progresivamente.

Generalmente en un curso de NodeJS se enseña a construir aplicaciones en este entorno, ya sean sitios, servicios web, etc. Sin embargo en esta ocasión vamos a partir del supuesto que los estudiantes son capaces de construir aplicaciones y vamos centrarnos en enseñar a desplegarla de diversos modos, que se pueden adaptar a diversas situaciones, infraestructura disponible o necesidades del proyecto. 

Qué aprenderé en el Curso de Deploy de Aplicaciones NodeJS

A lo largo de las clases del curso se abordarán diferentes alternativas posibles para el despliegue de proyectos NodeJS, desde un enfoque práctico. A lo largo de las sesiones del curso aprenderás:

  • Alternativas para deploy de proyectos en Node
    • Tipos de sistemas adecuados para el despliegue de aplicaciones en NodeJS. Configuraciones de servidor virtual (VPS) y despliegue de nuestra primera aplicación Node.
  • Configuración de procesos con PM2/Upstart
    • Presentación de las herramientas para la administración de procesos de Node. Escoger la cantidad de procesos y realizar la monitorización de los mismos.
  • Deploy automatizado de la aplicación NodeJS
    • Crear un sistema de deploy automatizado en la nube con AWS en EC2 instances, usando ELBs y el API de AWS.
  • Deploy con Docker
    • Dockerizar una aplicación y realizar el deploy, aplicando balanceo de carga mediante el orquestador de contenedores Kubernetes.
  • Deploy en Heroku
    • Despliegue de aplicaciones en NodeJS sin necesidad de configurar nuestra propia infraestructura, usando servicios en la nube de Heroku.
  • Firebase Cloud Functions
    • Despliegue de aplicaciones serverless, mediante el servicio de Firebase Cloud Functions.

Objetivos del curso

El objetivo es que los estudiantes no se sientan perdidos al acabar su curso de NodeJS y que sean capaces de aprovechar las características de este entorno de ejecución, así como la infraestructura adecuada para su despliegue, ya sean en servidores dedicados, VPS o servidores cloud, incluso en plataformas en las que no se gestiona un servidor (serverless).

Después de este curso los estudiantes conocerán y sabrán implementar una variada gama de posibilidades para poner en producción aplicaciones NodeJS de diversas maneras, de modo que podrán escoger la que mejor se adapte a diversos tipos de proyectos.

Clases y contenidos

Despliegue de app NodeJS en un VPS

Creación de un servidor privado virtual (VPS): instalación de todo el software en el servidor y despliegue de la app bajo HTTPS.

Presentación del curso y opciones de hosting cloud para NodeJS
  • Introducción y alternativas para el alojamiento de aplicaciones realizadas en NodeJS.
  • Opciones cloud computing en diversos tipos de clientes y de proyectos.
Crear un servidor VPS con Digital Ocean

En el primer bloque del vídeo se enumeran los temas que se van a desarrollar en esta clase. Luego veremos cómo crear un servidor privado virtual (VPS) con Digital Ocean. Comenzamos con este proveedor, que nos permite unas opciones básicas de cloud computing, muy fáciles de configurar y altamente amistosas para desarrolladores. Está orientado para proyectos pequeños o medianos y clientes con necesidades básicas y un control de presupuesto bajo. Lo que se conoce como VPS de manera genérica en Digital Ocean le denominan Droplet. Crearemos un primer droplet, explicando diferentes opciones y configuraciones.

Generar la SSH Key

Cómo generar una llave SSH en nuestro ordenador local. Cómo configurar esta llave para que sirva de acceso al droplet que estamos creando dentro de Digital Ocean.
Con este paso se completa el proceso de creación de la máquina virtual (VPS, Droplet) en Digital Ocean

Acceso SSH y bloquear acceso root

En este vídeo realizamos un primer acceso a la máquina virtual creada en Digital Ocean.
Se explicará cómo crear un nuevo usuario en el servidor, al que le daremos permisos para realizar tareas como superusuario (con sudo). Luego, por motivos de seguridad, se bloqueará el acceso root en el servidor.

Instalar NodeJS en el servidor

En este vídeo explicamos cómo se instala NodeJS en el servidor creado. Veremos cómo descargar NodeJS de los repositorios de Linux específicos para nuestra distribución y cómo instalar la plataforma Node en la máquina virtual.

Crear una app con Node y subirla al servidor Gratis

Realizaremos una aplicación elemental con NodeJS, en local. Una vez creada se subirá a un repositorio Git remoto y se publicará en el servidor clonando el respositorio. Una vez publicada se podrá acceder a través de la IP del servidor y el puerto usado en la app.

Configurar un nombre de dominio

En este vídeo se muestra cómo se puede registrar un dominio, en este caso gratuito, para nuestra aplicación. Cómo asociar al dominio la IP del servidor. Posteriormente se muestra cómo configurar el dominio también en el panel de control de Digital Ocean y cómo usando ese nombre de dominio somos capaces de acceder al servidor y nuestra app, por el puerto configurado.

Servir la app Node desde el puerto 80

Solamente a modo informativo, se muestra la posibilidad de configurar una aplicación creada por nosotros en NodeJS mediante el puerto 80. Se explica que el puerto 80 está reservado por el sistema operativo, por lo que este modo de actuar no es realmente recomendable y será mejorado en el siguiente vídeo.

Usar Nginx como proxy inverso

En esta sección de la clase 1 se muestra cómo usar el servidor web Nginx como proxy inverso (reverse proxy). Es la manera adecuada de permitir que nuestra web se sirva a partir del puerto 80, aunque nuestra app esté escuchando realmente en otro puerto como el 3000. El proxy inverso será la vía que permitirá más tarde hacer el balanceo de carga mediante el propio Nginx.

Balanceo de carga entre procesos Node

En este momento tenemos Nginx configurado como proxy inverso, así que podemos usar el servidor web para permitir el balanceo de carga entre procesos Node. Mejoraremos el código de la aplicación para que seamos capaces de levantar varias instancias de la APP, en procesos NodeJS distintos, que escuchen en puertos distintos. Configuraremos Nginx para que se pueda balancear la carga entre los distintos procesos con las instancias de la aplicación.

Configurar el peso y algoritmo para el balanceo de carga

Ahora vamos a aprender a configurar Nginx para alterar la manera de trabajar con el balanceo de carga, cambiando el algoritmo usado en el balanceo y cambiando el peso de cada proceso de Node, de modo que se use más uno que otro.

Generar y configurar SSL con LetsEncrypt

Generar un certificado SSL para usar en nuestra app, de manera que podamos servirla a través de https. Usaremos Let's Encrypt, ya que nos permite generar los certificados de seguridad de manera muy sencilla y gratuita. Instalaremos el certificado de seguridad en la configuración de Nginx y accederemos a la aplicación mediante https://

Gestión de los procesos Node

Gestión de los procesos de la aplicación NodeJS con Forever y PM2, monitorización y balanceo.

Ejecutar procesos NodeJS con Forever

Explicamos una herramienta necesaria para mantener activos los procesos NodeJS que ponen en marcha una aplicación. Existen varias alternativas y en este curso vamos a ver un par de ellas. La más sencilla, a la que dedicamos este vídeo, es Forever.

  • Qué es Forever y por qué lo necesitamos
  • Correr procesos con Forever
  • Consultar los log de las aplicaciones
  • Configurar los procesos a ejecutar en un JSON
Introducción a PM2

Qué es PM2 y cuáles son sus comandos principales para comenzar a trabajar. Crear procesos y pararlos, listar procesos y otras acciones básicas.

Herramienta básica de monitorización

Dentro de PM2 podemos obtener una pantalla para la monitorización rápida de la aplicación, visible desde la línea de comandos. Permite ver los procesos del servidor donde se lance el comando "pm2 monit".

Cluster de procesos con pm2 y otras opciones

En este vídeo vamos a ver cómo con PM2 podemos controlar un cluster de procesos, instancias de una misma aplicación.

  • Cómo crear procesos con un cluster, desde comandos de terminal PM2
  • Cómo borrar todos los procesos
  • Motivos por los que un cluster puede venirnos bien
  • Opciones para restaurar los procesos al arranque del sistema
Monitorización avanzada con Keymetrics

Keymetrics, los creadores de PM2 tienen un servicio que ofrece una cantidad de estadísticas detalladas sobre el funcionamiento de la aplicación, en tiempo real. Veremos qué ofrece Keymetrics y cómo usar Keymetrics para obtener información de uso de la app.

Deploy en cloud con Heroku

Cómo usar Heroku para el despliegue de una aplicación NodeJS en cloud, sin necesidad de un servidor.

Introducción a Heroku: Crear una app Gratis

Vemos qué es Heroku, las diferencias con respecto a otras alternativas para despliegue de aplicaciones NodeJS y los motivos que nos pueden hacer decidirnos, o no, por esta empresa de infraestructura.

Conocemos su dashboard y creamos una primera aplicación en Heroku.

Configuración del deploy en Heroku

Una vez creada nuestra primera aplicación, vamos a mostrar los pasos que podemos hacer para configurar el deploy de una aplicación.

Usaremos un repositorio de GitHub en el que hayamos colocado nuestro código. El primer deploy se activa de manera manual y a partir de ahí, en las siguientes ocasiones que se publique código en la rama concreta del repositorio, el deploy se realizará de manera automática.

Elementos de una aplicación Heroku

En este vídeo repasamos diversos conceptos y terminología que son propios de Heroku y que conviene saber, pues ellos tienen una manera particular de llamar a las cosas, que usan en el dashboard y en la documentación.

Conocemos el archivo Procfile, que informa a Heroku características concretas de nuestra aplicación. Vemos cómo crear servicios que se pueden acceder de manera pública, a través de HTTP.

Activity y logs de una app Heroku

A través del dashboard podemos acceder al registro de actividad y los logs de las aplicaciones Heroku. Esto es importante, ya que al servidor no se puede acceder mediante consola y es la forma que ellos nos aportan para poder observar las cosas que están pasando dentro.

Como demostración se realizan algunos deploys automatizados y se observa el registro de actividad de la app. A través del registro de logs se observa qué salida se ha enviado a la consola mediante los típicos console.log de Node.

Settings de la aplicación Heroku y configuración de dominio personalizado

En esta sección vemos qué cosas se pueden configurar en una aplicación, en la pestaña de settings, haciendo especial énfasis en dos asuntos importantes:

  1. Las variables de entorno del sistema, mediante las cuales podemos configurar cosas diversas e importantes que no queremos que estén en el código enviado a GitHub, como es el caso de las claves de acceso a servicios y bases de datos.

  2. El dominio personalizado de la aplicación. Se muestra cómo configurar nuestro propio dominio para que el servidor responda a él.

Addons de Heroku

En este punto se tratan toda una serie de servicios relacionados con aplicaciones Heroku, que no sería adecuado instalar en los propios Dynos, ya que el sistema de archivos de un Dyno es efímero.

Heroku y una serie de proveedores asociados ofrecen cantidad de servicios en la nube, no solo para aplicaciones NodeJS, sino para cualquier lenguaje. Ejemplos son bases de datos, sistemas de almacenamiento, manipulación de archivos, sistemas de logs, monitorización y un largo etc.

Notas sobre balanceo de carga de Dynos Heroku

Aunque no se trata como contenido de esta clase, sí que se explica qué se necesita para implementar un balanceo de carga de nuestra aplicación en Heroku. Heroku en los planes profesionales cuenta con un autoescalado que se puede configurar de manera sencilla.

Se finaliza la clase resolviendo dudas diversas.

Amazon AWS y automatización del despliegue

Creación de infraestructura en Amazon y automatización de los deploys de las aplicaciones NodeJS con Jenkins. Funciones Lambda (Serverless en Amazon).

Creación de infraestructura en Amazon: VPC y subnets

En esta clase se crea de manera manual infraestructura en Amazon, para entender los conceptos y la arquitectura de cloud de este proveedor. En este vídeo se configurarán las cosas básicas necesarias para comenzar.

  • VPC: Creamos una red privada para nuestras máquinas virtuales.
  • Subnet: En este paso tenemos que realizar una agrupación de recursos dentro de la red privada. Por ejemplo para tener una subnet pública y otra subnet privada. Es una forma de separar las capas de la aplicación, manteniendo públicas solamente aquellas que sea conveniente.
Creación de máquinas virtuales en Amazon

En esta sección vamos a crear máquinas virtuales en la infraestructura de red anterior. En los siguientes pasos veremos cómo se crean máquinas virtuales gratuitas, basadas en Linux para nuestras aplicaciones Amazon.

En las máquinas creadas definimos un script de configuración, que se ejecutará la primera vez que arranca la máquina y que automáticamente descargará una aplicación de su repositorio y la desplegará en el servidor recién creado.

Veremos cómo es un script básico para el despliegue automatizado, como se instalan dependencias y cómo se clona un repositorio de Git.

También se configura el security group para indicar qué puertos van a estar abiertos.

Creación automatizada de infraestructura en Amazon con Terraform

Conocemos el lenguaje Terraform, que nos permite crear infraestructura en varios proveedores de cloud, incluido Amazon, mediante código. Veremos cómo podemos hacer todo el proceso anterior visto en clase, en pocos instantes, mediante la ejecución de un script automatizado.

Configuración de balanceo de carga entre máquinas y autoescalado con Terraform

En esta sección creamos con Terraform nuevos scripts que nos permiten automatizar procesos un poco más complejos, enfocados en el escalado de servicios. En Amazon es posible definir un autoescalado, de manera que, cuando sea necesario, creará nuevas máquinas y cuando ya las máquinas no se necesiten, las dará de baja.

El autoescalado se puede configurar manualmente desde la página de Amazon, pero nosotros lo vamos a ver realizar de manera automatizada mediante scripts de Terraform.

Creación de un test de stress para la aplicación y comprobar el balanceo de carga

En este punto usamos un script para realizar un test de stress en la aplicación, lo que nos permitirá ver si está funcionando nuestro balanceo de carga.

Veremos los tiempos de ejecución, tiempos de respuesta, etc. de nuestra aplicación, lo que es muy interesante para medir el rendimiento de la aplicación.

Deploy de la aplicación desde Jenkins

Explicamos Elastic Beanstalk de Amazon, una forma automática de crear y configurar todos los puntos vistos anteriormente en esta clase. Útil para aplicaciones sencillas que no interactúan con otros servicios de Amazon.

Veremos cómo podremos definir en el sitio de Amazon, de manera manual pero muy sencilla, un sistema de servidores con autoescalado y otra serie de cosas muy interesantes, sin tener que lidiar con diversas complejidades del proveedor cloud.

Luego veremos un script pipeline de Jenkins en el que podremos ver cómo realizar toda la automatización del deploy sobre los servidores de Amazon provisionados con Elastic Beanstalk.

Lambda functions de Amazon con deploy vía Jenkins

En el último bloque de esta clase de automatización de despliegues en NodeJS vamos a abordar otro de los servicios de Amazon como las Lambda functions. Básicamente nos permite ejecutar funciones de NodeJS pero sin la necesidad de un servidor, algo conocido con el concepto de "serverless".

En la clase también usamos Jenkins para realizar el despliegue de las funciones lambda a Amazon.

Usar Docker para desplegar aplicaciones Node

Qué es Docker y Kubernetes, cómo usarlos para el despliegue de aplicaciones NodeJS en cluster.

Introducción a Docker

Docker permite una verdadera independencia entre las aplicaciones y la infraestructura, amistoso para los desarrolladores.

En este vídeo se explica brevemente qué es Docker y algunos de los conceptos básicos relacionados, con los contenedores.

Ejemplos prácticos con contenedores Docker

Explicamos qué es una imagen de Docker, cómo obtener imágenes y cómo crear contenedores a partir de ellas.

Mostramos diversos ejemplos en los que se crean contenedores y se ejecutan comandos a través de scripts en el archivo Dockerfile.

Comandos con contenedores Docker

Docker ofrece una serie de comandos básicos para la gestión de contenedores. Existen muchos comandos que se pueden usar, para saber qué contenedores existen, o existieron en el sistema, cuáles se están ejecutando, qué imágenes están disponibles, etc.

Veremos algunos ejemplos de gestión de contenedores por comandos de terminal, usando Docker.

Registro de imágenes con Docker Hub

El repositorio público de imágenes es Docker hub https://hub.docker.com/.

Las imágenes son importantes porque nos permiten guardar el estado de contenedores en un momento dado, de modo que se pueda recuperar ese estado para la creación de nuevos contenedores en cualquier momento.

Es posible tener un repositorio privado para almacenar la imágenes de las aplicaciones privadas.

Redes y contenedores

Explicamos cómo configurar el networking en contenedores Docker.

Cuando Docker se inicia, se crea una interfaz virtual llamada docker0 en el equipo host. Se asigna al azar una dirección y subred del rango privado definido por RFC 1918 que no están en uso en la máquina host, y lo asigna a docker0.

En este vídeo se muestran varios ejemplos de configuración de red que pueden ser útiles en múltiples y habituales situaciones.

Docker volumes

Qué son los "Volumes" en Docker, espacios de almacenamiento que no se destruyen aunque los contenedores desaparezcan. Por qué son importantes en el trabajo con contenedores y Docker. Mostramos cómo crear un volumen y cómo crear un contenedor que hace uso de ese volumen. Mostramos que, a pesar que el contenedor se destruya en un momento dado, podemos seguir accediendo al volumen y su contenido.

Introducción a Kubernetes Gratis

En este vídeo vamos a ver qué es Kubernetes, herramienta esencial para desplegar aplicaciones en contenedores, aprovechando todas las ventajas de Docker. Se resumen algunas de las funciones de Kubernetes y los motivos por los que esta herramienta forma una parte tan fundamental del tooling con Docker. Además se ve otra herramienta que usa Kubernetes para crear un cluster de contenedores de una manera sencilla y visual: Tectonic. En los siguientes vídeos usaremos Kubernetes a través de Tectonic.

Cluster de contenedores Docker con Kubernetes

Cómo se crea un cluster de contenedores con Kubernetes, ayudados mediante la interfaz gráfica y de administración que nos proporciona Tectonic.

Vemos también el proceso de escalar y reducir el número de contenedores del cluster.

Deploy con Kubernetes y prueba de carga

En este segundo vídeo de Kubernetes vemos otro ejemplo de despliegue de una aplicación NodeJS. Además vemos cómo realizar una prueba de carga y visualizar los valores que nos ofrece Tectonic de una forma gráfica, sobre los contenedores y su uso.

Finalizamos la clase con una serie de preguntas diversas.

Firebase Cloud Functions

Qué ofrecen las Cloud Functions de Firebase, cómo desarrollar y desplegar funciones cloud NodeJS en los servidores de Google.

Introducción a Firebase Cloud Functions Gratis

Qué es Cloud Functions, qué necesidades resuelve en el marco del desarrollo de apps y Firebase. Qué ventajas obtenemos al usar Cloud Functions y que tipos de usos podemos darle a esta alternativa para la creación de código NodeJS para Backend.

Este vídeo es más bien teórico, por lo que si ya conoces Cloud Functions te lo podrías saltar. Aunque seguramente aún así sería útil, pues da una buena cantidad de ideas interesantes para las que vendría bien usar tu propio backend con Cloud Functions.

Primeros pasos con Cloud Functions

Cómo comenzar a usar Cloud Functions en un proyecto de app Firebase, instalando las dependencias necesarias en el proyecto mediante las herramientas Firebase-Tools. Cómo instalarlo en nuestro sistema, cómo generar código de una primera función. Cómo desplegar cloud functions y ver los logs (registros) en la consola de Firebase.

Firebase Admin desde Cloud Functions

Firebase Admin es un módulo de NodeJS que contiene el código para poder usar la aplicación de Firebase desde el lado del backend, con permisos de super-usuario. Permite funciones especiales que no puedes hacer desde el frontend, y no necesita permisos de reglas de seguridad para poder trabajar.

Vemos cómo importar las firebase admin y cómo hacer un ejemplo de escritura en la base de datos, como respuesta a una request HTTPS.

Eventos de base de datos en Cloud Functions

En este vídeo introducimos el uso de eventos de servicios de Firebase y cómo reaccionar a ellos desde las Cloud Functions. Vemos un ejemplo sobre cómo reaccionar a eventos surgidos en la base de datos en tiempo real de Firebase. Esos eventos pueden ser de varios tipos, creaciones, escrituras, borrados y vemos un par de ejemplos diferentes en nuevas funciones.

Eventos de autenticación de usuarios Firebase

En este vídeo se muestra cómo administrar eventos de usuarios desde Cloud Functions, de modo que podamos guardar sus datos en la base de datos cuando se registran, o marcar a los usuarios como borrados cuando sus cuentas se dan de baja.

Veremos que este paso facilita mucho el código frontend, ya que nos aligera una parte importante dentro de los procesos de login, que antes deberíamos de implementar en cada plataforma frontal de desarrollo.

Ejecutar funciones Cloud en local

Este es el último vídeo de la parte de Cloud Functions, en el que se muestra cómo realizar un flujo de trabajo más optimizado en el día a día de desarrollo. Ejecutar las funciones en local permite probar nuestra cloud function antes de desplegarla, lo que es especialmente interesante, debido a que el proceso de despliegue es a veces un poco lento. Además, mediante este mecanismo podríamos hacer testing de funciones, tanto como respuesta a endpoints HTTPS como a eventos de servicios de Firebase.

Valoraciones

Francisco José Reyes

Javier Riera Peiro

Erik Ramírez

Bernat tomas pujadas

Marcelino Dosil Arcos

¿Conoces nuestra tarifa plana?

Toda la formación de EscuelaIT, con más de 200 cursos completos para aprender las más variadas tecnologías de programación, diseño y marketing online. Todo! con tu suscripción.

Suscríbete