> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Variables de entorno

> Referencia de las variables de entorno del servicio ledger de Midaz: puertos, TLS, modo de despliegue y la configuración de CRM o Fees para las API de onboarding y transacciones.

Esta referencia enumera las variables de entorno que configuran el **servicio ledger de Midaz**. Midaz es el motor de partida doble source-available (ELv2). Sirve las API de onboarding y transacciones en un solo puerto. Configuras estas variables en el momento del despliegue, mediante valores de Helm, Docker Compose o el entorno de tu orquestador. Una variable obligatoria que no configures hace que el servidor falle al iniciar.

Cada producto de Lerian comparte un conjunto de bloques de configuración: postura de TLS, OpenTelemetry, autenticación de Access Manager, multi-tenancy, descubrimiento de servicios y streaming de eventos. La [referencia de configuración de BYOC](/es/reference/byoc-configuration) documenta estos bloques. Esta página se centra en lo distintivo del ledger.

<Note>
  La consolidación ya se aplicó. Despliegas el servicio **ledger** (rutas unificadas de onboarding y transacciones), y **CRM** y **Fees** se compilan dentro de ese mismo proceso ledger. El binario del ledger lee las variables de CRM y Fees que se muestran abajo. Tracer vive en el mismo repositorio y se distribuye como su propio servicio opcional. Los antiguos componentes `onboarding`, `transaction` y `mdz` ya no existen como unidades de despliegue independientes. El chart de Helm todavía incluye un despliegue heredado independiente de `crm`, desactivado de forma predeterminada.
</Note>

## Puertos y endpoints de salud

El ledger ejecuta un solo proceso HTTP. Consulta la [referencia de salud y disponibilidad](/es/reference/health-and-readiness) para conocer el contrato de las sondas.

| Superficie                                                                                               | Variable de puerto               | Predeterminado | Endpoints                        |
| -------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------- | -------------------------------- |
| HTTP del ledger (onboarding + transacciones)                                                             | `SERVER_PORT` / `SERVER_ADDRESS` | `3002`         | `/health`, `/readyz`, `/version` |
| HTTP de CRM (despliegue heredado independiente, desactivado de forma predeterminada en el chart de Helm) | `SERVER_PORT` / `SERVER_ADDRESS` | `4003`         | `/health`, `/readyz`             |

El ledger usa OTLP push para la telemetría y no expone un endpoint de scrape `/metrics`.

## Despliegue y TLS

| Variable             | Descripción                                                                                                                                                                                                                                                                       | Predeterminado | Obligatorio |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------- |
| `DEPLOYMENT_MODE`    | Modo de despliegue: `local`, `byoc` o `saas`. En `saas`, TLS es obligatorio para toda conexión con una dependencia y el servidor se niega a iniciar sin él. En `byoc`, TLS se recomienda y genera una advertencia en vez de exigirse. También etiqueta la respuesta de `/readyz`. | `local`        | No          |
| `ALLOW_INSECURE_TLS` | Omite la aplicación de TLS por conexión en los DSN de infraestructura. Déjala sin configurar o en `false` en producción; configúrala en `true` solo para infraestructura local en texto plano.                                                                                    | `false`        | No          |

## Aplicación

| Variable                          | Descripción                                                                                                     | Predeterminado | Obligatorio |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------- | ----------- |
| `ENV_NAME`                        | Etiqueta de entorno (por ejemplo, `development`, `staging`, `production`)                                       | `development`  | No          |
| `VERSION`                         | Etiqueta de versión del servicio                                                                                | varía          | No          |
| `LOG_LEVEL`                       | Nivel de detalle del log: `debug`, `info`, `warn` o `error`                                                     | `debug`        | No          |
| `MAX_PAGINATION_LIMIT`            | Tamaño máximo de página aceptado por los endpoints de lista                                                     | `100`          | No          |
| `MAX_PAGINATION_MONTH_DATE_RANGE` | Intervalo máximo de meses para las consultas de rango de fechas. La configuración de ejemplo incluida trae `3`. | `1`            | No          |

## Base de datos (PostgreSQL)

El ledger mantiene dos bases de datos lógicas (`onboarding` y `transaction`), cada una con un bloque de conexión primario y uno de réplica. Las variables comparten una misma forma. Reemplaza `{MODULE}` por `ONBOARDING` o `TRANSACTION`. Las variables de réplica llevan el infijo `_REPLICA_` (por ejemplo, `DB_ONBOARDING_REPLICA_HOST`).

