> ## 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 los servicios Valkey, PostgreSQL, MongoDB y RabbitMQ incluidos o gestionados externamente que usa Midaz.

El chart de Midaz habilita Valkey, PostgreSQL, MongoDB y RabbitMQ de forma predeterminada. Puedes deshabilitar un servicio incluido y configurar cada workload habilitado para que use un servicio externo en su lugar.

| Dependencia | Versión de la dependencia del chart | Deshabilitar con            |
| :---------- | :---------------------------------- | :-------------------------- |
| Valkey      | `2.4.7`                             | `valkey.enabled: false`     |
| PostgreSQL  | `16.3.5`                            | `postgresql.enabled: false` |
| MongoDB     | `16.4.0`                            | `mongodb.enabled: false`    |
| RabbitMQ    | `2.1.11`                            | `rabbitmq.enabled: false`   |

<Warning>
  Cuando deshabilitas una dependencia incluida, provee todos los valores de conexión y credenciales que requiere cada workload habilitado antes de desplegar.
</Warning>

## Valkey

Configura un servicio Valkey o Redis externo a través de la configuración y el Secret de Ledger:

```yaml theme={null}
valkey:
  enabled: false

ledger:
  configmap:
    REDIS_HOST: redis.example.internal:6379
  secrets:
    REDIS_PASSWORD: <password>
```

## PostgreSQL

Para un servicio PostgreSQL externo, configura las conexiones de Ledger y, cuando está habilitado, de Tracer. El Job de bootstrap opcional crea las bases de datos `onboarding` y `transaction`, la base de datos de Tracer configurada cuando habilitas Tracer, y el rol `midaz`.

```yaml theme={null}
postgresql:
  enabled: false

ledger:
  configmap:
    DB_ONBOARDING_HOST: postgres.example.internal
    DB_ONBOARDING_REPLICA_HOST: postgres.example.internal
    DB_TRANSACTION_HOST: postgres.example.internal
    DB_TRANSACTION_REPLICA_HOST: postgres.example.internal
  secrets:
    DB_ONBOARDING_PASSWORD: <midaz-password>
    DB_ONBOARDING_REPLICA_PASSWORD: <midaz-password>
    DB_TRANSACTION_PASSWORD: <midaz-password>
    DB_TRANSACTION_REPLICA_PASSWORD: <midaz-password>

tracer:
  configmap:
    DB_HOST: postgres.example.internal
    DB_NAME: tracer
    DB_USER: midaz
  secrets:
    DB_PASSWORD: <midaz-password>

global:
  externalPostgresDefinitions:
    enabled: true
    connection:
      host: postgres.example.internal
      port: "5432"
    postgresAdminLogin:
      useExistingSecret:
        name: postgres-admin
    midazCredentials:
      useExistingSecret:
        name: midaz-postgres
```

Los Secrets referenciados deben proveer `DB_USER_ADMIN` y `DB_ADMIN_PASSWORD`, o `DB_PASSWORD_MIDAZ`, respectivamente. El chart no conecta el Secret de bootstrap con Ledger ni con Tracer automáticamente: sus valores de contraseña deben coincidir con la contraseña del rol `midaz`. Si Tracer usa un Secret existente, agrega `DB_PASSWORD` ahí en su lugar. Cuando habilitas Tracer, el Job de bootstrap también crea la base de datos que nombra `tracer.configmap.DB_NAME` (predeterminado `tracer`) y otorga acceso al rol `midaz`. El Job espera hasta 300 segundos a PostgreSQL y reintenta hasta tres veces. Permanece 300 segundos después de completarse.

## MongoDB

Configura un servicio MongoDB externo en Ledger y, cuando está habilitado, en CRM:

```yaml theme={null}
mongodb:
  enabled: false

ledger:
  configmap:
    MONGO_ONBOARDING_HOST: mongo.example.internal
    MONGO_TRANSACTION_HOST: mongo.example.internal
    MONGO_CRM_HOST: mongo.example.internal
    MONGO_FEES_HOST: mongo.example.internal
  secrets:
    MONGO_ONBOARDING_PASSWORD: <password>
    MONGO_TRANSACTION_PASSWORD: <password>
    MONGO_CRM_PASSWORD: <password>
    MONGO_FEES_PASSWORD: <password>

crm:
  configmap:
    MONGO_HOST: mongo.example.internal
  secrets:
    MONGO_PASSWORD: <password>
```

