feat: initial commit - Moraworld Imports project

This commit is contained in:
Lizandro Guarnizo
2026-06-01 08:06:40 -05:00
commit 094ea9cf81
47 changed files with 12844 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
# Despliegue en Coolify
## Arquitectura recomendada
| Servicio Coolify | Repo / Dockerfile | Puerto |
|------------------|-------------------|--------|
| **moraworld-web** | `apps/web/Dockerfile` (build context: raíz del monorepo) | 3000 |
| **moraworld-api** | `apps/api/Dockerfile` (build context: raíz del monorepo) | 3001 |
| **PostgreSQL** | Servicio Coolify o externo | 5432 |
| **Redis** | Servicio Coolify o externo | 6379 |
## Variables de entorno
### API (`moraworld-api`)
```
DATABASE_URL=postgresql://USER:PASS@HOST:5432/moraworld
REDIS_URL=redis://HOST:6379
API_PORT=3001
JWT_SECRET=<generar-32-chars-minimo>
CORS_ORIGINS=https://tu-dominio.com
NODE_ENV=production
```
### Web (`moraworld-web`)
```
NEXT_PUBLIC_API_URL=https://api.tu-dominio.com
PORT=3000
NODE_ENV=production
```
> En build de Coolify para **web**, pasar `NEXT_PUBLIC_API_URL` como **build argument** si usas Dockerfile (ya declarado en `apps/web/Dockerfile`).
## Build en Coolify
1. Conectar repositorio Git.
2. Crear **dos aplicaciones** desde el mismo repo:
### Aplicación API
- **Build Pack:** Dockerfile
- **Dockerfile location:** `apps/api/Dockerfile`
- **Base directory / Context:** `/` (raíz del monorepo)
- **Health check path:** `/api/health`
- **Puerto expuesto:** 3001
### Aplicación Web
- **Build Pack:** Dockerfile
- **Dockerfile location:** `apps/web/Dockerfile`
- **Base directory / Context:** `/`
- **Health check path:** `/`
- **Puerto expuesto:** 3000
## Migraciones en producción
Ejecutar una vez (o en CI) antes/después del deploy de API:
```bash
pnpm db:generate
pnpm exec prisma migrate deploy --schema=packages/database/prisma/schema.prisma
```
En Coolify puedes usar un **one-off command** o job con imagen Node y `DATABASE_URL` del servicio Postgres.
## Desarrollo local vs Coolify
| | Local | Coolify |
|---|--------|---------|
| Postgres/Redis | `docker compose up` | Servicios gestionados |
| API | `pnpm --filter @moraworld/api dev` | Contenedor NestJS |
| Web | `pnpm --filter @moraworld/web dev` | Contenedor Next standalone |
| Dominio | localhost | HTTPS + dominio real |
## Notas
- No subir `.env` al repositorio.
- Ajustar `CORS_ORIGINS` con el dominio exacto del frontend.
- Para archivos (facturas/fotos), configurar S3 o MinIO en Fase 1 (`S3_*` en `.env.example`).
+120
View File
@@ -0,0 +1,120 @@
# Variables desde Coolify (Postgres + Redis externos)
Si Postgres y Redis ya están en Coolify, **no necesitas** `docker compose` para la BD. Solo pega las URLs en `.env` (local) y en cada app de Coolify (producción).
## Qué necesitamos que nos pases
Copia desde el panel de Coolify (o pega aquí en el chat) estos valores:
### PostgreSQL
| Variable | Ejemplo | Dónde está en Coolify |
|----------|---------|------------------------|
| Host | `postgres.tudominio.com` o IP interna | Servicio Postgres → Connection |
| Puerto | `5432` | |
| Usuario | `moraworld` | |
| Contraseña | `***` | |
| Base de datos | `moraworld` | Crear DB si no existe |
**Formato final en `.env`:**
```env
DATABASE_URL="postgresql://USUARIO:CONTRASEÑA@HOST:5432/NOMBRE_BD?schema=moraworld"
```
> En PostgreSQL 15+ el schema `public` a menudo no permite `CREATE` al usuario de la app. Usamos el schema **`moraworld`** (se crea automáticamente en el primer deploy si el usuario tiene permiso `CREATE SCHEMA`).
> Si la contraseña tiene caracteres especiales (`@`, `#`, `%`), hay que codificarlos en URL (encodeURIComponent).
### Redis
| Variable | Ejemplo |
|----------|---------|
| Host | `redis.tudominio.com` |
| Puerto | `6379` (o `6380` con TLS) |
| Contraseña | si aplica |
**Sin contraseña:**
```env
REDIS_URL="redis://HOST:6379"
```
**Con contraseña:**
```env
REDIS_URL="redis://:CONTRASEÑA@HOST:6379"
```
**Con TLS (rediss):**
```env
REDIS_URL="rediss://:CONTRASEÑA@HOST:6380"
```
---
## Dónde configurarlas
### Desarrollo en tu Mac (`.env` en la raíz)
```bash
cp .env.example .env
# Editar DATABASE_URL y REDIS_URL con los valores de Coolify
```
Luego:
```bash
pnpm db:generate
npx pnpm exec prisma migrate deploy --schema=packages/database/prisma/schema.prisma
pnpm dev
```
> Tu Mac debe poder **alcanzar** el host de Postgres/Redis (IP pública, túnel, o VPN). Si Coolify solo expone red interna, usa túnel SSH o el dominio público que Coolify asigne.
### Coolify — app API
```
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
API_PORT=3001
JWT_SECRET=...
CORS_ORIGINS=https://tu-web.com
NODE_ENV=production
```
### Coolify — app Web
```
NEXT_PUBLIC_API_URL=https://api.tu-dominio.com
PORT=3000
NODE_ENV=production
```
---
## Migraciones contra Postgres en Coolify
Una vez tengas `DATABASE_URL` en `.env`:
```bash
pnpm db:generate
npx pnpm exec prisma migrate deploy --schema=packages/database/prisma/schema.prisma
```
Esto crea las tablas en tu Postgres remoto (migración `20260520120000_init`).
---
## Redis en Fase 0
La API aún **no usa** Redis (colas BullMQ en Fase 6). Puedes dejar `REDIS_URL` configurado desde ya para no cambiar env después.
---
## Seguridad
- No subir `.env` a Git.
- En Coolify usar "Secrets" del panel.
- Rotar contraseñas si se compartieron en chat; luego actualizar `.env` y Coolify.