| Variable                     | Descripción                                                                                                               | Predeterminado               | Obligatorio |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------- |
| `DB_{MODULE}_HOST`           | Host primario de PostgreSQL                                                                                               | —                            | Sí          |
| `DB_{MODULE}_PORT`           | Puerto de PostgreSQL                                                                                                      | —                            | Sí          |
| `DB_{MODULE}_USER`           | Usuario de la base de datos                                                                                               | —                            | Sí          |
| `DB_{MODULE}_PASSWORD`       | Contraseña de la base de datos. Sensible: no la subas en un commit; provéela mediante tu almacén de secretos.             | —                            | Sí          |
| `DB_{MODULE}_NAME`           | Nombre de la base de datos                                                                                                | `onboarding` / `transaction` | Sí          |
| `DB_{MODULE}_SSLMODE`        | Modo SSL de libpq: `disable`, `require`, `verify-ca` o `verify-full`. Usa `require` o un modo más estricto en producción. | `disable`                    | No          |
| `DB_{MODULE}_MAX_OPEN_CONNS` | Máximo de conexiones abiertas en el pool                                                                                  | `3000`                       | No          |
| `DB_{MODULE}_MAX_IDLE_CONNS` | Máximo de conexiones inactivas en el pool                                                                                 | `3000`                       | No          |

## Almacén de documentos (MongoDB)

Las variables de MongoDB usan un namespace por módulo: `MONGO_ONBOARDING_*`, `MONGO_TRANSACTION_*` y, en el binario consolidado, `MONGO_CRM_*` y `MONGO_FEES_*`. Todas comparten una misma forma. Reemplaza `{NS}` por el namespace. Pueden apuntar a un solo despliegue de MongoDB (con bases de datos lógicas separadas) o a hosts dedicados.

| Variable                   | Descripción                                                                    | Predeterminado       | Obligatorio |
| -------------------------- | ------------------------------------------------------------------------------ | -------------------- | ----------- |
| `MONGO_{NS}_HOST`          | Host de MongoDB                                                                | —                    | Sí          |
| `MONGO_{NS}_PORT`          | Puerto de MongoDB                                                              | —                    | Sí          |
| `MONGO_{NS}_USER`          | Usuario de la base de datos                                                    | —                    | Sí          |
| `MONGO_{NS}_PASSWORD`      | Contraseña de la base de datos. Sensible.                                      | —                    | Sí          |
| `MONGO_{NS}_NAME`          | Nombre de la base de datos                                                     | nombre del namespace | Sí          |
| `MONGO_{NS}_URI`           | Esquema de conexión: `mongodb` o `mongodb+srv`                                 | `mongodb`            | No          |
| `MONGO_{NS}_MAX_POOL_SIZE` | Tamaño máximo del pool de conexiones                                           | `1000` (Fees `100`)  | No          |
| `MONGO_{NS}_TLS_CA_CERT`   | Certificado CA PEM codificado en Base64 para TLS (por ejemplo, AWS DocumentDB) | —                    | No          |
| `MONGO_{NS}_PARAMETERS`    | Parámetros adicionales de la cadena de conexión                                | —                    | No          |

## Caché (Redis / Valkey)

| Variable                         | Descripción                                                       | Predeterminado | Obligatorio |
| -------------------------------- | ----------------------------------------------------------------- | -------------- | ----------- |
| `REDIS_HOST`                     | Host y puerto de Redis/Valkey                                     | —              | Sí          |
| `REDIS_PASSWORD`                 | Contraseña de autenticación. Sensible.                            | —              | No          |
| `REDIS_TLS`                      | Habilita TLS para la conexión                                     | `false`        | No          |
| `REDIS_CA_CERT`                  | Certificado CA PEM codificado en Base64 para TLS                  | —              | No          |
| `REDIS_DB`                       | Índice de base de datos lógica                                    | `0`            | No          |
| `REDIS_PROTOCOL`                 | Versión del protocolo RESP                                        | `3`            | No          |
| `REDIS_POOL_SIZE`                | Tamaño del pool de conexiones                                     | `10`           | No          |
| `REDIS_MASTER_NAME`              | Nombre del master de Sentinel (despliegues con Sentinel)          | —              | No          |
| `REDIS_USE_GCP_IAM`              | Autentica ante GCP Memorystore con IAM en lugar de una contraseña | `false`        | No          |
| `REDIS_SERVICE_ACCOUNT`          | Cuenta de servicio de GCP para la autenticación IAM               | —              | No          |
| `GOOGLE_APPLICATION_CREDENTIALS` | Ruta al archivo de credenciales de GCP para la autenticación IAM  | —              | No          |

