Introducción: del desarrollo a producción en VPS
El despliegue de una aplicación TypeScript en un VPS (Servidor Privado Virtual) es una etapa clave en el ciclo de vida de cualquier proyecto web. A diferencia de la simple colocación en un hosting compartido, un VPS brinda control total sobre el entorno, lo cual es crítico para las aplicaciones TypeScript modernas que funcionan con Node.js, Express, NestJS o Next.js.
En este artículo, exploraremos el proceso avanzado de despliegue: desde la compilación de TypeScript hasta la configuración del entorno de producción con reinicio automático, balanceo de carga y monitoreo. Aprenderá cómo convertir código sin procesar en un servicio que funcione de manera estable.
1. Preparación de la aplicación TypeScript para producción
1.1. Configuración de compilación y configuración
El primer paso es asegurarse de que su tsconfig.json esté optimizado para producción. Aquí está la configuración recomendada:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "lib": ["ES2020"], "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "declaration": true, "declarationMap": true, "sourceMap": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist", "tests"]}Agregue scripts de compilación e inicio en package.json:
{ "scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "ts-node src/index.ts", "clean": "rm -rf dist" }}1.2. Gestión de variables de entorno
Utilice archivos .env con la librería dotenv. Para producción, cree un archivo separado .env.production:
NODE_ENV=productionPORT=3000DB_HOST=localhostDB_PORT=5432DB_NAME=myapp_prodDB_USER=app_userDB_PASSWORD=secure_password_hereREDIS_URL=redis://localhost:6379Cargue la configuración según el entorno:
import dotenv from 'dotenv';import path from 'path';
const envFile = process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development';
dotenv.config({ path: path.resolve(__dirname, `../${envFile}`) });
export const config = { port: parseInt(process.env.PORT || '3000', 10), db: { host: process.env.DB_HOST || 'localhost', port: parseInt(process.env.DB_PORT || '5432', 10), name: process.env.DB_NAME || 'myapp', user: process.env.DB_USER || 'user', password: process.env.DB_PASSWORD || '', }, redis: { url: process.env.REDIS_URL || 'redis://localhost:6379', }, isProduction: process.env.NODE_ENV === 'production',};2. Configuración del VPS y despliegue de la aplicación
2.1. Configuración básica del servidor
Después de adquirir un VPS (recomendamos Ubuntu 22.04 LTS), realice la configuración inicial:
- Actualización de paquetes:
sudo apt update && sudo apt upgrade -y - Instalación de Node.js 20 LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs - Instalación de Git:
sudo apt install git -y - Creación de usuario:
sudo adduser deployer && sudo usermod -aG sudo deployer
2.2. Clonación y compilación del proyecto
Conéctese al servidor por SSH y ejecute:
# Cambiamos al usuariosudo -i -u deployercd ~
# Clonamos el repositoriogit clone https://github.com/your-username/your-app.gitcd your-app
# Instalamos dependenciasnpm ci --only=production
# Compilamos TypeScriptnpm run build
# Creamos el archivo .env para producciónnano .env.production2.3. Configuración de PM2 para la gestión de procesos
PM2 es un