Cuando el workload opcional de CRM usa `crm.useExistingSecret: true`, pon `MONGO_PASSWORD` en ese Secret existente en lugar de `crm.secrets`.

## RabbitMQ

Para un servicio RabbitMQ externo, define los valores de conexión de la aplicación y carga las definiciones que requiere Midaz. El archivo `charts/midaz/files/rabbitmq/load_definitions.json` contiene las definiciones.

```yaml theme={null}
rabbitmq:
  enabled: false

ledger:
  configmap:
    RABBITMQ_URI: amqp
    RABBITMQ_PROTOCOL: http
    RABBITMQ_HOST: rabbitmq.example.internal
    RABBITMQ_PORT_HOST: "5672"
    RABBITMQ_PORT_AMQP: "15672"
  secrets:
    RABBITMQ_DEFAULT_PASS: <transaction-password>
    RABBITMQ_CONSUMER_PASS: <consumer-password>

global:
  externalRabbitmqDefinitions:
    enabled: true # Local evaluation only; see the security warning below.
    connection:
      protocol: http
      host: rabbitmq.example.internal
      port: "15672"
      portAmqp: "5672"
    rabbitmqAdminLogin:
      useExistingSecret:
        name: rabbitmq-admin
    appCredentials:
      useExistingSecret:
        name: rabbitmq-app
```

El Job de bootstrap aplica las definiciones a través de la API de gestión y provisiona los usuarios de aplicación `transaction` y `consumer`. Antes de importar algo, solo verifica si ambos usuarios ya existen. Si existen, el Job termina sin cargar definiciones ni conciliar sus contraseñas. Los Secrets referenciados usan `RABBITMQ_ADMIN_USER` y `RABBITMQ_ADMIN_PASS`, o `RABBITMQ_DEFAULT_PASS` y `RABBITMQ_CONSUMER_PASS`. El chart no conecta el Secret de bootstrap con Ledger automáticamente: los dos valores de `ledger.secrets` deben coincidir con las contraseñas en `rabbitmq-app`.

<Warning>
  En la revisión auditada, el Job de bootstrap importa el mismo archivo de definiciones incluido antes de cambiar las contraseñas de `transaction` y `consumer`. Ese archivo también crea un administrador llamado `midaz` con la contraseña pública y fija `lerian`, y el Job no rota ni elimina esa cuenta. No ejecutes este Job contra un broker compartido o de producción. Provisiona el vhost, las colas, los exchanges, los bindings y los usuarios de aplicación requeridos de forma independiente, sin importar los usuarios estáticos.
</Warning>

<h2 id="bundled-rabbitmq">
  RabbitMQ incluido
</h2>

El chart de Midaz requiere `ledger.secrets.RABBITMQ_DEFAULT_PASS` y `ledger.secrets.RABBITMQ_CONSUMER_PASS` incluso cuando usas el RabbitMQ incluido. En la revisión auditada, ambos deben ser `lerian` para coincidir con los hashes de contraseña fijos de los usuarios `transaction` y `consumer` en el archivo de definiciones incluido. El chart de RabbitMQ incluido también requiere una cookie de Erlang no vacía. Configúrala como una cadena imprimible de al menos 32 caracteres sin espacios.

<Warning>
  Las definiciones incluidas usan credenciales públicas y fijas. El chart no las genera a partir de `ledger.secrets`. Usa el RabbitMQ incluido solo para evaluación local. Para entornos compartidos o de producción, usa un RabbitMQ gestionado externamente y provisiona sus definiciones sin el Job de bootstrap del chart.
</Warning>

```yaml theme={null}
ledger:
  secrets:
    RABBITMQ_DEFAULT_PASS: lerian
    RABBITMQ_CONSUMER_PASS: lerian

rabbitmq:
  authentication:
    erlangCookie:
      value: "<32-or-more-printable-characters-without-spaces>"
```

## Operaciones de producción

Para un despliegue de producción, evalúa los requisitos de servicio gestionado como backups, recuperación, disponibilidad, monitoreo y controles de acceso antes de elegir dependencias incluidas o externas.