## Broker de mensajes (RabbitMQ)

El pipeline interno asíncrono de operaciones de saldo usa RabbitMQ cuando `RABBITMQ_TRANSACTION_ASYNC=true`. RabbitMQ también transporta ciertos exchanges salientes heredados.

| Variable                            | Descripción                                                                                                                                                                                                                                   | Predeterminado | Obligatorio |
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------- |
| `RABBITMQ_HOST`                     | Host del broker                                                                                                                                                                                                                               | —              | Sí          |
| `RABBITMQ_PORT_HOST`                | **Puerto AMQP** usado para conectar con el broker. A pesar del nombre, es el puerto que usa la cadena de conexión (`3003` en la infraestructura incluida).                                                                                    | —              | Sí          |
| `RABBITMQ_PORT_AMQP`                | **Puerto de administración/HTTP** que se reporta en la conexión de verificación de estado (`3004` en la infraestructura incluida). A pesar del nombre, no se usa para conectar por AMQP.                                                      | —              | No          |
| `RABBITMQ_URI`                      | Esquema de conexión: `amqp` o `amqps`. Usa `amqps` en producción.                                                                                                                                                                             | `amqp`         | No          |
| `RABBITMQ_DEFAULT_USER`             | Usuario del publicador                                                                                                                                                                                                                        | —              | Sí          |
| `RABBITMQ_DEFAULT_PASS`             | Contraseña del publicador. Sensible.                                                                                                                                                                                                          | —              | Sí          |
| `RABBITMQ_CONSUMER_USER`            | Usuario del consumidor                                                                                                                                                                                                                        | —              | Sí          |
| `RABBITMQ_CONSUMER_PASS`            | Contraseña del consumidor. Sensible.                                                                                                                                                                                                          | —              | Sí          |
| `RABBITMQ_VHOST`                    | Host virtual                                                                                                                                                                                                                                  | `/`            | No          |
| `RABBITMQ_NUMBERS_OF_WORKERS`       | Concurrencia del consumidor                                                                                                                                                                                                                   | `5`            | No          |
| `RABBITMQ_NUMBERS_OF_PREFETCH`      | Cantidad de prefetch del consumidor                                                                                                                                                                                                           | `10`           | No          |
| `RABBITMQ_TRANSACTION_ASYNC`        | Registra las transacciones de forma asíncrona a través del broker                                                                                                                                                                             | `false`        | No          |
| `RABBITMQ_OVERDRAFT_EVENTS_ENABLED` | Publica eventos de sobregiro. Cualquier valor distinto de `false` (incluido sin configurar) habilita la publicación; configura `false` explícitamente para desactivarla. La configuración de ejemplo incluida trae `false`.                   | habilitado     | No          |
| `AUDIT_LOG_ENABLED`                 | Agrega las transacciones a un exchange de log de auditoría. Cualquier valor distinto de `false` (incluido sin configurar) lo habilita; configura `false` explícitamente para desactivarlo. La configuración de ejemplo incluida trae `false`. | habilitado     | No          |

## Rendimiento

| Variable                            | Descripción                                                                                                                                                                                           | Predeterminado     | Obligatorio |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
| `BULK_RECORDER_ENABLED`             | Agrupa las escrituras de transacciones en lotes para una ingesta de alto rendimiento                                                                                                                  | `true`             | No          |
| `BULK_RECORDER_SIZE`                | Umbral de tamaño del lote. Si no se configura, Midaz lo calcula a partir de `RABBITMQ_NUMBERS_OF_WORKERS` × `RABBITMQ_NUMBERS_OF_PREFETCH` (50 con los valores predeterminados de worker y prefetch). | workers × prefetch | No          |
| `BULK_RECORDER_FLUSH_TIMEOUT_MS`    | Intervalo de flush del registrador de lotes (milisegundos)                                                                                                                                            | `100`              | No          |
| `BULK_RECORDER_MAX_ROWS_PER_INSERT` | Máximo de filas por inserción en lote                                                                                                                                                                 | `1000`             | No          |

## Integración con Tracer

