Catálogo de Aplicações¶
Introdução¶
Este catálogo documenta todas as aplicações gerenciadas pela equipe de DevOps. Cada aplicação possui um Helm chart correspondente no repositório ads-helm-charts, é empacotada como imagem Docker e deployada via ArgoCD nos clusters OKE.
Visão Geral¶
A plataforma é composta por 18 aplicações organizadas em três categorias:
- APIs Backend: Aplicações Java 21 / Spring Boot servindo na porta 7000–8080
- UIs Frontend: Aplicações Angular / Node 22 servidas via Nginx na porta 80
- Sistemas Especiais: Serviços legados e aplicações com características específicas
APIs Backend (Java)¶
| Aplicação | Descrição | Porta | Dockerfile | JVM Heap |
|---|---|---|---|---|
| auth-api | API de autenticação | 7000 | Dockerfile-java |
-Xmx1024m |
| is-ws-api | API WebService do IS | 7001 | Dockerfile-java |
-Xmx1024m |
| is-core-api | API principal do sistema IS | 7002 | Dockerfile-is-core-api |
-Xmx4096m |
| is-portal-api | API do Portal | 7004 | Dockerfile-java |
-Xmx1024m |
| is-notification-api | API de Notificações | 7006 | Dockerfile-java |
-Xmx1024m |
| is-regulation-api | API de Regulação | 7008 | Dockerfile-java |
-Xmx3072m |
| is-reports-api | API de Relatórios | 7010 | Dockerfile-java |
-Xmx1024m |
| redeis-ws-api | API WebService RedeIS | 8080 | Dockerfile-java |
-Xmx1024m |
Stack Backend¶
- Linguagem: Java 21 (Eclipse Temurin)
- Framework: Spring Boot 3.x
- Build: Maven 3.9.9
- Container runtime:
openjdk:21-slim - Timezone: America/Fortaleza
is-core-api usa multi-module Maven
O is-core-api usa Dockerfile-is-core-api, que compila dois módulos Maven separados (api/ e models/) antes de gerar o artefato final. Os demais usam Dockerfile-java (projeto Maven simples).
is-ws-api monta NFS
O is-ws-api monta um volume NFS em /data/midia para acesso a arquivos de mídia compartilhados.
UIs Frontend (Angular)¶
| Aplicação | Descrição | Porta | Dockerfile |
|---|---|---|---|
| is-core-ui | Interface principal do sistema IS | 80 | Dockerfile-node |
| is-portal-ui | Interface do Portal | 80 | Dockerfile-node |
| is-notification-ui | Interface de Notificações | 80 | Dockerfile-node |
| is-indicadores-ui | Interface de Indicadores | 80 | Dockerfile-node |
| is-regulation-ui | Interface de Regulação | 80 | Dockerfile-node |
Stack Frontend¶
- Framework: Angular 17+
- Runtime de build: Node 22
- Linguagem: TypeScript 5.3
- Servidor: Nginx Alpine
- Configuração runtime:
env.jsinjetado em runtime (variáveis de ambiente não são embutidas no build)
Sistemas Especiais¶
| Aplicação | Descrição | Porta | Dockerfile | Notas |
|---|---|---|---|---|
| is-reports-ui | Relatórios (JasperReports) | 9999 | Dockerfile-java |
Java, não Angular; -Xmx4096m |
| is4 | Sistema IS legado v4 | 8080 | Dockerfile-java |
-Xmx4096m -XX:NewSize=4096m; NFS mount |
| is5 | Sistema IS legado v5 | 8080 | Dockerfile-java |
-Xmx4096m |
| redeis-auth-api | Autenticação RedeIS | 8080 | Dockerfile-java |
Config via system/redeis-auth-api/config |
| extent | Proxy TISS / Portal | 8080 | Java (Tomcat) | PVC 50Gi em /usr/local/tomcat/webapps/tiss |
is-reports-ui é Java, não Angular
Apesar do sufixo -ui, o is-reports-ui é uma aplicação Java baseada em JasperReports que serve relatórios na porta 9999. Não usa Nginx nem Angular.
extent usa volume persistente
O extent monta um PersistentVolumeClaim de 50 Gi para armazenar os artefatos do portal TISS dentro do Tomcat. O PVC deve existir antes do deploy.
Padrões de Dockerfile¶
Os templates estão no repositório ads-automations em templates/.
Dockerfile-java — APIs Java padrão¶
Usado por: auth-api, is-ws-api, is-portal-api, is-notification-api, is-regulation-api, is-reports-api, redeis-ws-api, is-reports-ui, is4, is5, redeis-auth-api.
Pipeline de 3 estágios:
```dockerfile
Estágio 1: Cache de dependências Maven¶
FROM maven:3.9.9-eclipse-temurin-21 AS dependencies WORKDIR /app COPY pom.xml ./ COPY src/main/resources/ ./src/main/resources/ RUN mvn dependency:resolve dependency:resolve-plugins
Estágio 2: Compilação¶
FROM dependencies AS build COPY . ./ RUN mvn clean package -DskipTests RUN bash -c 'ls target/*.jar | grep -v original -m 1 | xargs -I {} mv {} target/app.jar'
Estágio 3: Runtime¶
FROM openjdk:21-slim ENV JAVA_OPTS="-Xss256m -Xmx1024m" ENV TZ=America/Fortaleza WORKDIR /usr/src/app RUN apt-get update && apt-get install -y procps tcptraceroute curl iputils-ping \ && rm -rf /var/lib/apt/lists/* \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && mkdir -p /usr/src/app/logs COPY --from=build /app/target/app.jar ./ EXPOSE 6001 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -server -jar app.jar --spring.datasource.hikari.poolName=${POOL_NAME}"] ```
EXPOSE 6001 é o padrão do template. A porta de serviço real (7000, 7001, 7002…) é configurada no
values.yamldo Helm chart e via variável de ambienteserver.portno Spring Boot.
O JAVA_OPTS per-app é sobrescrito via variável de ambiente no Helm chart (ex: -Xmx4096m para serviços com maior demanda de memória).
Dockerfile-is-core-api — is-core-api (multi-module Maven)¶
Usado exclusivamente pelo is-core-api, que tem estrutura multi-módulo:
```dockerfile
Estágio 1: Cache de dependências (multi-module)¶
FROM maven:3.9.9-eclipse-temurin-21 AS dependencies WORKDIR /app COPY pom.xml ./ COPY api/pom.xml ./api/pom.xml COPY models/pom.xml ./models/pom.xml RUN mvn dependency:go-offline
Estágio 2: Compilação dos módulos api/ e models/¶
FROM dependencies AS build WORKDIR /app COPY api/src ./api/src COPY models/src ./models/src COPY .mvn .mvn COPY mvnw . RUN mvn clean install -DskipTests RUN bash -c 'ls api/target/*.jar | grep -v original -m 1 | xargs -I {} mv {} api/target/app.jar'
Estágio 3: Runtime¶
FROM openjdk:21-slim ENV JAVA_OPTS="-Xss256m -Xmx4096m" ENV TZ=America/Fortaleza WORKDIR /usr/src/app RUN apt-get update && apt-get install -y procps tcptraceroute curl iputils-ping \ && rm -rf /var/lib/apt/lists/* \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && mkdir -p /usr/src/app/logs /usr/src/midia-painel-tv /usr/src/app/files COPY --from=build /app/api/target/app.jar ./ EXPOSE 6003 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -server -jar app.jar --spring.datasource.hikari.poolName=${POOL_NAME}"] ```
O is-core-api também monta volumes NFS em /data/files e /data/midia para armazenamento de documentos e arquivos de mídia.
Dockerfile-node — UIs Angular¶
Usado por todas as UIs Angular: is-core-ui, is-portal-ui, is-notification-ui, is-indicadores-ui, is-regulation-ui.
Pipeline de 3 estágios:
```dockerfile
Estágio 1: Dependências Node.js¶
FROM node:22 AS dependencies WORKDIR /app COPY package.json ./ RUN npm install --legacy-peer-deps
Estágio 2: Build Angular (produção)¶
FROM dependencies AS build WORKDIR /app COPY angular.json tsconfig.json tsconfig.app.json tsconfig.spec.json ./ COPY src ./src RUN npm run build --prod
Estágio 3: Runtime¶
FROM nginx:alpine WORKDIR /usr/share/nginx/html RUN rm -rf ./* COPY --from=build /app/IS/ . EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ```
Node 22: O template base usa
node:18, mas todas as aplicações Angular da plataforma usamnode:22em seusDockerfilede repositório.
Configuração runtime via env.js
As UIs Angular não embutem variáveis de ambiente no build. Um arquivo env.js com as URLs de API e configurações de ambiente é injetado em runtime via initContainer ou configMap no Kubernetes, permitindo usar a mesma imagem Docker em HML e NOX.
Registry¶
As imagens Docker são armazenadas no OCI Container Registry (OCIR) na região de São Paulo:
- Namespace:
gr9qdgmg7kig - URL base:
gru.ocir.io/gr9qdgmg7kig/{app-name}
Os Helm charts são publicados no GitHub Container Registry (GHCR):
- Registry:
ghcr.io/ads-saude/{chart-name}
Fluxo de Deploy¶
flowchart LR
DEV[Desenvolvedor] -->|PR| GH[GitHub]
GH -->|CI Pipeline| BUILD[Build & Test]
BUILD -->|Push image| OCIR[OCIR Registry]
BUILD -->|Update| TC[ads-tenants-config]
TC -->|Detecta mudança| ARGO[ArgoCD]
ARGO -->|Sync| OKE[Cluster OKE]
Para detalhes sobre cada etapa do deploy, consulte:
- Aplicações Backend — detalhes de Dockerfile, portas, secrets e diferenças por API
- Aplicações Frontend — diferenças entre Angular, Nginx, env.js e o caso especial do is-reports-ui
- Sistemas Especiais — detalhes operacionais de is4, is5 e extent
- Pipelines de Aplicação — workflow completo de CI/CD
- ArgoCD e GitOps — como o ArgoCD aplica os deploys