Os campos de values do umbrella igrp-stack que se configuram na prática — global, base de dados, storage, identidade, gateway e frontends.
Campos do values.yaml do umbrella. Cada subchart tem muitas mais opções — estas são as que se configuram na prática.
Uma chave no nível errado é ignorada em silêncio
O Helm não valida chaves desconhecidas, e este chart não tem values.schema.json. Uma chave indentada no sítio errado não dá erro, não dá aviso, e o helm template passa — simplesmente não faz nada. Para despistar: helm template ... | grep -c <nome-do-recurso> e confirma que o número de recursos muda quando mexes na chave.
global
| Campo | Default | Descrição |
|---|---|---|
domain / domainapi / domains3api | — | Os três DNS |
corsExtraOrigins | "" | Origens CORS extra em todos os ingress |
smtp.{host,port,username,sender_id} | Office365 | Relay de e-mail (a password é Secret) |
igrp.notifications_enabled | none | mail activa o envio; exige a smtp-password real |
igrp.storage_provider | s3 |
igrp-pg-cluster — PostgreSQL
| Campo | Default | Descrição |
|---|---|---|
dbUsers.users.<svc>.password | teste / "" | Obrigatória em todas as entradas — é o que força o --set em produção |
dbUsers.createSecrets | true | false em GitOps (ops pré-cria os Secrets) |
cluster.cluster.instances | 1 (prod 3) | Total de pods = 1 primário + N−1 réplicas |
cluster.cluster.enablePDB | false (prod true) | Com 1 instância o PDB bloqueia o drain do nó |
cluster.cluster.storage.{storageClass,size} | longhorn / 8Gi | O WAL partilha este volume |
…postgresql.parameters.max_slot_wal_keep_size | 2GB | Travão do WAL |
…postgresql.parameters.max_connections | 250 | |
…initdb.{localeCollate,localeCType} | "C" | ⚠️ A "" cria OutOfSync permanente no ArgoCD |
max_slot_wal_keep_size não é opcional
Sem este travão, uma réplica em baixo enche o volume de WAL e o primário pára. Dimensiona-o ao volume: 2Gi → 512MB, 10Gi → 2GB, 50Gi → 8GB.
igrp-redis
| Campo | Default | Descrição |
|---|---|---|
authSecret.{create,password} | true / teste | ⚠️ Password vazia é gerada e roda a cada sync em GitOps |
redis.global.persistence.{size,storageClass} | 8Gi / "" |
O Redis é obrigatório — guarda a sessão do access-management.
igrp-minio — Object storage
| Campo | Default | Descrição |
|---|---|---|
minio.auth.{rootUser,rootPassword} | admin / teste | Popula o Secret igrp-minio-creds, lido pelo Access Management e pelas notificações |
minio.persistence.{size,storageClass} | 10Gi / "" | ⚠️ storageClass é imutável num PVC já criado |
minio.persistence.existingClaim | "" | Reutilizar volume só se o MinIO anterior for igual ou mais antigo |
credsSecret.create | true | false em GitOps |
bucketInit.{enabled,name,makePublic} | true / igrp / true | Bucket inicial |
bucketInit.anonymousPolicy | download | Leitura anónima; a escrita exige sempre credenciais |
ingress.enabled / apiIngress.enabled | true | Consola · API S3 |
A consola de administração do MinIO já não existe na edição community
A MinIO removeu Identity/Users, Groups e Access Policies da consola entre Abril e Julho de 2025. A partir de minio 2025.7.x fica só o Object Browser. O chart fica de propósito no Bitnami 16.0.10 / MinIO 2025.4.22, a última linha com a consola completa. Quem subir estas tags perde a gestão de acessos pela UI — passa a ser só por mc admin user/policy.
igrp-keycloak — IdP opcional
| Campo | Default | Descrição |
|---|---|---|
enabled | true | false em modo Autentika ou utilizadores locais |
keycloak.auth.adminPassword | teste | Consola do Keycloak |
igrp.clientSecrets.accessManagement | teste | Tem de coincidir com o cliente do realm |
igrp-access-management — Authorization Server
| Campo | Default | Descrição |
|---|---|---|
database.schemaInit.enabled | true | Cria as tabelas do Authorization Server |
oauth.keys.generate.enabled | true (prod false) | Gera as chaves RSA se o Secret não existir. Nunca as roda |
oauth.keys.existingSecret | igrp-access-management-oauth-keys | Em produção: Secret criado por ops |
oauth.externalIdp.enabled | true | false = utilizadores locais |
oauth.externalIdp.{issuerUri,clientId,clientSecret} | Keycloak | Preencher em modo Autentika |
oauth.externalIdp.requireEmailVerified | true | "false" se o IdP não emitir email_verified |
oauth.defaultClient.{redirectUris,postLogoutRedirectUris} | listas | Callbacks de todos os frontends |
oauth.defaultClient.redirectUriSync.enabled | true | Funde (nunca remove) os URIs no cliente |
oauthClient.{clientId,clientSecret} | — | Cliente OIDC partilhado + M2M do Access Management |
catalogSeed.enabled | true | Semeia o catálogo de permissões numa base de dados nova |
app.superadminExternalId | — | O sub do IdP externo, não o email |
secrets.smtp-password | CHANGE_ME |
O superadmin identifica-se pelo external-id, não pelo email
O superadmin é identificado pelo external-id — gravado no username de t_user, igual ao sub do IdP. O superadminEmail é só um atributo. Se o superadmin não coincidir com o utilizador do IdP externo, põe o sub real em app.superadminExternalId.
igrp-gateway-api
| Campo | Default | Descrição |
|---|---|---|
discovery.allNamespaces | true | Isolado por gateway.name |
routeRefresh.periodic.enabled | true | Sidecar que faz POST /actuator/gateway/refresh a cada 30s — Services novos ganham rota sozinhos |
routeRefresh.bootstrapUrls | lista | URLs acordadas após o sync, para os frontends se registarem |
Frontends — igrp-app-center e *-ui
| Campo | Default | Descrição |
|---|---|---|
auth.provider / auth.clientId | igrp-auth / igrp-access-management | Sempre — autenticam no Access Management |
nextauth.secret (app-center) | teste | Dono do Secret igrp-app-center-nextauth |
nextauth.existingSecret (UIs) | igrp-app-center-nextauth | Ver aviso abaixo |
m2m.autoRegister.enabled | true | Regista o cliente OAuth próprio da UI |
app.{syncAccess,syncOnCodeMenus,previewMode} | true/true/false | Sincronização de menus e permissões |
app.settingsUrl | https://<global.domain>/settings | Página de definições, sempre no domínio do app-center |
Todas as UIs têm de ler o MESMO Secret de NextAuth
Se cada UI tiver o seu nextauth-secret, a sessão perde-se ao trocar de app no mesmo domínio. O default (existingSecret: igrp-app-center-nextauth) está correcto — só o mudes se souberes porquê.
NEXT_PUBLIC_* é baked no next build
O chart corrige a env de runtime, mas o bundle client-side só leva o valor novo quando a imagem for reconstruída com ele como --build-arg. Mudar o values não chega para variáveis NEXT_PUBLIC_*.
APIs dos módulos — *-api
| Campo | Default | Descrição |
|---|---|---|
database.envFromSecret.name | igrp-<svc>-db-user | Credenciais da base de dados |
database.autoCreate.enabled | true | Job que cria role + BD por SQL directo |
gateway.expose | true | Publica o serviço no gateway |
m2m.autoRegister.enabled | true | Regista o cliente M2M no Access Management |
spring.application.name tem de ser igual ao client-id
O AuthorizationSyncRunner procura o resource por esse nome. Se divergirem, o arranque falha com 404 IGRP_AUTH_RESOURCE_NOT_FOUND_BY_NAME. O chart lê o SPRING_APPLICATION_NAME do Secret M2M, por isso isto só acontece em configurações manuais.
Notificações
| Campo | Default | Descrição |
|---|---|---|
igrp-notification-{temporal,api,ui}.enabled | true (prod false) | Activar os três ou nenhum |
igrp-notification-temporal.webIngress.enabled | false | ⚠️ A Web UI do Temporal não tem autenticação |
Última atualização:
