iGRPIGRP 3.0Documentation

Configuração do chart

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

CampoDefaultDescrição
domain / domainapi / domains3api—Os três DNS
corsExtraOrigins""Origens CORS extra em todos os ingress
smtp.{host,port,username,sender_id}Office365Relay de e-mail (a password é Secret)
igrp.notifications_enablednonemail activa o envio; exige a smtp-password real
igrp.storage_providers3

igrp-pg-cluster — PostgreSQL

CampoDefaultDescrição
dbUsers.users.<svc>.passwordteste / ""Obrigatória em todas as entradas — é o que força o --set em produção
dbUsers.createSecretstruefalse em GitOps (ops pré-cria os Secrets)
cluster.cluster.instances1 (prod 3)Total de pods = 1 primário + N−1 réplicas
cluster.cluster.enablePDBfalse (prod true)Com 1 instância o PDB bloqueia o drain do nó
cluster.cluster.storage.{storageClass,size}longhorn / 8GiO WAL partilha este volume
…postgresql.parameters.max_slot_wal_keep_size2GBTravão do WAL
…postgresql.parameters.max_connections250
…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

CampoDefaultDescriçã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

CampoDefaultDescrição
minio.auth.{rootUser,rootPassword}admin / testePopula 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.createtruefalse em GitOps
bucketInit.{enabled,name,makePublic}true / igrp / trueBucket inicial
bucketInit.anonymousPolicydownloadLeitura anónima; a escrita exige sempre credenciais
ingress.enabled / apiIngress.enabledtrueConsola · 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

CampoDefaultDescrição
enabledtruefalse em modo Autentika ou utilizadores locais
keycloak.auth.adminPasswordtesteConsola do Keycloak
igrp.clientSecrets.accessManagementtesteTem de coincidir com o cliente do realm

igrp-access-management — Authorization Server

CampoDefaultDescrição
database.schemaInit.enabledtrueCria as tabelas do Authorization Server
oauth.keys.generate.enabledtrue (prod false)Gera as chaves RSA se o Secret não existir. Nunca as roda
oauth.keys.existingSecretigrp-access-management-oauth-keysEm produção: Secret criado por ops
oauth.externalIdp.enabledtruefalse = utilizadores locais
oauth.externalIdp.{issuerUri,clientId,clientSecret}KeycloakPreencher em modo Autentika
oauth.externalIdp.requireEmailVerifiedtrue"false" se o IdP não emitir email_verified
oauth.defaultClient.{redirectUris,postLogoutRedirectUris}listasCallbacks de todos os frontends
oauth.defaultClient.redirectUriSync.enabledtrueFunde (nunca remove) os URIs no cliente
oauthClient.{clientId,clientSecret}—Cliente OIDC partilhado + M2M do Access Management
catalogSeed.enabledtrueSemeia o catálogo de permissões numa base de dados nova
app.superadminExternalId—O sub do IdP externo, não o email
secrets.smtp-passwordCHANGE_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

CampoDefaultDescrição
discovery.allNamespacestrueIsolado por gateway.name
routeRefresh.periodic.enabledtrueSidecar que faz POST /actuator/gateway/refresh a cada 30s — Services novos ganham rota sozinhos
routeRefresh.bootstrapUrlslistaURLs acordadas após o sync, para os frontends se registarem

Frontends — igrp-app-center e *-ui

CampoDefaultDescrição
auth.provider / auth.clientIdigrp-auth / igrp-access-managementSempre — autenticam no Access Management
nextauth.secret (app-center)testeDono do Secret igrp-app-center-nextauth
nextauth.existingSecret (UIs)igrp-app-center-nextauthVer aviso abaixo
m2m.autoRegister.enabledtrueRegista o cliente OAuth próprio da UI
app.{syncAccess,syncOnCodeMenus,previewMode}true/true/falseSincronização de menus e permissões
app.settingsUrlhttps://<global.domain>/settingsPá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

CampoDefaultDescrição
database.envFromSecret.nameigrp-<svc>-db-userCredenciais da base de dados
database.autoCreate.enabledtrueJob que cria role + BD por SQL directo
gateway.exposetruePublica o serviço no gateway
m2m.autoRegister.enabledtrueRegista 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

CampoDefaultDescrição
igrp-notification-{temporal,api,ui}.enabledtrue (prod false)Activar os três ou nenhum
igrp-notification-temporal.webIngress.enabledfalse⚠️ A Web UI do Temporal não tem autenticação
How is this guide?

Última atualização: