POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Guía para Desplegar API NestJS con PostgreSQL en AWS Lightsail

## Guía para Desplegar API NestJS con PostgreSQL en AWS Lightsail

Publicado el 02/09/2025

Guía completa paso a paso para desplegar una API NestJS con base de datos PostgreSQL en AWS Lightsail, utilizando un subdominio gestionado por Cloudflare y reverse proxy con Nginx. Ideal para proyectos de aplicaciones a medida, software a medida y arquitecturas modernas en la nube con foco en rendimiento, seguridad y escalabilidad.

Objetivo final del despliegue en producción: API NestJS accesible bajo https://api.tudominio.com con base de datos PostgreSQL en contenedor, SSL gestionado por Cloudflare, documentación Swagger publicada y pipeline de actualización simple y repetible.

Requisitos previos: un servidor AWS Lightsail con Ubuntu, un dominio gestionado en Cloudflare, el proyecto NestJS alojado en GitLab y acceso SSH al servidor.

Preparación del proyecto en tu repositorio: estructura mínima recomendada en la raíz del repo con las carpetas y archivos src, package.json, Dockerfile, docker-compose.yml, .env.production, .dockerignore y .gitignore. Esta estructura facilita el build reproducible y la orquestación de servicios.

Dockerfile sugerido para producción con Node 20: base node 20, directorio de trabajo en app, copiar package.json y package lock, instalar dependencias con npm ci, copiar el código, compilar con npm run build, eliminar dependencias de desarrollo con npm prune --production, exponer el puerto 3000 y arrancar con npm run start:prod.

Orquestación con docker compose: un servicio postgres con imagen postgres 15, variables POSTGRES_DB POSTGRES_USER POSTGRES_PASSWORD, volumen persistente y healthcheck; y un servicio nestjs que se construye desde el Dockerfile, depende de postgres con condición service healthy, variables de entorno NODE_ENV DB_HOST DB_PORT DB_USERNAME DB_PASSWORD DB_NAME PORT JWT_SECRET SWAGGER_PASSWORD y exposición interna al puerto 3000 enlazado al host solo en 127.0.0.1 para mayor seguridad.

Configuración de NestJS con TypeORM mediante variables de entorno: host tomado de DB_HOST, puerto de DB_PORT, credenciales DB_USERNAME y DB_PASSWORD, base de datos DB_NAME, autoLoadEntities en true, y synchronize deshabilitado en producción para evitar cambios de esquema no controlados. Usa ConfigModule y ConfigService para centralizar la carga de variables.

Configuración del servidor Lightsail: inicia sesión con ssh -i tu clave.pem ubuntu arroba tu ip, actualiza el sistema con sudo apt update && sudo apt upgrade -y, instala Docker con el script oficial, añade tu usuario al grupo docker con sudo usermod -aG docker y vuelve a iniciar sesión, instala docker compose con el paquete del sistema y añade Git con sudo apt install git -y.

Despliegue de la aplicación: clona el repositorio desde GitLab con git clone y accede a la carpeta del proyecto, crea el archivo .env a partir de .env.production o constrúyelo manualmente. Variables de ejemplo para producción en el .env DB_HOST=postgres DB_PORT=5432 DB_USERNAME=usuario DB_PASSWORD=contraseña_segura DB_NAME=nombre_db PORT=3000 NODE_ENV=production JWT_SECRET=secreto_largo_y_aleatorio SWAGGER_PASSWORD=clave_admin_docs. Asegúrate de usar claves robustas y únicas.

Construir y arrancar en segundo plano con docker compose up -d --build, verificar estado con docker compose ps y revisar logs con docker compose logs -f. Pruebas locales en el servidor con curl https://localhost:3000 y curl https://localhost:3000/docs para confirmar que la API y Swagger responden.

Configuración del subdominio en Cloudflare: crea un registro DNS tipo A con nombre api apuntando a la IP pública del Lightsail, con proxy activado y TTL automático. Esto permite que Cloudflare gestione el tráfico y el certificado en el borde.

