CÓMO DESPLEGAR UNA APLICACIÓN NODE.JS EN PRODUCCIÓN
Introducción a cómo desplegar una aplicación Node.js
Desplegar una aplicación Node.js en un servidor de producción requiere una serie de pasos bien definidos para garantizar un entorno seguro, eficiente y escalable. Este tutorial te guiará desde la creación de un servidor en Digital Ocean, pasando por la configuración del sistema operativo, la instalación de herramientas esenciales como Nginx y Node.js, hasta la ejecución de tu aplicación como un proceso gestionado. Aunque el enfoque está en Node.js, muchos de los pasos son aplicables a otras aplicaciones web. Este proceso incluye la configuración de un servidor Ubuntu, la autenticación mediante claves SSH, la instalación de un proxy inverso con Nginx y la gestión de procesos con PM2. Si tienes conocimientos básicos de terminal y editores como Vi/Vim, estarás listo para seguir este tutorial. Los comandos se ejecutarán en un entorno Unix, pero puedes adaptarlos a Windows utilizando PowerShell o un emulador Unix.
Por qué elegir Digital Ocean para el despliegue
Digital Ocean es una opción popular para desplegar aplicaciones debido a su interfaz intuitiva, precios competitivos y facilidad de uso en comparación con plataformas como AWS. Ofrece máquinas virtuales denominadas Droplets, que son instancias de servidores compartidos o dedicados, ideales para proyectos personales, startups o aplicaciones de prueba. Los Droplets funcionan como máquinas virtuales, lo que permite escalar recursos como CPU y memoria según las necesidades. Además, Digital Ocean incluye créditos iniciales para nuevos usuarios, lo que reduce los costos iniciales, especialmente para desarrolladores que buscan experimentar con despliegue de aplicaciones.
Para comenzar, necesitas una cuenta en Digital Ocean. Una vez registrado, puedes crear un proyecto que contendrá tus Droplets. Desde el panel de control, selecciona la opción para crear un nuevo proyecto, asigna un nombre descriptivo y omite la asignación de recursos si es un proyecto nuevo.
# Ejemplo de navegación en el panel de Digital Ocean
# Crear un proyecto: Seleccionar "New Project" en el menú lateral
# Asignar nombre: "MiAplicacionNode"
Creación de un Droplet en Digital Ocean
Un Droplet es la unidad básica de un servidor en Digital Ocean. Para crearlo, selecciona la opción “Get Started” en tu proyecto. Debes elegir una imagen para la máquina virtual; en este caso, Ubuntu 22.04 LTS (versión más reciente con soporte a largo plazo en 2025) es la opción recomendada por su estabilidad y amplia comunidad. Las versiones LTS garantizan actualizaciones y soporte durante varios años, lo que las hace ideales para entornos de producción.
Selecciona el plan más económico si estás probando, aunque para proyectos más grandes, considera opciones con CPU dedicada. Elige una región de datacenter cercana a tu ubicación para minimizar la latencia. Por ejemplo, si estás en Europa, selecciona un datacenter en Frankfurt o Londres.
# Configuración recomendada para el Droplet
Imagen: Ubuntu 22.04 LTS
Plan: Básico ($5/mes para pruebas)
Región: Cercana a tu ubicación
Para la autenticación, selecciona claves SSH en lugar de contraseñas, ya que ofrecen mayor seguridad. Esto requiere generar una clave SSH en tu máquina local y añadirla a Digital Ocean.
Generación de una clave SSH
Las claves SSH son esenciales para una conexión segura al servidor. En un entorno Unix (como macOS o Linux), abre una terminal y accede al directorio .ssh:
cd ~/.ssh
Genera una clave SSH con el siguiente comando:
ssh-keygen
Presiona Enter para aceptar los valores predeterminados (nombre de archivo id_rsa y sin contraseña, aunque puedes añadir una para mayor seguridad). Esto generará dos archivos: id_rsa (clave privada) y id_rsa.pub (clave pública). Puedes verificar los archivos generados:
ls
# Salida esperada
id_rsa id_rsa.pub
Si usas Windows, consulta la documentación de Digital Ocean para generar claves con herramientas como PuTTY o PowerShell.
Añadir la clave SSH a Digital Ocean
Copia la clave pública (id_rsa.pub) desde tu máquina local. Puedes verla con:
cat ~/.ssh/id_rsa.pub
Copia todo el contenido, incluyendo ssh-rsa. En el panel de Digital Ocean, ve a la sección de SSH Keys, selecciona “New SSH Key”, pega la clave y asigna un nombre descriptivo. Esto permitirá que el servidor autentique tu conexión usando la clave privada correspondiente.
Conexión al servidor mediante SSH
Con el Droplet creado, obtén su dirección IP desde el panel de Digital Ocean. Conecta al servidor con el siguiente comando, reemplazando IP_ADDRESS por la IP de tu Droplet:
ssh root@IP_ADDRESS
Si la conexión es exitosa, estarás en la terminal del servidor. En caso de errores, usa la opción -v para depuración:
ssh -v root@IP_ADDRESS
Configuración inicial del servidor
Antes de desplegar la aplicación, es fundamental configurar el servidor para garantizar seguridad y estabilidad.
Actualización de software
Actualiza los paquetes del sistema para evitar vulnerabilidades conocidas:
sudo apt update
Esto lista los paquetes disponibles. Luego, actualiza los paquetes instalados:
sudo apt upgrade
Confirma con y cuando se te solicite. Este paso asegura que el servidor use las versiones más recientes de los paquetes.
Creación de un usuario no root
Conectarse como root es arriesgado, ya que este usuario tiene privilegios ilimitados. Crea un usuario con privilegios limitados para operaciones diarias:
adduser usuario_ejemplo
Sigue las instrucciones para establecer una contraseña y completar los campos opcionales. Luego, añade el usuario al grupo sudo para permitir comandos administrativos:
usermod -aG sudo usuario_ejemplo
Cambia al nuevo usuario:
su usuario_ejemplo
Verifica que el usuario tiene permisos sudo:
sudo whoami
# Salida esperada
root
Configuración de SSH para el nuevo usuario
Para permitir conexiones SSH con el nuevo usuario, copia la clave pública al servidor. Crea el directorio .ssh en el nuevo usuario:
mkdir -p ~/.ssh
Crea el archivo authorized_keys con Vi/Vim:
vi ~/.ssh/authorized_keys
Pega la clave pública (id_rsa.pub) desde tu máquina local, guarda el archivo (:wq) y ajusta los permisos:
chmod 644 ~/.ssh/authorized_keys
Conecta al servidor con el nuevo usuario:
ssh usuario_ejemplo@IP_ADDRESS
Deshabilitar el acceso root
Para mayor seguridad, deshabilita el acceso root vía SSH. Edita el archivo de configuración de SSH:
sudo vi /etc/ssh/sshd_config
Busca la línea PermitRootLogin y cámbiala a:
PermitRootLogin no
Guarda los cambios y reinicia el servicio SSH:
sudo service ssh restart
Instalación de Node.js y Git
Instala Node.js y npm para ejecutar tu aplicación, junto con Git para clonar repositorios:
sudo apt install nodejs npm
sudo apt install git
Verifica las versiones instaladas:
node -v
npm -v
Creación y prueba de una aplicación Node.js
Crea un directorio para tu aplicación y un archivo de prueba:
mkdir /var/www/app
cd /var/www/app
vi app.js
Añade el siguiente código para una aplicación Express básica:
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("¡Hola, mundo!");
});
app.listen(port, () =>
console.log(`Aplicación escuchando en el puerto ${port}!`)
);
Instala Express:
npm install express
Ejecuta la aplicación:
node app.js
Verifica que funcione enviando una solicitud a http://IP_ADDRESS:3000 desde un navegador o cliente HTTP como Postman. Deberías ver “¡Hola, mundo!”.
Instalación y configuración de Nginx como proxy inverso
Los usuarios no suelen acceder a puertos específicos como el 3000. Configura Nginx como proxy inverso para redirigir las solicitudes del puerto 80 al puerto 3000.
Instala Nginx:
sudo apt install nginx
Inicia el servicio:
sudo service nginx start
Verifica que Nginx esté funcionando visitando http://IP_ADDRESS en tu navegador, donde deberías ver la página predeterminada de Nginx.
Configura el proxy inverso editando el archivo de configuración:
sudo vi /etc/nginx/sites-available/default
Modifica el bloque location /:
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Reinicia Nginx para aplicar los cambios:
sudo service nginx reload
Ahora, las solicitudes a http://IP_ADDRESS se redirigen a tu aplicación Node.js.
Gestión de la aplicación con PM2
Para garantizar que tu aplicación se reinicie automáticamente tras errores o reinicios del servidor, usa PM2, un gestor de procesos para Node.js.
Instala PM2 globalmente:
sudo npm install -g pm2
Inicia tu aplicación con PM2:
pm2 start app.js
Guarda la lista de procesos:
pm2 save
Configura PM2 para iniciarse con el sistema:
pm2 startup systemd
Sigue las instrucciones que PM2 muestra para completar la configuración. Reinicia el servidor para probar:
sudo reboot
Tras el reinicio, verifica que la aplicación sigue funcionando visitando http://IP_ADDRESS.
Conclusiones
Desplegar una aplicación Node.js en un servidor de producción implica configurar un entorno seguro y eficiente, desde la creación de un Droplet en Digital Ocean hasta la gestión de procesos con PM2. Este tutorial cubrió la selección de un sistema operativo, la configuración de claves SSH, la instalación de herramientas esenciales como Node.js, Git y Nginx, y la automatización del despliegue con PM2. Al seguir estos pasos, puedes tener una aplicación Node.js funcionando en un servidor accesible desde cualquier navegador, con medidas de seguridad como la deshabilitación del acceso root y la autenticación SSH. Este proceso no solo es aplicable a Node.js, sino que puede adaptarse a otros frameworks y lenguajes, lo que lo convierte en un conocimiento valioso para cualquier desarrollador web. Continúa explorando temas como la conexión de dominios o la integración continua para optimizar aún más tus despliegues.