Esta página fornece uma referência completa e anotada de values.yaml otimizada para implantações em produção. Copie, adapte os marcadores de posição ao seu ambiente e implante.
Esta é uma configuração de referência . Você deve substituir todos os valores de marcador de posição (marcados com {...}) com os dados reais da sua infraestrutura antes de implantar.
Como usar
Copie a configuração completa abaixo em um arquivo chamado values-production.yaml
Substitua todos os marcadores {...} com seus valores reais
Revise cada seção e ajuste os limites de recursos para sua carga de trabalho esperada
Implante:
helm install midaz oci://registry-1.docker.io/lerianstudio/midaz-helm \
--version < versio n > \
-n midaz \
--create-namespace \
-f values-production.yaml
Valores completos de produção
As variáveis de ambiente ACCOUNT_TYPE_VALIDATION e TRANSACTION_ROUTE_VALIDATION foram deprecadas e substituídas pela API de Configurações do Ledger . Use PATCH /v1/organizations/{org_id}/ledgers/{ledger_id}/settings para configurar a validação contábil por ledger.
# =============================================================================
# Midaz Production Values Reference
# =============================================================================
# Este arquivo configura Midaz para um ambiente Kubernetes de produção com:
# - Serviço Ledger unificado (recomendado sobre onboarding/transaction legacy)
# - Bancos de dados externos (PostgreSQL, MongoDB, RabbitMQ, Valkey/Redis)
# - Ingress com TLS
# - Observabilidade habilitada
# - Plugin CRM habilitado
# - Alta disponibilidade com autoscaling
# =============================================================================
# -- Sobrecargas de nome globais
nameOverride : "midaz"
fullnameOverride : ""
namespaceOverride : "midaz"
# =============================================================================
# GLOBAL: Jobs de bootstrap para bancos de dados externos
# =============================================================================
global :
# -- Job de bootstrap para PostgreSQL externo
externalPostgresDefinitions :
enabled : true
connection :
host : "{seu-host-postgres}" # ex: "prod-postgres.example.com"
port : "5432"
postgresAdminLogin :
useExistingSecret :
name : "{seu-secret-admin-postgres}" # Deve conter DB_USER_ADMIN e DB_ADMIN_PASSWORD
midazCredentials :
useExistingSecret :
name : "{seu-secret-credenciais-midaz}" # Deve conter DB_PASSWORD_MIDAZ
# -- Job de bootstrap para RabbitMQ externo
externalRabbitmqDefinitions :
enabled : true
connection :
protocol : "https"
host : "{seu-host-rabbitmq}"
port : "15672"
portAmqp : "5672"
rabbitmqAdminLogin :
useExistingSecret :
name : "{seu-secret-admin-rabbitmq}"
appCredentials :
useExistingSecret :
name : "{seu-secret-app-rabbitmq}"
# =============================================================================
# LEDGER: Serviço unificado (recomendado para novas instalações)
# =============================================================================
ledger :
enabled : true
replicaCount : 3
image :
repository : lerianstudio/midaz-ledger
pullPolicy : IfNotPresent
tag : ""
securityContext :
runAsGroup : 1000
runAsUser : 1000
runAsNonRoot : true
capabilities :
drop :
- ALL
readOnlyRootFilesystem : true
pdb :
enabled : true
minAvailable : 2
maxUnavailable : 1
deploymentUpdate :
type : RollingUpdate
maxSurge : 1
maxUnavailable : 0
service :
type : ClusterIP
port : 3002
ingress :
enabled : true
className : "{sua-classe-ingress}"
annotations :
nginx.ingress.kubernetes.io/proxy-body-size : "10m"
nginx.ingress.kubernetes.io/proxy-read-timeout : "60"
hosts :
- host : "{seu-dominio-api-midaz}"
paths :
- path : /
pathType : Prefix
tls :
- secretName : "{seu-secret-tls}"
hosts :
- "{seu-dominio-api-midaz}"
resources :
requests :
cpu : "1000m"
memory : "512Mi"
limits :
cpu : "2000m"
memory : "2Gi"
autoscaling :
enabled : true
minReplicas : 3
maxReplicas : 10
targetCPUUtilizationPercentage : 70
targetMemoryUtilizationPercentage : 80
affinity :
podAntiAffinity :
preferredDuringSchedulingIgnoredDuringExecution :
- weight : 100
podAffinityTerm :
labelSelector :
matchExpressions :
- key : app.kubernetes.io/name
operator : In
values :
- ledger
topologyKey : kubernetes.io/hostname
configmap :
ENABLE_TELEMETRY : "true"
PLUGIN_AUTH_ENABLED : "false"
PLUGIN_AUTH_HOST : ""
# Accounting Configuration
# Managed via Ledger Settings API — see PATCH /v1/organizations/{org_id}/ledgers/{ledger_id}/settings
# Request body: {"accounting": {"validateRoutes": true, "validateAccountType": true}}
DB_ONBOARDING_HOST : "{seu-host-postgres}"
DB_ONBOARDING_USER : "midaz"
DB_ONBOARDING_NAME : "onboarding"
DB_ONBOARDING_PORT : "5432"
DB_ONBOARDING_REPLICA_HOST : "{seu-host-replica-postgres}"
DB_ONBOARDING_REPLICA_USER : "midaz"
DB_ONBOARDING_REPLICA_NAME : "onboarding"
DB_ONBOARDING_REPLICA_PORT : "5432"
MONGO_ONBOARDING_URI : "mongodb"
MONGO_ONBOARDING_HOST : "{seu-host-mongodb}"
MONGO_ONBOARDING_NAME : "onboarding"
MONGO_ONBOARDING_USER : "midaz"
MONGO_ONBOARDING_PORT : "27017"
DB_TRANSACTION_HOST : "{seu-host-postgres}"
DB_TRANSACTION_USER : "midaz"
DB_TRANSACTION_NAME : "transaction"
DB_TRANSACTION_PORT : "5432"
DB_TRANSACTION_REPLICA_HOST : "{seu-host-replica-postgres}"
DB_TRANSACTION_REPLICA_USER : "midaz"
DB_TRANSACTION_REPLICA_NAME : "transaction"
DB_TRANSACTION_REPLICA_PORT : "5432"
MONGO_TRANSACTION_URI : "mongodb"
MONGO_TRANSACTION_HOST : "{seu-host-mongodb}"
MONGO_TRANSACTION_NAME : "transaction"
MONGO_TRANSACTION_USER : "midaz"
MONGO_TRANSACTION_PORT : "27017"
REDIS_HOST : "{seu-host-redis}:6379"
RABBITMQ_URI : "amqps"
RABBITMQ_HOST : "{seu-host-rabbitmq}"
RABBITMQ_PORT_HOST : "5672"
RABBITMQ_PORT_AMQP : "15672"
RABBITMQ_DEFAULT_USER : "transaction"
RABBITMQ_CONSUMER_USER : "consumer"
RABBITMQ_TRANSACTION_ASYNC : "false"
AUDIT_LOG_ENABLED : "true"
# -- Balance Sync Worker
BALANCE_SYNC_BATCH_SIZE : "100"
BALANCE_SYNC_FLUSH_TIMEOUT_MS : "1000"
BALANCE_SYNC_POLL_INTERVAL_MS : "500"
useExistingSecret : true
existingSecretName : "midaz-ledger"
serviceAccount :
create : true
annotations : {}
# =============================================================================
# SERVIÇOS LEGACY: Desabilitados ao usar Ledger
# =============================================================================
onboarding :
enabled : false
transaction :
enabled : false
# =============================================================================
# CRM
# =============================================================================
crm :
enabled : true
replicaCount : 2
image :
repository : lerianstudio/midaz-crm
pullPolicy : IfNotPresent
tag : ""
securityContext :
runAsGroup : 1000
runAsUser : 1000
runAsNonRoot : true
capabilities :
drop :
- ALL
readOnlyRootFilesystem : true
pdb :
enabled : true
minAvailable : 1
maxUnavailable : 1
service :
type : ClusterIP
port : 4003
ingress :
enabled : true
className : "{sua-classe-ingress}"
hosts :
- host : "{seu-dominio-api-crm}"
paths :
- path : /
pathType : Prefix
tls :
- secretName : "{seu-secret-tls-crm}"
hosts :
- "{seu-dominio-api-crm}"
resources :
requests :
cpu : "200m"
memory : "256Mi"
limits :
cpu : "500m"
memory : "512Mi"
autoscaling :
enabled : true
minReplicas : 2
maxReplicas : 5
targetCPUUtilizationPercentage : 80
targetMemoryUtilizationPercentage : 80
configmap :
ENV_NAME : "production"
PLUGIN_AUTH_ENABLED : "false"
PLUGIN_AUTH_ADDRESS : ""
MONGO_HOST : "{seu-host-mongodb}"
MONGO_NAME : "crm"
MONGO_PORT : "27017"
MONGO_USER : "midaz"
useExistingSecret : true
existingSecretName : "midaz-crm"
# =============================================================================
# DEPENDÊNCIAS INCLUÍDAS: Todas desabilitadas (usando bancos de dados externos)
# =============================================================================
postgresql :
enabled : false
mongodb :
enabled : false
rabbitmq :
enabled : false
valkey :
enabled : false
# =============================================================================
# OBSERVABILIDADE
# =============================================================================
grafana :
enabled : true
name : grafana
ingress :
enabled : true
className : "{sua-classe-ingress}"
hosts :
- host : "{seu-dominio-grafana}"
paths :
- path : /
pathType : Prefix
tls :
- secretName : "{seu-secret-tls-grafana}"
hosts :
- "{seu-dominio-grafana}"
otel-collector-lerian :
enabled : true
external : false
opentelemetry-collector :
config :
processors :
resource/add_client_id :
attributes :
- key : client.id
value : "{nome-da-sua-empresa}"
action : upsert
extraEnvs :
- name : OTEL_API_KEY
valueFrom :
secretKeyRef :
name : otel-api-key
key : api-key
exporters :
otlphttp/server :
endpoint : "https://telemetry.lerian.io:443"
headers :
x-api-key : "${OTEL_API_KEY}"
See all 323 lines
Decisões-chave explicadas
Por que Ledger em vez de Onboarding + Transaction?
O serviço unificado ledger é a abordagem recomendada para todas as novas instalações. Ele combina ambos os módulos em uma única implantação, reduzindo a carga operacional:
Menos pods para gerenciar e monitorar
Configuração simplificada (um único configmap/secret)
Um único endpoint de ingress
Melhor utilização de recursos
Será a única opção em versões futuras
Por que bancos de dados externos?
Implantações em produção devem usar serviços de bancos de dados gerenciados para:
Backups automatizados e recuperação point-in-time
Alta disponibilidade com failover automático
Monitoramento e alertas integrados
Escalamento sem tempo de inatividade da aplicação
Patches de segurança gerenciados pelo provedor
Serviços gerenciados recomendados:
Dependência AWS GCP Azure PostgreSQL Amazon RDS Cloud SQL Azure Database for PostgreSQL MongoDB Amazon DocumentDB ou MongoDB Atlas MongoDB Atlas Azure Cosmos DB (MongoDB API) RabbitMQ Amazon MQ Auto-gerenciado no GKE Auto-gerenciado no AKS Redis/Valkey Amazon ElastiCache Memorystore Azure Cache for Redis
Por que usar Kubernetes Secrets em vez de senhas inline?
Senhas inline em values.yaml são visíveis no histórico de versões do Helm e podem ser commitadas em controle de versão. Usar useExistingSecret: true com Secrets pré-criados do Kubernetes:
Mantém as credenciais fora dos valores do Helm
Permite rotação sem necessidade de upgrade do Helm
Integra com ferramentas de gerenciamento de segredos (Vault, External Secrets Operator, Sealed Secrets)
Anti-afinidade de pods
A regra podAntiAffinity distribui os pods do Ledger em diferentes nós, de modo que a falha de um único nó não derrube todo o serviço.
Checklist antes de implantar
Criar Kubernetes Secrets
Crie todos os secrets necessários no namespace midaz antes de executar helm install:
midaz-ledger (credenciais de bancos de dados e broker de mensagens)
midaz-crm (chaves de criptografia e senha do MongoDB)
otel-api-key (se estiver usando telemetria da Lerian)
Configurar DNS
Aponte seus domínios para o IP externo do controlador de ingress.
Provisionar certificados TLS
Use cert-manager para provisionamento automático ou crie manualmente os secrets TLS.
Verificar conectividade com bancos de dados
Certifique-se de que seu cluster Kubernetes consegue alcançar todos os bancos de dados externos.
Revisar limites de recursos
Ajuste os limites de CPU e memória com base no seu volume de transações esperado.
Implantar
helm install midaz oci://registry-1.docker.io/lerianstudio/midaz-helm \
--version < versio n > \
-n midaz \
--create-namespace \
-f values-production.yaml
Verificar implantação
kubectl get pods -n midaz -o wide
kubectl get ingress -n midaz
helm list -n midaz
Recursos relacionados