🚀 Cómo desplegar una aplicación Full-Stack en producción con Seenode
(Node.js + Express + Prisma + PostgreSQL + Next.js en repos separados)
Deployar una aplicación web moderna no debería sentirse como configurar un satélite. Sin embargo, cuando intentas conectar backend, frontend, base de datos, variables de entorno y dominios… puede volverse un caos rápidamente.
En este tutorial aprenderás cómo subir a producción una aplicación full-stack usando Seenode, con:
- Repos separados para frontend y backend
- PostgreSQL administrado
- Deploy automático desde GitHub
- HTTPS y dominio personalizado
- Prisma como ORM
- Configuración real para un entorno estable en producción
Ideal para proyectos profesionales, SaaS, MVPs o aplicaciones para clientes.
- Repositorio Frontend: https://github.com/fazt/seenode-ecommerce-frontend
- Repositorio Backend: https://github.com/fazt/seenode-ecommerce-api
🧱 Arquitectura del proyecto
graph TD;
User --> Frontend["Next.js (Frontend)"];
Frontend --> Backend["Node.js + Express API"];
Backend --> DB["Seenode PostgreSQL"];
📂 Estructura de repositorios
Tu proyecto debería estar organizado así:
/
├─ backend/ → Repo independiente (Express + Prisma)
└─ frontend/ → Repo independiente (Next.js)
Esto es importante porque Seenode desplegará cada uno como servicio individual.
1️⃣ Configurar la Base de Datos en Seenode
Antes de deployar cualquier código necesitas la base de datos.
- En tu panel Seenode → Databases → Create Database
- Selecciona PostgreSQL
- Copia tu
DATABASE_URL, ejemplo:
postgresql://user:password@host:5432/dbname?sslmode=require
- Guarda esta cadena: la usarás en el backend y opcionalmente en Prisma Studio remoto.
💡 Consejo: activa backups automáticos si tu proyecto es para un cliente o producción real.
2️⃣ Preparar el Backend (Node.js + Express + Prisma)
Tu backend debe tener:
server.jsoindex.js- Prisma con migraciones
- Scripts de producción correctos
- Variables de entorno externas (no commit
.env)
Ejemplo de package.json:
{
"scripts": {
"dev": "nodemon server.js",
"build": "echo 'Nothing to build'",
"start": "node server.js",
"migrate": "npx prisma migrate deploy"
}
}
Archivo .env.example recomendado:
DATABASE_URL=
PORT=3000
JWT_SECRET=
NODE_ENV=production
Prueba local:
npx prisma migrate deploy
npm start
Si responde en:
http://localhost:3000/api/health
ya estás listo.
3️⃣ Deploy del Backend en Seenode
- En Seenode → New Application
- Elige Deploy from GitHub
- Selecciona el repo
backend - Configura:
| Configuración | Valor |
|---|---|
| Install command | npm install |
| Build command | npm run migrate |
| Start command | npm start |
- En Environment variables añade:
DATABASE_URL=postgres://...
PORT=3000
JWT_SECRET=tu_secreto
NODE_ENV=production
- Ejecuta deploy
Obtendrás algo como:
https://api-tuapp.seenode.app
📌 Guarda esta URL. El frontend la usará.
4️⃣ Preparar el Frontend (Next.js)
Asegúrate de tener scripts correctos:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
Variables necesarias:
NEXT_PUBLIC_API_URL=https://api-tuapp.seenode.app
NEXT_TELEMETRY_DISABLED=1
⚠️ Usa
NEXT_PUBLIC_*solo para valores seguros, ya que quedan accesibles en el browser.
5️⃣ Deploy del Frontend en Seenode
- Crear nueva aplicación en Seenode
- Conectar repo
frontend - Configurar:
| Configuración | Valor |
|---|---|
| Install | npm install |
| Build | npm run build |
| Start | npm start |
- Agregar variables:
NEXT_PUBLIC_API_URL=https://api-tuapp.seenode.app
Cuando finalice tendrás algo como:
https://app-tuapp.seenode.app
6️⃣ 📌 Conectar Dominios Personalizados
Si tienes un dominio, así debería verse la asignación ideal:
| Servicio | URL |
|---|---|
| Frontend | https://app.midominio.com |
| Backend | https://api.midominio.com |
Seenode emitirá certificados SSL automáticamente con Let’s Encrypt.
7️⃣ 🔍 Logs, Debugging y Observabilidad
Seenode incluye herramientas útiles como:
- Logs en tiempo real
- Restart automático si la app falla
- Estadísticas de CPU / RAM
Si tu backend falla por Prisma, revisa:
npx prisma migrate deploy
o errores típicos como:
- Falta de
DATABASE_URL - Puerto distinto al definido en start script
- Migraciones no aplicadas
8️⃣ Check-list antes de lanzar a usuarios 🚨
| Verificación | Estado |
|---|---|
| Base de datos conectada | |
Backend responde en /api/health |
|
| Frontend consume el backend correctamente | |
| Variables de entorno configuradas | |
| SSL activo | |
| Deploy automatizado desde GitHub | |
| Backups (opcional pero recomendado) |
🎯 Resultado Final
Ahora tienes una arquitectura real lista para producción:
- Frontend y Backend en repos independientes
- PostgreSQL en la nube administrado
- Deploy automático con cada push
- Dominios personalizados con HTTPS
- Infraestructura mínima y efectiva
Seenode elimina gran parte del dolor de “DevOps obligatorio” y te deja centrarte en construir.