El seam opcional permite que el ledger reserve límites de gasto contra Tracer antes de confirmar una transacción. Deja `TRACER_BASE_URL` sin configurar para desactivarlo.

| Variable               | Descripción                                                                             | Predeterminado | Obligatorio |
| ---------------------- | --------------------------------------------------------------------------------------- | -------------- | ----------- |
| `TRACER_BASE_URL`      | URL del servicio Tracer; configurarla habilita el cliente de reserva                    | —              | No          |
| `TRACER_TIMEOUT_MS`    | Plazo límite de la llamada de reserva (milisegundos)                                    | `250`          | No          |
| `TRACER_TRANSPORT`     | Transporte de la reserva: `grpc` o `rest`                                               | `grpc`         | No          |
| `TRACER_TLS_MODE`      | Seguridad del seam: `mesh` (predeterminado, TLS terminado por el service mesh) o `mtls` | `mesh`         | No          |
| `TRACER_TLS_CERT_FILE` | Ruta del certificado PEM del cliente (cuando `mtls`)                                    | —              | Si `mtls`   |
| `TRACER_TLS_KEY_FILE`  | Ruta de la clave privada PEM del cliente (cuando `mtls`). Sensible.                     | —              | Si `mtls`   |
| `TRACER_TLS_CA_FILE`   | Ruta del certificado CA PEM (cuando `mtls`)                                             | —              | Si `mtls`   |

<Note>
  Con `TRACER_BASE_URL` configurada, el seam usa el transporte `grpc` predeterminado a menos que configures `TRACER_TRANSPORT=rest`. El transporte gRPC requiere que el servicio Tracer exponga su seam gRPC de reservas. Configura `TRACER_GRPC_PORT` en Tracer (consulta [Variables de entorno de Tracer](/es/products/tracer/tracer-environment-variables)). Bajo `TRACER_TLS_MODE=mtls`, debes configurar las rutas del certificado de cliente, la clave y la CA indicadas arriba.
</Note>

## CRM y Fees

El proceso del ledger lee estas variables porque CRM y Fees se compilan dentro del binario del ledger. Protegen la PII del titular de la cuenta y configuran el backend de cifrado de campos.

| Variable                     | Descripción                                                                                                           | Predeterminado | Obligatorio |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------- | ----------- |
| `LCRYPTO_HASH_SECRET_KEY`    | Clave de hashing de 64 caracteres hexadecimales para la PII del titular. Sensible: genera un valor único por entorno. | —              | Sí (CRM)    |
| `LCRYPTO_ENCRYPT_SECRET_KEY` | Clave de cifrado de 64 caracteres hexadecimales para la PII del titular. Sensible.                                    | —              | Sí (CRM)    |
| `KMS_VENDOR`                 | Backend de cifrado de campos: `none` o `hashicorp-vault`                                                              | `none`         | No          |
| `KMS_VAULT_ADDR`             | Dirección de Vault (cuando `hashicorp-vault`)                                                                         | —              | No          |
| `KMS_VAULT_AUTH_METHOD`      | Método de autenticación de Vault: `token` o `approle`. Usa `approle` en `byoc`/`saas`.                                | `token`        | No          |
| `KMS_VAULT_ROLE_ID`          | ID de rol de AppRole de Vault (cuando `approle`)                                                                      | —              | No          |
| `KMS_VAULT_SECRET_ID`        | ID de secreto de AppRole de Vault (cuando `approle`). Sensible.                                                       | —              | No          |

## Columna vertebral de configuración compartida

Los siguientes bloques son idénticos en todos los productos de Lerian. La [referencia de configuración de BYOC](/es/reference/byoc-configuration) los documenta en detalle. Están desactivados de forma predeterminada. Un despliegue BYOC de un solo tenant puede ignorar todos los opcionales.

* **Autenticación de Access Manager**: `PLUGIN_AUTH_ENABLED`, `PLUGIN_AUTH_HOST`. Habilítala en producción.
* **Multi-tenancy**: `MULTI_TENANT_*`. Desactivado de forma predeterminada. Habilita la resolución de bases de datos por tenant.
* **Descubrimiento de servicios**: `SD_*` (Consul). Desactivado de forma predeterminada.
* **Streaming de eventos**: `STREAMING_*` (productor de lib-streaming). Desactivado de forma predeterminada en el ledger.
* **OpenTelemetry**: `ENABLE_TELEMETRY`, `OTEL_*`. La telemetría es OTLP push.
