mirror of
https://origin.cursor.com/mrdevmx/panels.git
synced 2026-10-09 10:43:18 +00:00
Fase 5 (migracion de datos): - api/scripts/migrate-sqlite-to-postgres.ts: ETL unico SQLite -> Postgres. Pre-flight (CURP/RFC duplicados case-insensitive, FKs huerfanas, tenant_id invalido, fechas mal formateadas) -> carga por base/esquema con credenciales _owner (setval de secuencias, OVERRIDING SYSTEM VALUE, ON CONFLICT DO NOTHING idempotente) -> verificacion de conteos y sumas de dinero con tolerancia. Probado end-to-end contra un dataset SQLite legacy sintetico y un Postgres limpio (solo schema+catalogos, sin contexto dev): 100% de las filas migradas, sumas de dinero exactas, snapshot de uploaded_by/created_by resuelto correctamente. - db/RUNBOOK-corte.md: checklist go/no-go para el corte por ambiente. - Fix de bug real encontrado al probar: sin --context-filter explicito, Liquibase corre TAMBIEN los changesets context=dev (comportamiento por defecto, no "modo seguro") -- documentado en db/README.md con el ejemplo correcto (--context-filter='!dev' para staging/produccion). Fase 5b: patron de compensacion para createTenant ya resuelto en el rewrite de saas.ts (fase 3/4). Fase 6 (backups): db/backups/ con plantillas pgBackRest por base, politica de retencion, nota de persistencia minima de Redis (RDB, sin retencion de negocio), checklist de simulacro de restauracion mensual, y la validacion pendiente de si Coolify permite WAL archiving antes de comprometerse a PITR real. Fase 7 (limpieza y CI): - Dockerfile.api simplificado (sin JRE/Liquibase/FFI). Dockerfile.migrate y Dockerfile.provision nuevos, de un solo uso, para el paso explicito de deploy (nunca sirven trafico). - docker-compose.yml: postgres+redis+provision+migrate para dev local end-to-end; api ya no arranca hasta que migrate termina bien. - docs/coolify.md y .env.example actualizados al modelo de 2 bases + Redis + Contabo. - api/schema.sql eliminado (desincronizado, competia con Liquibase como fuente de verdad). - .github/workflows/ci.yml: Postgres+Redis de servicio, aprovisiona roles/ACLs, dry-run de Liquibase (updateSQL) antes de aplicar, verify-isolation.sh, deno check + deno test, build de los dos frontends. Co-authored-by: alberto.martinez <alberto.martinez@mrdev.mx>
77 lines
2.8 KiB
Text
77 lines
2.8 KiB
Text
# =============================================================================
|
|
# Copiar a `.env` (gitignored) para local / Coolify.
|
|
# NUNCA subas `.env` ni `data/*` al repositorio.
|
|
#
|
|
# Generar cada password/secreto con: openssl rand -hex 24
|
|
# =============================================================================
|
|
|
|
# --- OBLIGATORIAS (producción) ---
|
|
SESSION_SECRET=
|
|
DOCS_KEY=
|
|
# ^ DOCS_KEY debe ser EXACTAMENTE 64 hex (32 bytes): openssl rand -hex 32
|
|
SEED_PASSWORD=
|
|
# Si la contraseña tiene `$`, en Docker Compose escríbelo como `$$` (ej. `p$$ass` → `p$ass`).
|
|
|
|
PANEL_LOGIN_URL=https://app.tudominio/login
|
|
PORT=8000
|
|
|
|
# --- Recomendadas en HTTPS (Coolify) ---
|
|
COOKIE_SECURE=true
|
|
# Solo si expones la API en un host distinto (con proxy /v1 en nginx suele ir vacío)
|
|
CORS_ORIGINS=
|
|
|
|
# --- Opcionales ---
|
|
API_KEY=
|
|
VCARD_BASE=https://vcard.arctec.com.mx?info=
|
|
|
|
# SMTP (opcional; también se puede configurar en SaaS → /smtp y queda en panels_platform)
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASS=
|
|
SMTP_FROM=PANELS <noreply@tudominio>
|
|
|
|
# =============================================================================
|
|
# Postgres (monolito modular: panels_platform separada de panels_product)
|
|
# En Coolify, estos apuntan al recurso Postgres gestionado del ambiente
|
|
# (ver db/provision/README.md). Para `docker compose up` local, además hay
|
|
# que definir las contraseñas de cada rol (siguiente bloque) -- el compose
|
|
# arma las URLs solo.
|
|
# =============================================================================
|
|
DATABASE_URL_PLATFORM=
|
|
DATABASE_URL_IAM=
|
|
DATABASE_URL_CORE=
|
|
# _OWNER: solo para el paso de deploy (Liquibase) y scripts (bootstrap/ETL).
|
|
# Nunca usar el rol _owner para el tráfico normal de la API.
|
|
DATABASE_URL_PLATFORM_OWNER=
|
|
DATABASE_URL_IAM_OWNER=
|
|
DATABASE_URL_CORE_OWNER=
|
|
|
|
# --- Solo para `docker compose up` local (provisiona Postgres/Redis propios) ---
|
|
POSTGRES_SUPERUSER_PASSWORD=
|
|
PLATFORM_OWNER_PASSWORD=
|
|
PLATFORM_APP_PASSWORD=
|
|
IAM_OWNER_PASSWORD=
|
|
IAM_APP_PASSWORD=
|
|
CORE_OWNER_PASSWORD=
|
|
CORE_APP_PASSWORD=
|
|
|
|
# =============================================================================
|
|
# Redis (sesiones + cache, con ACL por módulo -- ver db/provision/05-redis-acl.sh)
|
|
# =============================================================================
|
|
REDIS_URL_IAM=
|
|
REDIS_URL_CORE=
|
|
# --- Solo para `docker compose up` local ---
|
|
IAM_REDIS_PASSWORD=
|
|
CORE_REDIS_PASSWORD=
|
|
|
|
# =============================================================================
|
|
# Contabo Object Storage (Fase 4c) -- expedientes/PDFs/logos cifrados.
|
|
# Sin esto, cae a disco local bajo el volumen panel-data (solo dev; en
|
|
# producción un volumen local no escala horizontalmente, ver el plan).
|
|
# =============================================================================
|
|
S3_ENDPOINT=
|
|
S3_BUCKET=
|
|
S3_REGION=
|
|
S3_ACCESS_KEY_ID=
|
|
S3_SECRET_ACCESS_KEY=
|