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

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 solución ideal para tu aplicación Node.js?

\n

Has escrito una aplicación genial en JavaScript (Node.js), la has probado localmente, y ahora quieres que esté disponible en internet 24/7. El hosting compartido a menudo no es adecuado para Node.js debido a sus limitaciones, y los servicios en la nube (Heroku, Railway) pueden ser caros o impredecibles en términos de rendimiento. Un Servidor Privado Virtual (VPS) es el punto medio ideal: control total, alto rendimiento y precio asequible.

\n

En esta guía paso a paso, desglosaremos el proceso de despliegue de una aplicación JavaScript (Node.js) en un VPS desde cero. Aprenderás cómo configurar el servidor, instalar el software necesario, ejecutar la aplicación de forma segura y hacerla accesible a través de un dominio. Todos los ejemplos de código son funcionales y probados.

\n\n

1. Preparación del servidor: configuración inicial del VPS

\n

Para empezar, necesitarás alquilar un VPS de cualquier proveedor (DigitalOcean, Vultr, Timeweb, Selectel). Características mínimas: 1 vCPU, 1-2 GB de RAM, 20-30 GB SSD. Sistema operativo: Ubuntu 22.04 LTS (la versión más estable).

\n\n

1.1. Conexión al servidor por SSH

\n

Después de obtener la dirección IP y la contraseña, nos conectamos al servidor a través de la terminal (Mac/Linux) o PuTTY (Windows):

\n
ssh root@tu_IP_del_servidor
\n

Cambiamos la contraseña inmediatamente y creamos un nuevo usuario (trabajar como root es una mala práctica):

\n
adduser deploy_user\nusermod -aG sudo deploy_user\nsu - deploy_user
\n\n

1.2. Actualización del sistema e instalación de paquetes básicos

\n
sudo apt update && sudo apt upgrade -y\nsudo apt install -y curl git ufw build-essential
\n

Configuramos el cortafuegos básico UFW (dejamos solo SSH y los puertos que usaremos):

\n
sudo ufw allow OpenSSH\nsudo ufw allow 80/tcp\nsudo ufw allow 443/tcp\nsudo ufw enable
\n\n

2. Instalación de Node.js y del gestor de procesos PM2

\n

Para que la aplicación JavaScript funcione en el servidor, necesitaremos Node.js. Usamos el gestor de versiones oficial NodeSource para instalar la versión LTS más reciente:

\n\n

2.1. Instalación de Node.js (v20 LTS)

\n
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -\nsudo apt install -y nodejs
\n

Verificamos la instalación:

\n
node -v   # v20.x.x\nnpm -v    # 10.x.x
\n\n

2.2. Instalación y configuración de PM2

\n

PM2 es un gestor de procesos avanzado para Node.js. Reinicia automáticamente la aplicación si falla, gestiona los registros y permite ejecutar múltiples instancias (clustering).

\n
sudo npm install -g pm2
\n

Configuramos el inicio automático de PM2 al reiniciar el servidor:

\n
pm2 startup systemd\nsudo env PATH=$PATH:/usr/bin pm2 startup systemd -u deploy_user --hp /home/deploy_user
\n\n

3. Despliegue de la aplicación y ejecución con PM2

\n

Ahora estamos listos para transferir tu aplicación JavaScript al servidor. Hay dos métodos populares: a través de Git (recomendado) o mediante SCP/FileZilla.

\n\n

3.1. Clonación del repositorio (Git)

\n
cd /home/deploy_user\ngit clone https://github.com/tu_usuario/tu_repositorio.git myapp\ncd myapp
\n

Instalamos las dependencias y compilamos el proyecto (si es necesario):

\n
npm install\n# Si hay un script de compilación: npm run build
\n\n

3.2. Creación del archivo de configuración .env

\n

Nunca guardes secretos en el código. Crea un archivo .env en la carpeta del proyecto:

\n
nano .env
\n

Ejemplo de contenido:

\n
PORT=3000\nNODE_ENV=production\nDATABASE_URL=mongodb://localhost:27017/myapp\nJWT_SECRET=tu_súper_secreto
\n\n

3.3. Ejecución de la aplicación con PM2

\n

Supongamos que el punto de entrada de tu aplicación es app.js o server.js. Lo ejecutamos:

\n
pm2 start app.js --name "myapp"
\n

Verificamos el estado:

\n
pm2 status\npm2 logs myapp                

Blogs

Book Recommendations