Comunicación entre Servicios
REST interno: gtm-fabric → node-api
gtm-fabric llama a node-api en endpoints /internal/fabric/* (sin auth, solo red interna):
| Endpoint | Cuándo | Payload |
|---|---|---|
GET /internal/fabric/gtms?vmId=X | Startup de gtm-fabric / gtm-proxy | — |
PATCH /internal/fabric/containers/:id/ports | Tras crear container Docker | {previewPort, taggingPort} |
POST /internal/fabric/contacts/batch | Cada 5s (batch flush) | Array de contactos capturados |
POST /internal/fabric/usage | Cada 5s | Array de {gtmId, eventCount} |
POST /internal/fabric/events | Eventos de ciclo de vida | {eventType, gtmId, status} |
PUT /internal/fabric/certificates | Tras obtener/renovar cert SSL | Cert PEM + chain + expiry |
POST /internal/fabric/acme-accounts | Tras registrar cuenta ACME | Credentials ACME |
GET /internal/fabric/domains?vmId=X&status=Y | Backup scheduler (cada 1h) | — |
PATCH /internal/fabric/domains/:domain/status | Tras verificar/generar cert | {gtmId, status, ssl_enabled, error_code} |
REST interno: gtm-proxy → node-api
gtm-proxy obtiene su configuración inicial al arrancar:
Endpoints internos de gtm-proxy (puerto 9090)
| Método | Path | Disparado por | Acción |
|---|---|---|---|
POST | /internal/routes-reload | gtm-fabric | Recarga todas las rutas desde node-api |
POST | /internal/ssl-reload | gtm-fabric | Recarga certificado SSL para un dominio |
POST | /internal/acme-challenge | gtm-fabric | Registra desafío ACME (Let's Encrypt) |
DELETE | /internal/acme-challenge/:token | gtm-fabric | Elimina desafío ACME |
GET | /internal/health | — | Health check (retorna count de rutas) |
REST: node-api → gtm-fabric (GtmFabricGateway)
node-api inicia comunicación hacia fabric para operaciones de dominio, certificados y custom loader:
| Endpoint | Cuándo | Payload |
|---|---|---|
POST /api/v1/gtm/:id/domains/add | Usuario agrega dominio | {domain, workspaceId, vmId} |
POST /api/v1/gtm/:id/domains/verify | Usuario clickea "Verify DNS" | {domain} |
POST /api/v1/gtm/:id/domains/update | Cambiar dominio primario | {oldDomain, newDomain} |
DELETE /api/v1/gtm/:id/domains/remove | Eliminar dominio | {domain} |
POST /api/v1/gtm/:id/certificates/renew | Scheduler 2 AM (renovación) | {domain, acmeAccount} |
PUT /api/v1/gtm/:id/custom-loader | Habilitar custom loader | {webGtmId, customLoaderDomain} |
Configuración:
- URL:
GTM_FABRIC_URL(default:http://100.97.60.119:8000) - Auth: header
X-Fabric-API-Key - Timeout: 30s por request
- Conexión vía Tailscale
REST: node-api → gtm-proxy (ProxyNotifier)
node-api notifica al proxy tras cambios de dominio, loader o preview:
| Endpoint | Cuándo |
|---|---|
POST /internal/routes-reload (puerto 9090) | Tras agregar/eliminar dominio, habilitar loader, set preview |
El proxy recarga todas las rutas desde node-api (GET /internal/fabric/gtms?vmId=X).
Nota: RemoveDomain (use case) ahora también llama a proxyNotifier.notifyByGtmId() después de eliminar un dominio, igual que DeleteGtms.