Despliegue e infraestructura

1. Stack tecnológico

ComponenteTecnología
FrameworkNext.js 15 (App Router)
LenguajeTypeScript 5+
UITailwindCSS 3+, Tailwind
Base de datosPostgreSQL 16+
ORMPrisma 5
AutenticaciónJWT (12 h) + refresh token (7 días) en cookies httpOnly; bcrypt para contraseñas
ServidorNode.js 20+ con PM2
Reverse proxyNginx con TLS 1.3
DespliegueDockploy (auto-deploy por rama)

2. Repositorio y ramas

3. Arquitectura desplegada

graph LR
    subgraph VPS
        NG[Nginx TLS 1.3] --> APP[Next.js (PM2/Docker)]
        APP --> PG[(PostgreSQL 16)]
        APP --> LO[Logs error]
    end
    GH[GitHub ejd002/Loto] -- "push a Master-Plus" --> Dockploy[Auto-deploy Dockploy]
    Dockploy --> APP

4. Variables de entorno (.env)

VariableDescripciónEjemplo
DATABASE_URLCadena de conexión a PostgreSQL (producción).postgresql://loto_app:CLAVE@localhost:5432/lotodb
JWT_SECRETSecreto para firmar los tokens. Cambiar a uno aleatorio largo en producción.cambiar-en-produccion
TZZona horaria del servidor (la operación usa UTC−5).America/Panama

ENCRYPTION_KEY aparece en .env.example por compatibilidad, pero no se usa en el código actual (el cifrado de contraseñas es bcrypt).

5. Build y publicación

5.1 Vía Dockploy (producción, recomendada)

Dockploy escucha la rama Master-Plus y construye automáticamente el Dockerfile del repositorio:

  1. pnpm install --frozen-lockfile
  2. npx prisma generate
  3. pnpm build
  4. Al arrancar el contenedor se ejecuta npx prisma migrate deploy y luego pnpm start.

No es necesario ejecutar nada a mano: basta con fusionar los cambios a Master-Plus y Dockploy despliega.

5.2 Manual (alternativa sin Docker)

npm install
npx prisma migrate deploy     # aplica migraciones a producción
npx prisma db seed           # primer poblado (opcional, solo primera vez)
npm run build
pm2 start npm --name loto -- start

6. Actualización de versión (release)

  1. Trabajar los cambios en una rama de desarrollo.
  2. Probar local contra datos de producción (script sync-from-prod).
  3. Fusionar a Master-Plus en GitHub.
  4. Dockploy detecta la rama y despliega; verificar el sitio y la versión visible en el pie del dashboard (formato AA.MM.DD.HH.MM UTC−5).

7. Monitoreo y registros

8. Excepciones y buenas prácticas