Instalación de Nginx como reverse proxy: instala con sudo apt install nginx -y, habilítalo y arráncalo con systemctl. Crea un servidor virtual para api.tudominio.com que escuche en el puerto 80 y reenvíe al backend de NestJS en 127.0.0.1:3000. Añade cabeceras de proxy como Host X Real IP X Forwarded For y X Forwarded Proto, y ajusta timeouts para peticiones largas. Habilita el sitio, prueba la configuración con sudo nginx -t y recarga con sudo systemctl reload nginx.

Configura el cortafuegos permitiendo Nginx Full con sudo ufw allow Nginx Full y revisa las reglas activas con sudo ufw status. Mantén cerrados puertos innecesarios para mejorar la ciberseguridad del servidor.

SSL con Cloudflare sin certificados en origen mediante modo flexible: en el panel de Cloudflare selecciona SSL TLS en modo Flexible, activa Always Use HTTPS y asegura que el registro DNS del subdominio esté proxificado. Opcionalmente para máxima seguridad considera modo Full o Full strict con certificado de origen en Nginx si tu caso lo requiere.

Pruebas finales desde tu equipo: curl https://api.tudominio.com debería redirigir a HTTPS si activaste Always Use HTTPS y curl https://api.tudominio.com y https://api.tudominio.com/docs deberían responder a tu API y a la documentación Swagger respectivamente.

Automatización del despliegue con un pequeño script de actualización en el servidor: pasos recomendados pull del código con git pull origin main, copiar .env.production a .env, detener servicios con docker compose down, reconstruir y levantar con docker compose up -d --build. Con esto podrás publicar nuevas versiones en segundos.

Mantenimiento diario y diagnóstico: ver logs globales con docker compose logs -f, logs de un servicio concreto con docker compose logs -f nestjs_app o postgres, reiniciar solo la API con docker compose restart nestjs_app, reconstruir tras cambios con docker compose up -d --build y parar todo con docker compose down.

Copias de seguridad de la base de datos: crea backups con docker exec postgres_db pg_dump -U usuario nombre_db mayor que backup.sql y para restaurar utiliza cat backup.sql tubería docker exec -i postgres_db psql -U usuario -d nombre_db. Programa estas tareas con cron y guarda los archivos en almacenamiento seguro.

Puntos críticos de seguridad para producción: cambia todos los passwords por defecto, usa secrets largos y aleatorios para JWT y otros tokens, limita la exposición de puertos a localhost cuando sea posible, endurece Nginx y el sistema, no subas archivos .env a GitLab, aplica actualizaciones del sistema con regularidad y monitoriza logs y métricas.

Flujo recomendado para despliegues futuros: sube cambios a GitLab en la rama principal, ejecuta el script de despliegue en el servidor, verifica salud de servicios y endpoints clave y actualiza documentación o migraciones si procede.

En Q2BSTUDIO aceleramos proyectos de software a medida y aplicaciones a medida con arquitecturas cloud, automatización y seguridad desde el diseño. Somos especialistas en inteligencia artificial, ia para empresas, agentes IA, ciberseguridad, pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y power bi. Si buscas un partner para desplegar y escalar tu backend con buenas prácticas, contáctanos. Descubre nuestros servicios de servicios cloud en AWS y Azure para construir infraestructuras resilientes y optimizadas y consulta cómo creamos aplicaciones a medida y software a medida con enfoque full stack y DevSecOps.

Resultado final esperado: API disponible en https://api.tudominio.com, documentación pública o protegida en https://api.tudominio.com/docs, SSL automático con Cloudflare, base de datos PostgreSQL contenida y persistente, y pipeline de despliegue listo para crecer con tu negocio.

Consejo extra para entornos avanzados: considera separar redes de docker, activar logs estructurados en JSON para observabilidad, usar Full strict con certificados de origen en Nginx, incorporar un WAF a nivel de Cloudflare, habilitar rate limiting y cache selectiva de respuestas idempotentes, y añadir monitorización con métricas y alertas.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio