Despliegue de una aplicación JavaScript en VPS: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué VPS es la mejor opción para producción

Desarrollar una aplicación JavaScript en Node.js es solo la mitad del trabajo. La segunda parte, igualmente importante, es el deploy en un servidor de producción. Muchos desarrolladores principiantes usan hosting gratuitos (Heroku, Render, Vercel), pero para proyectos serios, tarde o temprano necesitarás un VPS (Virtual Private Server).

VPS te da control total sobre el entorno: tú mismo eliges la versión de Node.js, configuras el servidor web, gestionas procesos y recursos. En este artículo, analizaremos el proceso paso a paso para hacer deploy de una aplicación JavaScript en un VPS usando herramientas modernas: Nginx como reverse proxy, PM2 para la gestión de procesos, Let's Encrypt para SSL y GitHub Actions para automatización.



Paso 1: Preparación del servidor e instalación del software necesario

El primer paso es conectarte a tu VPS (generalmente por SSH) e instalar el conjunto básico de herramientas. Supongamos que usas Ubuntu 22.04 LTS.

# Actualizamos paquetessudo apt update && sudo apt upgrade -y

# Instalamos Node.js (recomendado a través de NodeSource)curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -sudo apt install -y nodejs

# Verificamos versionesnode -vnpm -v

# Instalamos Git (si aún no está instalado)sudo apt install git -y

# Instalamos Nginxsudo apt install nginx -y

También es obligatorio configurar el firewall básico (UFW):

sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enable


Paso 2: Clonar el repositorio y configurar la aplicación

Ahora necesitas transferir el código de la aplicación al servidor. La forma más sencilla es clonar el repositorio desde GitHub/GitLab.

# Vamos al directorio /var/www (estándar para proyectos web)cd /var/www

# Clonamos el repositorio (reemplaza con tu URL)sudo git clone https://github.com/tu-usuario/tu-repositorio.git myapp

# Damos permisos al usuario actualsudo chown -R $USER:$USER /var/www/myapp

# Vamos a la carpeta de la aplicacióncd /var/www/myapp

# Instalamos dependenciasnpm install --production

Crea un archivo .env para las variables de entorno (puerto, claves API, cadena de conexión a la BD):

# Ejemplo .envPORT=3000NODE_ENV=productionDATABASE_URL=mongodb://localhost:27017/myappJWT_SECRET=tu-clave-secreta


Paso 3: Configurar PM2 para gestionar el proceso

PM2 es un gestor de procesos para Node.js que reinicia automáticamente la aplicación si falla y la mantiene funcionando en segundo plano.

# Instalamos PM2 globalmentesudo npm install -g pm2

# Iniciamos la aplicación (si el entry point es app.js o server.js)pm2 start app.js --name "myapp"

# Guardamos la lista de procesos para inicio automático al reiniciarpm2 savepm2 startup systemd

Después de ejecutar pm2 startup, verás un comando que debes ejecutar con permisos de root. Cópialo y ejecútalo.

Puedes verificar el estado con el comando pm2 status. Si la aplicación está en ejecución, estará disponible en http://tu-ip:3000 (puerto del .env).



Paso 4: Configurar Nginx como reverse proxy

El acceso directo a Node.js a través del puerto 3000 no es una buena práctica. Es mejor usar Nginx como servidor proxy, que recibirá las solicitudes en el puerto 80 (HTTP) y las redirigirá a tu aplicación.

Crea un archivo de configuración para tu dominio (o IP):

sudo nano /etc/nginx/sites-available/myapp

Pega el siguiente código:

server {    listen 80;    server_name tu-dominio.ru www.tu-dominio.ru;

location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connectio

Blogs

Book Recommendations