Requisitos previos
- Un VPS funcionando con Ubuntu o Debian.
- Acceso SSH con privilegios de administrador.
- Conocimientos básicos de terminal Linux.
Paso 1: Instalar Node.js
Actualiza el sistema primero:
sudo apt update && sudo apt upgrade -y Instala Node.js desde el repositorio oficial de NodeSource (ajusta setup_18.x a la versión LTS que necesites):
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs Verifica que la instalación fue exitosa:
node -v
npm -v Paso 2: Instalar Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx Paso 3: Crear una aplicación Node.js de prueba
Crea un directorio para tu proyecto e inicialízalo:
mkdir ~/mi_app_node
cd ~/mi_app_node
npm init -y Instala Express, el framework web más usado en el ecosistema Node:
npm install express Crea un archivo index.js con una aplicación mínima:
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('¡Servidor Node.js funcionando correctamente!');
});
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
}); Inicia el servidor para probarlo:
node index.js Mantén tu app viva con PM2
Si ejecutas node index.js directamente, el proceso se detiene en cuanto cierras la sesión SSH. PM2 es un gestor de procesos diseñado específicamente para mantener aplicaciones Node.js corriendo en segundo plano, con reinicio automático ante fallos:
sudo npm install -g pm2
pm2 start index.js
pm2 startup El comando pm2 startup genera las instrucciones necesarias para que tu aplicación arranque automáticamente si el servidor se reinicia.
Paso 4: Configurar Nginx como proxy reverso
Crea un archivo de configuración dedicado para tu sitio:
sudo nano /etc/nginx/sites-available/mi_app_node Y define el bloque server que redirige el tráfico hacia tu aplicación Node.js, con soporte para WebSockets incluido:
server {
listen 80;
server_name tu_dominio.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
} Activa la configuración creando un enlace simbólico:
sudo ln -s /etc/nginx/sites-available/mi_app_node /etc/nginx/sites-enabled/ Verifica que la sintaxis sea correcta y reinicia Nginx:
sudo nginx -t
sudo systemctl restart nginx Sin este proxy reverso, tu aplicación Node.js quedaría expuesta directamente en el puerto 3000 sin ninguna capa intermedia de protección o terminación SSL.
Paso 5: Configurar el firewall
Permite únicamente el tráfico esencial: SSH y el tráfico web gestionado por Nginx.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status Nota que no necesitas abrir el puerto 3000 directamente: Nginx se encarga de recibir el tráfico externo y reenviarlo internamente hacia tu aplicación.
Paso 6: Configurar HTTPS con Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tu_dominio.com Verifica que la renovación automática funcione correctamente:
sudo certbot renew --dry-run Más allá de proteger a tus usuarios, servir tu aplicación por HTTPS también es una señal positiva para el posicionamiento en buscadores.
Paso 7: Optimizar Nginx para producción
Ajusta los tiempos de espera para evitar desconexiones prematuras en peticiones que tardan más de lo habitual:
server {
# ... resto de la configuración
proxy_read_timeout 90s;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
} Habilita compresión Gzip para reducir el tamaño de las respuestas transferidas:
sudo nano /etc/nginx/nginx.conf gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; sudo systemctl restart nginx Colocar Nginx como proxy reverso frente a Node.js te da lo mejor de ambos mundos: la velocidad y flexibilidad de Node para tu lógica de aplicación, y la robustez de Nginx para terminación SSL, compresión y una capa adicional de seguridad. Combinado con PM2 para mantener tu proceso siempre activo, tienes una base sólida y lista para producción. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.
LiteSpeed hosting, NVMe and 24/7 support from $3/mo.