> ## 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 dependências

> Configure os serviços de Valkey, PostgreSQL, MongoDB e RabbitMQ, empacotados ou gerenciados externamente, que o Midaz usa.

O chart do Midaz habilita Valkey, PostgreSQL, MongoDB e RabbitMQ por padrão. Você pode desabilitar um serviço empacotado e configurar cada carga de trabalho habilitada para usar um serviço externo no lugar.

| Dependência | Versão da dependência do chart | Desabilitar com             |
| :---------- | :----------------------------- | :-------------------------- |
| 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>
  Quando você desabilita uma dependência empacotada, forneça todos os valores de conexão e credenciais exigidos por cada carga de trabalho habilitada antes do deploy.
</Warning>

## Valkey

Configure um serviço externo de Valkey ou Redis pela configuração e pelo Secret do Ledger:

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

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

## PostgreSQL

Para um serviço externo de PostgreSQL, configure as conexões do Ledger e, quando habilitado, do Tracer. O Job de bootstrap opcional cria os bancos de dados `onboarding` e `transaction`, o banco do Tracer configurado quando você habilita o Tracer, e o papel `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
```

Os Secrets referenciados devem fornecer `DB_USER_ADMIN` e `DB_ADMIN_PASSWORD`, ou `DB_PASSWORD_MIDAZ`, respectivamente. O chart não liga o Secret de bootstrap ao Ledger ou ao Tracer automaticamente: os valores de senha deles devem ser iguais à senha do papel `midaz`. Se o Tracer usa um Secret existente, adicione `DB_PASSWORD` nesse Secret. Quando você habilita o Tracer, o Job de bootstrap também cria o banco de dados indicado por `tracer.configmap.DB_NAME` (padrão `tracer`) e concede acesso ao papel `midaz`. O Job espera até 300 segundos pelo PostgreSQL e faz até três novas tentativas. Ele permanece por 300 segundos depois de terminar.

## MongoDB

Configure um serviço externo de MongoDB no Ledger e, quando habilitado, no 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>
```

Quando a carga de trabalho opcional de CRM usa `crm.useExistingSecret: true`, coloque `MONGO_PASSWORD` nesse Secret existente em vez de em `crm.secrets`.

## RabbitMQ

Para um serviço externo de RabbitMQ, defina os valores de conexão da aplicação e carregue as definições exigidas pelo Midaz. O arquivo `charts/midaz/files/rabbitmq/load_definitions.json` contém as definições.

```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
```

O Job de bootstrap aplica as definições pela API de gerenciamento e provisiona os usuários de aplicação `transaction` e `consumer`. Antes de importar qualquer coisa, ele verifica apenas se os dois usuários já existem. Se existirem, o Job termina sem carregar definições nem conciliar as senhas deles. Os Secrets referenciados usam `RABBITMQ_ADMIN_USER` e `RABBITMQ_ADMIN_PASS`, ou `RABBITMQ_DEFAULT_PASS` e `RABBITMQ_CONSUMER_PASS`. O chart não liga o Secret de bootstrap ao Ledger automaticamente: os dois valores de `ledger.secrets` devem ser iguais às senhas em `rabbitmq-app`.

<Warning>
  Na revisão auditada, o Job de bootstrap importa o mesmo arquivo de definições empacotado antes de trocar as senhas de `transaction` e `consumer`. Esse arquivo também cria um administrador chamado `midaz` com a senha pública e fixa `lerian`, e o Job não rotaciona nem remove essa conta. Não rode este Job contra um broker compartilhado ou de produção. Provisione o vhost, as filas, os exchanges, os bindings e os usuários de aplicação necessários de forma independente, sem importar os usuários estáticos.
</Warning>

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

O chart do Midaz exige `ledger.secrets.RABBITMQ_DEFAULT_PASS` e `ledger.secrets.RABBITMQ_CONSUMER_PASS` mesmo quando você usa o RabbitMQ empacotado. Na revisão auditada, os dois devem ser `lerian` para corresponder aos hashes de senha fixos dos usuários `transaction` e `consumer` no arquivo de definições empacotado. O chart do RabbitMQ empacotado também exige um Erlang cookie não vazio. Defina um texto imprimível de pelo menos 32 caracteres sem espaços.

<Warning>
  As definições empacotadas usam credenciais públicas e fixas. O chart não as gera a partir de `ledger.secrets`. Use o RabbitMQ empacotado apenas para avaliação local. Para ambientes compartilhados ou de produção, use um RabbitMQ gerenciado externamente e provisione as definições dele sem o Job de bootstrap do 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>"
```

## Operações em produção

Para um deploy em produção, avalie os requisitos de serviço gerenciado, como backups, recuperação, disponibilidade, monitoramento e controles de acesso, antes de escolher dependências empacotadas ou externas.
