Skip to content

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.js injetado 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.yaml do Helm chart e via variável de ambiente server.port no 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 usam node:22 em seus Dockerfile de 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: