chore(deploy): las ocho variables del carril hacia EFC en produccion
El compose de produccion no declaraba ninguna EFC_*, asi que el carril nacia muerto
alla: `EfcClient.is_configured` era False y todo el enganche hacia no-op en silencio.
Van en los TRES servicios y no solo en el backend, porque cada uno hace una parte:
- backend encola al crear el expediente y despacha la entrega inmediata;
- celery_worker EJECUTA la entrega (`deliver_outbox_row` / `deliver_file_outbox_row`).
Si solo el backend las tuviera, el encolado se veria perfecto y nada
se entregaria nunca -- es exactamente el modo de fallo que ya nos
costo un diagnostico hoy, cuando el worker no tenia registradas las
tareas del carril;
- celery_beat dispara los tres barridos, que son la red que atrapa lo que el
despacho inmediato no alcanzo. Sin el, una caida de EFC deja la cola
detenida para siempre.
Se declaran las ocho aunque seis queden vacias por default. No es simetria: una
variable no declarada en el compose NO llega al contenedor, asi que editarla en el .env
no surte efecto y el sintoma parece un problema de red. Ya paso con EFC_API_VERIFY_SSL
en el compose de desarrollo, que solo pasa dos de las ocho.
EFC_API_URL vacia = carril apagado, y es el default a proposito: desplegar este cambio
no enciende nada. Encenderlo exige EFC_API_URL y una EFC_API_KEY identica a la
CRM_INTEGRATION_API_KEY del lado de EFC, cuyo permiso es fail-closed.
Ref: T2026-08-046
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,6 +84,31 @@ services:
|
||||
- S3_USE_SSL=${S3_USE_SSL:-false}
|
||||
- S3_FILE_STORAGE=${S3_FILE_STORAGE:-true}
|
||||
- S3_PRESIGNED_EXPIRES_SECONDS=${S3_PRESIGNED_EXPIRES_SECONDS:-3600}
|
||||
|
||||
# ── Carril hacia EFC, el expediente electronico (T2026-08-046) ──────────────────────
|
||||
# EFC_API_URL VACIA = CARRIL APAGADO. No es un error de configuracion: con la URL vacia
|
||||
# `EfcClient.is_configured` es False, todo el enganche hace no-op y el CRM guarda sus
|
||||
# archivos solo en su propio MinIO. Encenderlo exige las dos primeras.
|
||||
#
|
||||
# EFC_API_KEY debe ser IDENTICA a CRM_INTEGRATION_API_KEY del lado de EFC. Alla el permiso
|
||||
# es fail-closed: si no coinciden, EFC responde 403 "API key invalida o no configurada" y
|
||||
# esa respuesta NO distingue entre clave equivocada y clave ausente, a proposito.
|
||||
#
|
||||
# Las cuatro ultimas van declaradas aunque hoy queden vacias. La razon no es simetria: si
|
||||
# una variable no se declara aqui, editarla en el .env NO surte efecto y el sintoma parece
|
||||
# un problema de red. Ya paso con EFC_API_VERIFY_SSL en el compose de desarrollo.
|
||||
- EFC_API_URL=${EFC_API_URL:-}
|
||||
- EFC_API_KEY=${EFC_API_KEY:-}
|
||||
- EFC_API_VERIFY_SSL=${EFC_API_VERIFY_SSL:-true}
|
||||
- EFC_API_TIMEOUT_MS=${EFC_API_TIMEOUT_MS:-8000}
|
||||
# Las subidas van aparte: 8 s no alcanzan para un archivo de 25 MB. Debe quedar POR DEBAJO
|
||||
# del proxy_read_timeout del nginx de EFC.
|
||||
- EFC_UPLOAD_TIMEOUT_MS=${EFC_UPLOAD_TIMEOUT_MS:-55000}
|
||||
# Scaffolding de mTLS: activarlo es configuracion, no codigo. Es el endurecimiento que la
|
||||
# deuda de la API key estatica pide antes de produccion real.
|
||||
- EFC_MTLS_CA_PATH=${EFC_MTLS_CA_PATH:-}
|
||||
- EFC_MTLS_CERT_PATH=${EFC_MTLS_CERT_PATH:-}
|
||||
- EFC_MTLS_KEY_PATH=${EFC_MTLS_KEY_PATH:-}
|
||||
ports:
|
||||
- "3467:8000"
|
||||
depends_on:
|
||||
@@ -148,6 +173,19 @@ services:
|
||||
- S3_REGION=${S3_REGION:-us-east-1}
|
||||
- S3_USE_SSL=${S3_USE_SSL:-false}
|
||||
- S3_FILE_STORAGE=${S3_FILE_STORAGE:-true}
|
||||
|
||||
# Carril hacia EFC (T2026-08-046). EL WORKER LAS NECESITA IGUAL QUE EL BACKEND: la entrega
|
||||
# de expedientes y archivos la hace `deliver_*_row` AQUI, no en el proceso web. Si solo el
|
||||
# backend las tuviera, el encolado se veria perfecto y nada se entregaria nunca.
|
||||
# Ver la nota completa en el servicio `backend`.
|
||||
- EFC_API_URL=${EFC_API_URL:-}
|
||||
- EFC_API_KEY=${EFC_API_KEY:-}
|
||||
- EFC_API_VERIFY_SSL=${EFC_API_VERIFY_SSL:-true}
|
||||
- EFC_API_TIMEOUT_MS=${EFC_API_TIMEOUT_MS:-8000}
|
||||
- EFC_UPLOAD_TIMEOUT_MS=${EFC_UPLOAD_TIMEOUT_MS:-55000}
|
||||
- EFC_MTLS_CA_PATH=${EFC_MTLS_CA_PATH:-}
|
||||
- EFC_MTLS_CERT_PATH=${EFC_MTLS_CERT_PATH:-}
|
||||
- EFC_MTLS_KEY_PATH=${EFC_MTLS_KEY_PATH:-}
|
||||
depends_on:
|
||||
- backend
|
||||
- valkey
|
||||
@@ -186,6 +224,20 @@ services:
|
||||
- S3_REGION=${S3_REGION:-us-east-1}
|
||||
- S3_USE_SSL=${S3_USE_SSL:-false}
|
||||
- S3_FILE_STORAGE=${S3_FILE_STORAGE:-true}
|
||||
|
||||
# Carril hacia EFC (T2026-08-046). El BEAT las necesita porque de aqui salen los tres
|
||||
# barridos —`sweep_outbox`, `sweep_file_outbox` y `sweep_expediente_gaps`—, que son la red
|
||||
# que atrapa lo que el despacho inmediato no alcanzo a entregar. Sin ellas el carril
|
||||
# depende solo del despacho inmediato y una caida de EFC deja la cola detenida para
|
||||
# siempre. Ver la nota completa en el servicio `backend`.
|
||||
- EFC_API_URL=${EFC_API_URL:-}
|
||||
- EFC_API_KEY=${EFC_API_KEY:-}
|
||||
- EFC_API_VERIFY_SSL=${EFC_API_VERIFY_SSL:-true}
|
||||
- EFC_API_TIMEOUT_MS=${EFC_API_TIMEOUT_MS:-8000}
|
||||
- EFC_UPLOAD_TIMEOUT_MS=${EFC_UPLOAD_TIMEOUT_MS:-55000}
|
||||
- EFC_MTLS_CA_PATH=${EFC_MTLS_CA_PATH:-}
|
||||
- EFC_MTLS_CERT_PATH=${EFC_MTLS_CERT_PATH:-}
|
||||
- EFC_MTLS_KEY_PATH=${EFC_MTLS_KEY_PATH:-}
|
||||
depends_on:
|
||||
- backend
|
||||
- valkey
|
||||
|
||||
Reference in New Issue
Block a user