Cómo desplegar NestJS en un hosting compartido de Namecheap

Desplegar NestJS en un hosting compartido de Namecheap no es como desplegar un sitio estático o una aplicación PHP. No basta con subir los archivos y esperar que funcione.

Debes compilar TypeScript a JavaScript, instalar las dependencias de producción y usar cPanel para gestionar el proceso a través de Passenger.

Me enfrenté a carpetas vacías, archivos de compilación faltantes y conexiones de Redis rotas antes de encontrar la forma correcta. Aquí tienes el flujo de trabajo comprobado.

La lógica de la configuración

La solicitud sigue esta ruta: • Navegador o cliente de API • Dominio y HTTPS • Apache / Passenger en Namecheap • app.js (el puente) • dist/main.js (el código compilado) • Aplicación NestJS

Requisitos clave

• Una cuenta de hosting de Namecheap con soporte para Node.js • Acceso a cPanel y SSH/Terminal • Un proyecto NestJS funcional • Credenciales de producción para tu base de datos o Redis

Paso 1: Prepara tu código

No utilices un puerto fijo (hard-coded). En tu src/main.ts, utiliza process.env.PORT:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 4000);
}

Paso 2: Organiza las dependencias

Mueve los paquetes de tiempo de ejecución (runtime) como @nestjs/common y @nestjs/core a la sección dependencies en package.json. Si permanecen en devDependencies, tu aplicación fallará en producción.

Paso 3: Compila y crea el puente

Namecheap ejecuta JavaScript, no TypeScript. • Ejecuta npm run build localmente. • Verifica que dist/main.js exista. • Crea un archivo app.js en la raíz de tu proyecto con esta línea: require('./dist/main');

Este app.js actúa como el punto de entrada para Passenger.

Paso 4: Estrategia de despliegue

La forma más segura es compilar localmente y subir los artefactos: • Sube app.js • Sube la carpeta dist/ • Sube package.json y package-lock.json • En Namecheap, ejecuta: npm ci --omit=dev

Nunca subas tu carpeta node_modules local. Los módulos nativos compilados en tu computadora no funcionarán en un servidor Linux.

Paso 5: Configura cPanel

Ve a "Setup Node.js App" en cPanel: • Selecciona la versión correcta de Node.js. • Establece el modo en "Production". • Establece el "Application root" en tu carpeta. • Establece el "Application startup file" como app.js.

Paso 6: Variables de entorno

Añade tus secretos (como DATABASE_URL o claves de API) directamente en la interfaz de Node.js de cPanel. También puedes usar un archivo .env en la raíz, pero asegúrate de que no esté dentro de la carpeta dist. Reinicia la aplicación después de realizar los cambios.

Solución de problemas comunes

EADDRINUSE: Es probable que tengas un proceso manual en ejecución. Deja que Passenger gestione la aplicación. • Cannot find module: Falta tu compilación o la ruta en app.js es incorrecta. • Redis connection failed: Comprueba si Namecheap permite conexiones salientes en tu puerto de Redis. Es posible que debas pedir al soporte de Namecheap que lo abra.

Fuente: https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45