Helm Chart de instalação do stack do IGRP num cluster Kubernetes — componentes, pré-requisitos, instalação e verificação.
O igrp-stack é o Helm Chart que instala a plataforma IGRP num cluster Kubernetes: base de dados, gestão de acessos, gateway de APIs, object storage, processos e notificações. Enquanto o Workspace te dá a plataforma no teu portátil, o igrp-stack dá-te a mesma plataforma num cluster — para ambientes de teste, homologação e produção.
Versão exacta, nunca ranges
A versão actual é 0.2.0-beta. Em SemVer, 0.2.0-beta é inferior a 2.1.0 — um range como ^2.0.0 ou >=2.0.0 nunca a apanha, e um range aberto puxa a versão errada. Usa sempre a versão exacta.
| Charts | oci://registry.nosi.cv/igrp-charts |
| Imagens IGRP | registry.nosi.cv/igrp/* (tag 0.2.0-beta) |
| Imagens de terceiros | registry.nosi.cv/igrp-mirror/* — nada vem do Docker Hub |
Componentes

O diagrama mostra a visão funcional — o que cada serviço faz e como se relacionam. A tabela abaixo é a visão de instalação: os 14 subcharts, todos com <nome>.enabled.
| Subchart | O que é | Onde responde |
|---|---|---|
igrp-pg-cluster | PostgreSQL (operador CloudNative-PG) | igrp-pg-cluster-rw:5432 |
igrp-redis | Redis — obrigatório (sessão do access-management) | igrp-redis-master:6379 |
igrp-minio | Object storage S3 + consola de administração | domains3api · domain/minio/ |
igrp-keycloak | IdP upstream opcional | domain/auth |
igrp-access-management | Authorization Server OAuth2 — emite JWT, gere utilizadores e permissões | via gateway |
igrp-gateway-api | Gateway de APIs com discovery automático | domainapi |
igrp-app-center | Frontend principal | domain/ |
igrp-process-studio-api / -ui | Desenho de processos | domain/apps/igrp-process-studio |
igrp-process-management-api / -ui | Execução de processos | domain/apps/igrp-process-management |
igrp-notification-temporal | Temporal — motor de workflows | interno |
igrp-notification-api / -ui | Notificações: e-mail, in-app, webhooks | domain/apps/notifications |
Três domínios, três entradas: domain serve as UIs, a consola do MinIO e o Keycloak; domainapi serve todas as APIs através do gateway; domains3api é o endpoint S3.
Todos os frontends autenticam no access-management, partilhando um cliente OIDC. O IdP a montante escolhe-se lá: Keycloak, Autentika/WSO2 ou utilizadores locais.
Pré-requisitos
| Requisito | Verificar com |
|---|---|
| Operador CloudNative-PG (≥ 1.25) | kubectl get pods -n cnpg-system |
StorageClass (ex.: longhorn) | kubectl get storageclass |
| nginx IngressController | kubectl get ingressclass |
| DNS dos 3 domínios | getent hosts <domain> |
helm ≥ 3.8 e kubectl | helm version |
Instalação
1. Perfil de values
Empilham-se com -f, sempre por cima do values.yaml:
| IdP | Teste | Produção |
|---|---|---|
| Keycloak | values.yaml | + values.prod.yaml |
| Autentika | + values.autentika.yaml | + values.prod.yaml + values.autentika.prod.yaml |
O values.yaml traz passwords de teste públicas
O values.yaml instala sem passos manuais, mas as credenciais que traz são públicas — nunca num ambiente exposto. O values.prod.yaml esvazia-as todas e sobe o PostgreSQL para 3 instâncias.
2. Domínios
global:
domain: apps.exemplo.cv # UIs, consola MinIO, Keycloak
domainapi: api.exemplo.cv # APIs, via gateway
domains3api: s3api.exemplo.cv # endpoint S33. Instalar
Teste — um comando:
helm upgrade --install igrp-stack oci://registry.nosi.cv/igrp-charts/igrp-stack \
--version 0.2.0-beta -n igrp-stack --create-namespace -f values.yamlProdução — os segredos num ficheiro à parte, fora do git:
# secrets.yaml
igrp-pg-cluster:
dbUsers:
users:
accessManagement: {password: "..."}
keycloak: {password: "..."}
processStudio: {password: "..."}
processManagement: {password: "..."}
notification: {password: "..."}
notificationTemporal: {password: "..."}
igrp-access-management:
oauthClient: {clientSecret: "..."}
secrets: {smtp-password: "..."}
igrp-keycloak:
igrp: {clientSecrets: {accessManagement: "..."}}
keycloak: {auth: {adminPassword: "..."}}
igrp-minio:
minio: {auth: {rootPassword: "..."}}
igrp-app-center:
nextauth: {secret: "..."}helm upgrade --install igrp-stack oci://registry.nosi.cv/igrp-charts/igrp-stack \
--version 0.2.0-beta -n igrp-stack --create-namespace \
-f values.yaml -f values.prod.yaml -f secrets.yamlAs 6 passwords de base de dados são obrigatórias
Sem elas o render falha de propósito. Em produção, a alternativa recomendada é não ter segredos no git de todo — ver Instalação de produção.
4. Por ArgoCD
O repo de deployment tem um Chart.yaml que redeclara o umbrella mais o values.yaml do ambiente. Duas regras que poupam horas:
- Um repo que redeclara o umbrella não herda o
values.yamldele — todo o wiring tem de estar no values do ambiente. - Sincronizar pelo botão SYNC ou
argocd app sync. Umkubectl patchdo.operationcorre comskipHooks=truee nenhum Job de inicialização corre.
Não há passos manuais
15 Jobs criam as bases de dados, o schema do Authorization Server, as chaves RSA, os clientes OAuth, o bucket do MinIO e o namespace do Temporal — por sync-waves, de -5 (chaves) a 5 (API de notificações).
Verificação
kubectl get pods -n igrp-stack # nada parado
kubectl get jobs -n igrp-stack # todos Complete
# nenhuma imagem de fora do nosso registry (só deve sair alpine:3.17, hook de teste)
kubectl get pods -n igrp-stack --field-selector=status.phase=Running \
-o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' \
| sort -u | grep -v '^registry.nosi.cv/'
curl -sk -o /dev/null -w '%{http_code}\n' https://<domain>/
curl -sk -o /dev/null -w '%{http_code}\n' https://<domainapi>/igrp-access-management/.well-known/openid-configuration
curl -sk -o /dev/null -w '%{http_code}\n' https://<domains3api>/minio/health/liveA consola do MinIO não se valida por curl
Devolve 200 em qualquer caminho. Testa o redirect e abre no browser:
curl -sk -o /dev/null -w '%{http_code} %{redirect_url}\n' https://<domain>/minio deve dar 301 para /minio/.
Por onde seguir
| Página | Para quê |
|---|---|
| Configuração | Todos os campos de values que se configuram na prática |
| Instalação de produção | Sem segredos no git — Sealed Secrets ou Secrets directos |
| ArgoCD | GitOps, segredos, armadilhas do sync |
| Clientes OAuth | Registar clientes e service accounts por curl |
Última atualização:
