Instancia dedicada (Zentto Edge)
This content is not available in your language yet.
Un cliente Enterprise puede exigir que su ERP corra en su propio servidor
(on-prem o su nube), no en la plataforma compartida. Zentto Edge es ese stack:
API + shell + caja/mostrador + PostgreSQL + nginx + túnel Cloudflare,
levantado con un solo docker compose en cualquier host Linux con Docker.
Validado de punta a punta en el Edge Lab (Pulse 627, 2026-09-13): un
contenedor LXC en el hipervisor propio sirviendo datqbox.online con el
tenant de Repuestos San José restaurado en local (25.535 artículos), login
real contra el broker central y grids con datos de la BD local.
Arquitectura
Sección titulada «Arquitectura»Internet ──► Cloudflare (DNS + TLS) ──► túnel cloudflared (solo salida) │ edge-nginx :80 ├─ dominio.com → shell ERP (edge-frontend:3000) ├─ /api/ /v1/ /media → API local (edge-api:4000) └─ caja./mostrador. → POS (edge-pos:3000) │ edge-db (PostGIS 16) ├─ master local (copia del central) └─ zentto_tenant_<cliente>Decisiones clave, todas ensayadas en el lab:
| Decisión | Cómo queda |
|---|---|
| Identidad | Híbrida: login contra el broker central auth.zentto.net (mismas credenciales que el SaaS); todo lo demás local. |
| Red | Cero puertos entrantes: el túnel Cloudflare es outbound-only, como el Data Gateway on-prem. No se toca el firewall del cliente. |
| Dominio | El mismo mecanismo white-label del SaaS: usp_cfg_tenant_setcustomdomain pero en el master local, y los orígenes en el broker central. |
| Imágenes | Las mismas de producción (ghcr.io/zentto-erp/*:latest), transferidas por SSH streaming — el edge no necesita credenciales de ghcr. |
| Datos | Restore de dumps (pg_dump -Fc) del master y de la BD dedicada del tenant. |
Dónde vive el automatismo
Sección titulada «Dónde vive el automatismo»Todo en zentto-infra/edge/ (PR #181): docker-compose.yml, vhost nginx
plantillado, y scripts/ con el bootstrap en el orden probado:
pull-images.sh— imágenes prod por SSH streaming (~4,5 GB).setup-db.sh <tenant_db>— rol de app, BDs, restore de dumps, grants.render-env.sh <dominio>— deriva los env del edge desde los de prod (BD local, auth central, URLs del dominio) y renderiza el vhost.tunnel-setup.sh <dominio>— corre en el servidor central (tiene las credenciales CF): crea el túnel, configura ingress y repunta el DNS del dominio; deja el token para el.envdel edge.- Orígenes del dominio en el broker central (paso 4 del runbook white-label).
start.sh <dominio> <companyId>— registra el dominio en el master local y levanta el stack.
El detalle operativo (requisitos, verificación, backups, update de imágenes)
está en el edge/README.md del repo.
Qué falta para venderlo (no salir del laboratorio sin esto)
Sección titulada «Qué falta para venderlo (no salir del laboratorio sin esto)»- Master mínimo: hoy el master local es un dump completo del central, que lleva datos de otros tenants al servidor del cliente. Hace falta un bootstrap de master con solo catálogos + el tenant. Bloqueante para un despliegue real.
- Login offline: sin internet no hay login (broker central). Falta modo degradado.
- Canal de actualización y licencia: hoy las imágenes se re-pullean a mano; no hay control de versión ni licenciamiento por instancia.
- Migraciones: los goose nuevos no llegan solos al edge; el CD central no lo ve.
Contexto de diseño: DatqBoxWeb/docs/design/OFFLINE_POS_RESILIENCE.md
(ZENTTO-190) — la topología “servidor en el local del cliente” se aprueba solo
si el cliente la financia; este stack es exactamente ese caso, ya ensayado.