feat(molde): o BFF, a cota que o comporta, o tema de login e as imagens do escolinha

O tenant provisionado subia com a tela de login de fabrica e o sistema vazio.
Quatro mudancas, medidas contra o escolinha que e o que funciona:

- 90-servico-bff.yaml: o quinto Deployment. A SPA chama o BFF para quase tudo;
  sem ele /bff devolve 502. As URLs apontam para os RUNTIMES, e nao para os
  treze servicos — e a diferenca deste molde para o do escolinha.
- a cota sobe para 10 pods e 2Gi: com quatro Deployments o tenant ja usava
  1232Mi de 1536Mi, e o BFF pede 256Mi. Caberia em repouso e estouraria no
  primeiro rollout.
- loginTheme athleticmap-v2 no realm, com o tema montado no Keycloak
  compartilhado.
- imagens alinhadas: frontend 2.67-csp-script e os runtimes 1.2-auditoria.

O que NAO mudou, e por que: ATM_API_URL continua no runtime-operacao e o
Ingress continua com uma rota. Os dois estao certos — o nginx da SPA roteia
/bff e /api por conta propria, e ATM_API_URL e o destino do que nao pertence a
grupo nenhum, hoje o webhook em /api/public. O cabecalho do molde ja dizia.
This commit is contained in:
deploy
2026-09-24 23:42:16 +00:00
parent d56a72ac5d
commit 935b6c65f0
5 changed files with 106 additions and 8 deletions
@@ -51,11 +51,20 @@ metadata:
namespace: {{TENANT}}-prod
spec:
hard:
requests.cpu: "1"
requests.memory: 1.5Gi
limits.cpu: "4"
limits.memory: 2.5Gi
pods: "8"
# SUBIU em 2026-09-24 para caber o BFF, o quinto Deployment.
#
# Nao e folga generosa: com quatro Deployments o tenant ja usava 1232Mi dos
# 1536Mi, e o BFF pede 256Mi. Caberia no limite antigo em repouso, e
# estouraria no primeiro rollout — que e quando um Deployment sobe o pod
# novo antes de derrubar o velho. Foi essa conta que derrubou o
# provisionamento do `plataforma` em 17/09, e o registro dela esta ali.
#
# `pods` vai a 10 pelo mesmo motivo: cinco Deployments, um surge cada.
requests.cpu: "1.5"
requests.memory: 2Gi
limits.cpu: "5"
limits.memory: 3.5Gi
pods: "10"
---
# =============================================================================
# A politica de rede.
+1 -1
View File
@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: runtime-core
image: docker.io/library/runtime-core:1.1-demo
image: docker.io/library/runtime-core:1.2-auditoria
# `Never`: a imagem tem de estar no containerd do no ANTES do deploy.
# "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome.
imagePullPolicy: Never
+1 -1
View File
@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: runtime-operacao
image: docker.io/library/runtime-operacao:1.1-demo
image: docker.io/library/runtime-operacao:1.2-auditoria
# `Never`: a imagem tem de estar no containerd do no ANTES do deploy.
# "Presente no no" tambem nao e "atual" — conferir a TAG, e nao o nome.
imagePullPolicy: Never
+89
View File
@@ -0,0 +1,89 @@
# =============================================================================
# O BFF do tenant.
#
# POR QUE ELE EXISTE AQUI, E NAO COMO BIBLIOTECA
#
# A SPA chama o BFF para quase tudo. Sem ele, `/bff` devolve 502 e o sistema
# abre vazio — foi o que aconteceu nos dois primeiros tenants provisionados, em
# 2026-09-24. As tres saidas estavam registradas desde 2026-09-18; o dono
# escolheu o quinto Deployment, que e o unico que entrega sem refatorar um
# componente que ja roda em producao em dois lugares.
#
# O PRECO ESTA NA COTA, e nao aqui: cinco Deployments precisam de mais que oito
# pods durante um rollout. Ver 00-namespace-quota-netpol.yaml.
#
# AS URLS APONTAM PARA OS RUNTIMES, e nao para os treze servicos: e esta a
# diferenca entre este molde e o `escolinha`. O mapa e o mesmo dos poms:
# core configuracao, cadastro, organizacao, documentos, agenda
# operacao planejamento, campeonato, administrativo, financeiro
# saude saude, nutricao, assistencia-social, pedagogico
# =============================================================================
apiVersion: apps/v1
kind: Deployment
metadata:
name: servico-bff
namespace: {{TENANT}}-prod
labels:
app: servico-bff
athleticmap.io/contexto: bff
spec:
replicas: 1
selector: { matchLabels: { app: servico-bff } }
template:
metadata:
labels:
app: servico-bff
athleticmap.io/contexto: bff
spec:
containers:
- name: servico-bff
image: docker.io/library/servico-bff:2.0-exportacao
imagePullPolicy: Never
ports: [{ containerPort: 8083 }]
env:
- { name: ATM_CONFIG_URL, value: "http://runtime-core" }
- { name: ATM_CADASTRO_URL, value: "http://runtime-core" }
- { name: ATM_ORGANIZACAO_URL, value: "http://runtime-core" }
- { name: ATM_DOCUMENTOS_URL, value: "http://runtime-core" }
- { name: ATM_AGENDA_URL, value: "http://runtime-core" }
- { name: ATM_PLANEJAMENTO_URL, value: "http://runtime-operacao" }
- { name: ATM_CAMPEONATO_URL, value: "http://runtime-operacao" }
- { name: ATM_ADMINISTRATIVO_URL, value: "http://runtime-operacao" }
- { name: ATM_FINANCEIRO_URL, value: "http://runtime-operacao" }
- { name: ATM_SAUDE_URL, value: "http://runtime-saude" }
- { name: ATM_NUTRICAO_URL, value: "http://runtime-saude" }
- { name: ATM_ASSISTENCIA_SOCIAL_URL, value: "http://runtime-saude" }
- { name: ATM_PEDAGOGICO_URL, value: "http://runtime-saude" }
- { name: ATM_JWK_SET_URI, value: "http://keycloak.plataforma-prod.svc:8080/realms/{{REALM}}/protocol/openid-connect/certs" }
- { name: ATM_ISSUER, value: "https://auth.athleticmap.com/realms/{{REALM}}" }
- { name: ATM_TENANT, value: "{{TENANT}}" }
- { name: ATM_PLANO, value: "{{PLANO}}" }
# `optional` porque o molde ainda NAO cria este Secret. Sem ele o
# selo de consentimento simplesmente nao e emitido — o BFF sobe e
# funciona (ver SeloDeConsentimento, que trata segredo vazio). No dia
# em que o Secret existir, isto passa a valer sozinho.
- name: ATM_CONSENTIMENTO_SEGREDO
valueFrom:
secretKeyRef: { name: consentimento-selo, key: segredo, optional: true }
resources:
requests: { cpu: 50m, memory: 256Mi }
limits: { cpu: 500m, memory: 512Mi }
readinessProbe:
httpGet: { path: /bff/health, port: 8083 }
initialDelaySeconds: 20
periodSeconds: 10
failureThreshold: 30
livenessProbe:
httpGet: { path: /actuator/health/liveness, port: 8083 }
initialDelaySeconds: 50
periodSeconds: 20
failureThreshold: 6
---
apiVersion: v1
kind: Service
metadata:
name: servico-bff
namespace: {{TENANT}}-prod
spec:
selector: { app: servico-bff }
ports: [{ port: 80, targetPort: 8083 }]
+1 -1
View File
@@ -34,7 +34,7 @@ spec:
spec:
containers:
- name: frontend-spa
image: docker.io/library/frontend-spa:2.65-csp
image: docker.io/library/frontend-spa:2.67-csp-script
imagePullPolicy: Never
ports: [{ containerPort: 80 }]
env: