Saltar al contenido principal
El Manager y el Worker de Fetcher se configuran íntegramente mediante variables de entorno — cada componente lee su propio archivo .env (components/manager/.env, components/worker/.env). Esta página cubre las variables que importan para un despliegue MVP; los archivos .env.example del repositorio son la referencia exhaustiva.

Claves de cifrado


VariableComponenteDescripción
APP_ENC_KEYManager + WorkerObligatoria. Clave maestra de 32 bytes codificada en base64. Genérala con make generate-master-key. Ambos servicios deben compartir el mismo valor.
APP_ENC_KEY_VERSIONManager + WorkerContador de rotación de clave (por defecto 1). Increméntalo al rotar; Fetcher rastrea qué versión cifró cada credencial.
A partir de esa única clave maestra, Fetcher deriva tres claves independientes vía HKDF: cifrado de credenciales (AES-256-GCM), firma de mensajes internos entre Manager y Worker (HMAC-SHA256) y firma externa de documentos, para que los consumidores verifiquen los datos extraídos. Los consumidores derivan la clave de verificación con make derive-key KEY="<clave-maestra>".

API del Manager


VariableDescripciónPor defecto
SERVER_PORTPuerto HTTP de la API del Manager4006
SCHEMA_CACHE_TTL_SECONDSCuánto tiempo permanecen en caché los esquemas descubiertos300
PLUGIN_AUTH_ENABLEDDelegar autenticación/autorización a Access Managerfalse
PLUGIN_AUTH_ADDRESSDirección de Access Manager cuando la autenticación está habilitada
LOG_LEVELVerbosidad de los logsdebug (local)

Infraestructura


Ambos servicios se conectan a MongoDB (metadatos) y RabbitMQ (cola de jobs); el Manager también usa Valkey/Redis para caché, y el Worker escribe resultados en object storage.
VariableComponenteDescripción
MONGO_HOST, MONGO_PORT, MONGO_NAME, MONGO_USER, MONGO_PASSWORDManager + WorkerAlmacén de metadatos en MongoDB
RABBITMQ_HOST, RABBITMQ_PORT_AMQP, RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASSManager + WorkerBroker RabbitMQ
RABBITMQ_FETCHER_WORK_QUEUEManager + WorkerCola de trabajo de extracción (por defecto fetcher.extract-external-data.queue)
RABBITMQ_NUMBERS_OF_WORKERSWorkerWorkers de extracción concurrentes (por defecto 5)
REDIS_HOST, REDIS_PORT, REDIS_PASSWORDManagerCaché Valkey/Redis
OBJECT_STORAGE_ENDPOINT, OBJECT_STORAGE_REGION, OBJECT_STORAGE_BUCKET, OBJECT_STORAGE_ACCESS_KEY_ID, OBJECT_STORAGE_SECRET_KEYWorkerAlmacenamiento de resultados compatible con S3 (SeaweedFS por defecto; AWS S3 y MinIO funcionan igual)
ENGINE_MAX_RESULT_BYTESWorkerTecho del artefacto de resultado serializado por job (por defecto 256 MiB)
Las opciones relacionadas con TLS (MONGO_TLS_CA_CERT, REDIS_TLS, RABBITMQ_TLS) están disponibles por dependencia.

Streaming de eventos de jobs


El Worker publica notificaciones obligatorias job.completed y job.failed y falla de forma cerrada al arrancar si el streaming no está habilitado:
VariableDescripciónPor defecto
STREAMING_ENABLEDDebe ser true para que el Worker arranquefalse
STREAMING_BROKERSServidores bootstrap de Kafka/Redpandalocalhost:9092
STREAMING_CLOUDEVENTS_SOURCEOrigen CloudEvents de los eventos del Worker
RABBITMQ_JOB_EVENTS_EXCHANGEExchange de RabbitMQ para eventos de jobsfetcher.job.events
Los despliegues single-tenant emiten eventos con el tenant ID estable single-tenant.

Multi-tenancy


VariableDescripciónPor defecto
MULTI_TENANT_ENABLEDHabilita el modo multi-tenantfalse
MULTI_TENANT_URLURL del servicio Tenant Manager
MULTI_TENANT_MAX_TENANT_POOLSMáximo de pools de conexión de tenant concurrentes100
MULTI_TENANT_IDLE_TIMEOUT_SECTimeout de conexión ociosa de tenant300
MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLDUmbral de fallos del circuit breaker5
MULTI_TENANT_CIRCUIT_BREAKER_TIMEOUT_SECTimeout de reinicio del circuit breaker30
Habilitar el modo multi-tenant también activa la guarda de seguridad contra SSRF: los hosts de conexión proporcionados por tenants se comprueban contra rangos de loopback, direcciones privadas (RFC 1918) y metadatos de nube antes de que Fetcher se conecte. Con MULTI_TENANT_ENABLED=false (el valor por defecto), todos los caminos de código multi-tenant se omiten con impacto cero en el rendimiento.

Readiness y postura de TLS


VariableDescripciónPor defecto
DEPLOYMENT_MODEsaas, byoc o local — etiqueta el /readyz y activa la exigencia de TLS en SaaSlocal
ALLOW_INSECURE_TLSPermite conexiones en texto claro con MongoDB, Redis y RabbitMQ. Fetcher falla de forma cerrada ante URIs de conexión inseguras por defecto — defínela solo para desarrollo local.sin definir (fail closed)
READYZ_DRAIN_DELAY_SECVentana de drenaje tras SIGTERM, durante la cual /readyz reporta unhealthy antes de cerrar las conexiones12
Ambos servicios exponen GET /health (liveness), GET /readyz (readiness con sondas paralelas de dependencias) y GET /version.

Datasources internos


Las bases fijas, propiedad del operador, pueden declararse como variables de entorno en lugar de conexiones registradas por la API, usando la familia DATASOURCE_{NAME}_*:
VariableObligatoriaEjemplo
DATASOURCE_{N}_CONFIG_NAMEbilling_db
DATASOURCE_{N}_TYPEpostgresql / mysql / oracle / mongodb / sql_server
DATASOURCE_{N}_HOSTdb.internal.example.com
DATASOURCE_{N}_PORT5432
DATASOURCE_{N}_DATABASEbilling
DATASOURCE_{N}_USERfetcher_ro
DATASOURCE_{N}_PASSWORDde tu gestor de secretos
DATASOURCE_{N}_OPTIONSnoauthSource=admin (solo MongoDB)
DATASOURCE_{N}_SSLMODEnorequire (PostgreSQL)
Para TLS con una base gestionada en esta vía, _SSLMODE es la opción validada; el plumbing de CA personalizada o certificado de cliente para datasources internos no está disponible.

Observabilidad


Fetcher emite trazas y métricas OpenTelemetry cuando la telemetría está habilitada:
VariableDescripciónPor defecto
ENABLE_TELEMETRYEnciende/apaga la emisión OTelfalse
OTEL_EXPORTER_OTLP_ENDPOINTEndpoint del colector OTLP
OTEL_RESOURCE_SERVICE_NAMENombre del servicio en la telemetría (fetcher / fetcher-worker)por componente