> ## 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.

# Configurar dependencias

> Configura las dependencias Helm de Midaz — Valkey, PostgreSQL, MongoDB, RabbitMQ — usando charts incluidos o servicios externos gestionados en producción.

El Chart de Helm de Midaz tiene las siguientes dependencias para la instalación predeterminada del proyecto. Todas las dependencias están habilitadas por defecto.

<Tip>
  **Recomendación para producción:** Por defecto, el chart de Midaz incluye todas las dependencias. Para despliegues en producción, deshabilita las dependencias incluidas y conéctate a servicios gestionados (AWS RDS, Amazon MQ, etc.) para mejor confiabilidad, respaldos automatizados y escalado.
</Tip>

<Note>
  Los ejemplos a continuación muestran configuraciones tanto para el servicio **Ledger** (recomendado) como para los servicios **Onboarding/Transaction** (legacy). Elige la configuración que corresponda a tu despliegue.
</Note>

### Valkey

* **Versión**: 2.4.7
* **Repositorio**: [Bitnami](https://charts.bitnami.com/bitnami)
* **Deshabilitar**: `valkey.enabled = false`

<Tip>
  **Producción:** Usa Redis/Valkey gestionado (ElastiCache, Memorystore) para alta disponibilidad y failover automático.
</Tip>

Si tienes una instancia existente de Valkey o Redis, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu instancia externa.

<Tabs>
  <Tab title="Ledger (recomendado)">
    ```yaml theme={null}
    ledger:
      configmap:
        REDIS_HOST: {tu-host}:{tu-puerto-host}
      secrets:
        REDIS_PASSWORD: {tu-contraseña-host}
    ```
  </Tab>

  <Tab title="Onboarding/Transaction (legacy)">
    ```yaml theme={null}
    onboarding:
      configmap:
        REDIS_HOST: {tu-host}:{tu-puerto-host}
      secrets:
        REDIS_PASSWORD: {tu-contraseña-host}

    transaction:
      configmap:
        REDIS_HOST: {tu-host}:{tu-puerto-host}
      secrets:
        REDIS_PASSWORD: {tu-contraseña-host}
    ```
  </Tab>
</Tabs>

### PostgreSQL

* **Versión**: 16.3.5
* **Repositorio**: [Bitnami](https://charts.bitnami.com/bitnami)
* **Deshabilitar**: `postgresql.enabled = false`

<Tip>
  **Producción:** Usa PostgreSQL gestionado (RDS, CloudSQL, Azure Database) con respaldos automatizados y recuperación point-in-time.
</Tip>

Si tienes una instancia existente de PostgreSQL, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu PostgreSQL externo.

<Tabs>
  <Tab title="Ledger (recomendado)">
    ```yaml expandable theme={null}
    ledger:
      configmap:
        # Base de datos del módulo Onboarding
        DB_ONBOARDING_HOST: {tu-host}
        DB_ONBOARDING_USER: {tu-usuario-host}
        DB_ONBOARDING_PORT: {tu-puerto-host}
        DB_ONBOARDING_REPLICA_HOST: {tu-host-replicacion}
        DB_ONBOARDING_REPLICA_USER: {tu-usuario-host-replicacion}
        DB_ONBOARDING_REPLICA_PORT: {tu-puerto-host-replicacion}
        # Base de datos del módulo Transaction
        DB_TRANSACTION_HOST: {tu-host}
        DB_TRANSACTION_USER: {tu-usuario-host}
        DB_TRANSACTION_PORT: {tu-puerto-host}
        DB_TRANSACTION_REPLICA_HOST: {tu-host-replicacion}
        DB_TRANSACTION_REPLICA_USER: {tu-usuario-host-replicacion}
        DB_TRANSACTION_REPLICA_PORT: {tu-puerto-host-replicacion}
      secrets:
        DB_ONBOARDING_PASSWORD: {tu-contraseña-host}
        DB_ONBOARDING_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}
        DB_TRANSACTION_PASSWORD: {tu-contraseña-host}
        DB_TRANSACTION_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}
    ```
  </Tab>

  <Tab title="Onboarding/Transaction (legacy)">
    ```yaml expandable theme={null}
    onboarding:
      configmap:
        DB_HOST: {tu-host}
        DB_USER: {tu-usuario-host}
        DB_PORT: {tu-puerto-host}
        DB_REPLICA_HOST: {tu-host-replicacion}
        DB_REPLICA_USER: {tu-usuario-host-replicacion}
        DB_REPLICA_PORT: {tu-puerto-host-replicacion}
      secrets:
        DB_PASSWORD: {tu-contraseña-host}
        DB_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}

    transaction:
      configmap:
        DB_HOST: {tu-host}
        DB_USER: {tu-usuario-host}
        DB_PORT: {tu-puerto-host}
        DB_REPLICA_HOST: {tu-host-replicacion}
        DB_REPLICA_USER: {tu-usuario-host-replicacion}
        DB_REPLICA_PORT: {tu-puerto-host-replicacion}
      secrets:
        DB_PASSWORD: {tu-contraseña-host}
        DB_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}
    ```
  </Tab>
</Tabs>

#### Job de Bootstrap para PostgreSQL externo

Cuando usas un PostgreSQL externo (`postgresql.enabled: false`), este chart proporciona un Job de bootstrap único que:

* Crea las bases de datos `onboarding` y `transaction` si no existen.
* Crea el rol/usuario `midaz` si no existe y establece su contraseña.
* Otorga privilegios de base de datos y permisos del esquema `public` para que `midaz` pueda crear tablas.
* Espera conectividad con un timeout de 300s.
* Es idempotente: si todo ya existe, imprime y sale.

Configura en `values.yaml`:

```yaml expandable theme={null}
postgresql:
  enabled: false  # deshabilita PostgreSQL incluido para usar uno externo

global:
  externalPostgresDefinitions:
    enabled: true
    connection:
      host: "tu-host-postgres"
      port: "5432"
    postgresAdminLogin:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: DB_USER_ADMIN, DB_ADMIN_PASSWORD
      useExistingSecret:
        name: "my-postgres-admin-secret"
      # Opción B: Credenciales en línea (no recomendado en producción)
      # username: "postgres"
      # password: "s3cret"
    midazCredentials:
      # Opción A: Usar un Secret existente (recomendado)
      # Clave requerida: DB_PASSWORD_MIDAZ
      useExistingSecret:
        name: "my-midaz-credentials-secret"
      # Opción B: Contraseña en línea (no recomendado en producción)
      # password: "midaz-password"
```

<Note>
  Todos los secrets deben estar en el mismo namespace que el release. El Job tiene un TTL de 300 segundos después de completarse.
</Note>

### MongoDB

* **Versión**: 16.4.0
* **Repositorio**: [Bitnami](https://charts.bitnami.com/bitnami)
* **Deshabilitar**: `mongodb.enabled = false`

<Tip>
  **Producción:** Usa MongoDB gestionado (Atlas, DocumentDB) para escalado automático, respaldos y cifrado en reposo.
</Tip>

Si tienes una instancia existente de MongoDB, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu MongoDB externo.

<Tabs>
  <Tab title="Ledger (recomendado)">
    ```yaml theme={null}
    ledger:
      configmap:
        # Módulo Onboarding
        MONGO_ONBOARDING_HOST: {tu-host}
        MONGO_ONBOARDING_NAME: {tu-nombre-host}
        MONGO_ONBOARDING_USER: {tu-usuario-host}
        MONGO_ONBOARDING_PORT: {tu-puerto-host}
        # Módulo Transaction
        MONGO_TRANSACTION_HOST: {tu-host}
        MONGO_TRANSACTION_NAME: {tu-nombre-host}
        MONGO_TRANSACTION_USER: {tu-usuario-host}
        MONGO_TRANSACTION_PORT: {tu-puerto-host}
      secrets:
        MONGO_ONBOARDING_PASSWORD: {tu-contraseña-host}
        MONGO_TRANSACTION_PASSWORD: {tu-contraseña-host}
    ```
  </Tab>

  <Tab title="Onboarding/Transaction (legacy)">
    ```yaml theme={null}
    onboarding:
      configmap:
        MONGO_HOST: {tu-host}
        MONGO_NAME: {tu-nombre-host}
        MONGO_USER: {tu-usuario-host}
        MONGO_PORT: {tu-puerto-host}
      secrets:
        MONGO_PASSWORD: {tu-contraseña-host}

    transaction:
      configmap:
        MONGO_HOST: {tu-host}
        MONGO_NAME: {tu-nombre-host}
        MONGO_USER: {tu-usuario-host}
        MONGO_PORT: {tu-puerto-host}
      secrets:
        MONGO_PASSWORD: {tu-contraseña-host}
    ```
  </Tab>
</Tabs>

### RabbitMQ

* **Versión**: 2.1.11
* **Repositorio**: [Groundhog2k](https://Groundhog2k.github.io/helm-charts)
* **Deshabilitar**: `rabbitmq.enabled = false`

<Tip>
  **Producción:** Usa RabbitMQ gestionado (Amazon MQ, CloudAMQP) con configuración HA para durabilidad de mensajes y failover automático.
</Tip>

Si estás usando una instancia externa de RabbitMQ, **necesitas cargar** el archivo requerido [load\_definitions.json](https://github.com/LerianStudio/helm/blob/main/charts/midaz/files/rabbitmq/load_definitions.json). Sin estas colas, intercambios y enlaces en su lugar, **Midaz no funcionará como se espera**.

Puedes cargar las definiciones de una de dos maneras:

**Automáticamente**

Habilita el job de bootstrap en tu `values.yaml` para aplicar automáticamente las definiciones de RabbitMQ a tu instancia externa:

```yaml theme={null}
global:
  externalRabbitmqDefinitions:
    enabled: true
```

**Manualmente**

Si prefieres aplicar las definiciones tú mismo, usa la API HTTP de RabbitMQ:

```bash theme={null}
curl -u {usuario}:{contraseña} -X POST -H "Content-Type: application/json" \
  -d @load_definitions.json http://{host}:{puerto}/api/definitions
```

El archivo `load_definitions.json` se encuentra en: `charts/midaz/files/rabbitmq/load_definitions.json`.

#### Job de Bootstrap para RabbitMQ externo

Para simplificar la configuración de RabbitMQ externo, este chart proporciona un Job único que:

* Aplica el archivo de definiciones estándar mediante la API HTTP.
* Crea/actualiza los usuarios `transaction` y `consumer` con contraseñas personalizadas.
* Espera conectividad AMQP con un timeout de 300s.
* Es idempotente: si los usuarios ya existen, omite y sale.

Configura en `values.yaml`:

```yaml expandable theme={null}
rabbitmq:
  enabled: false  # deshabilita RabbitMQ incluido para usar uno externo

global:
  externalRabbitmqDefinitions:
    enabled: true
    connection:
      protocol: "http"          # http o https
      host: "tu-host-rabbitmq"
      port: "15672"             # Puerto de gestión HTTP
      portAmqp: "5672"          # Puerto AMQP (para verificación de conectividad)
    rabbitmqAdminLogin:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: RABBITMQ_ADMIN_USER, RABBITMQ_ADMIN_PASS
      useExistingSecret:
        name: "my-rabbitmq-admin-secret"
      # Opción B: Credenciales en línea (no recomendado en producción)
      # username: "admin"
      # password: "s3cret"
    appCredentials:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: RABBITMQ_DEFAULT_PASS, RABBITMQ_CONSUMER_PASS
      useExistingSecret:
        name: "my-rabbitmq-app-credentials"
      # Opción B: Contraseñas en línea (no recomendado en producción)
      # transactionPassword: "transaction-pass"
      # consumerPassword: "consumer-pass"
```

<Note>
  Todos los secrets deben estar en el mismo namespace que el release. El Job tiene un TTL de 300 segundos después de completarse. Usuarios creados: `midaz` (admin), `transaction`, `consumer`.
</Note>

#### RabbitMQ sobre TLS/SSL

Si tu servidor RabbitMQ requiere TLS/SSL, actualiza las variables de entorno del cliente para usar protocolos seguros:

<Tabs>
  <Tab title="Ledger (recomendado)">
    ```yaml theme={null}
    ledger:
      configmap:
        RABBITMQ_URI: "amqps"      # era "amqp"
        RABBITMQ_PROTOCOL: "https" # era "http"
    ```
  </Tab>

  <Tab title="Onboarding/Transaction (legacy)">
    ```yaml theme={null}
    onboarding:
      configmap:
        RABBITMQ_URI: "amqps"      # era "amqp"
        RABBITMQ_PROTOCOL: "https" # era "http"

    transaction:
      configmap:
        RABBITMQ_URI: "amqps"      # era "amqp"
        RABBITMQ_PROTOCOL: "https" # era "http"
    ```
  </Tab>
</Tabs>

#### Usar tu propio RabbitMQ

Si ya tienes una instancia de RabbitMQ ejecutándose, puedes deshabilitar la dependencia integrada y apuntar los componentes de Midaz a tu configuración externa.

<Tabs>
  <Tab title="Ledger (recomendado)">
    ```yaml theme={null}
    ledger:
      configmap:
        RABBITMQ_HOST: {tu-host}
        RABBITMQ_DEFAULT_USER: {tu-usuario-host}
        RABBITMQ_PORT_HOST: {tu-puerto-host}
        RABBITMQ_PORT_AMQP: {tu-puerto-amqp-host}
      secrets:
        RABBITMQ_DEFAULT_PASS: {tu-contraseña-host}
        RABBITMQ_CONSUMER_PASS: {tu-contraseña-consumer-rabbitmq}
    ```
  </Tab>

  <Tab title="Onboarding/Transaction (legacy)">
    ```yaml theme={null}
    onboarding:
      configmap:
        RABBITMQ_HOST: {tu-host}
        RABBITMQ_DEFAULT_USER: {tu-usuario-host}
        RABBITMQ_PORT_HOST: {tu-puerto-host}
        RABBITMQ_PORT_AMQP: {tu-puerto-amqp-host}
      secrets:
        RABBITMQ_DEFAULT_PASS: {tu-contraseña-host}

    transaction:
      configmap:
        RABBITMQ_HOST: {tu-host}
        RABBITMQ_DEFAULT_USER: {tu-usuario-host}
        RABBITMQ_PORT_HOST: {tu-puerto-host}
        RABBITMQ_PORT_AMQP: {tu-puerto-amqp-host}
      secrets:
        RABBITMQ_DEFAULT_PASS: {tu-contraseña-host}
    ```
  </Tab>
</Tabs>
