- Use Google Distroless images for all services (Go & Node.js). - Standardize documentation with [PROJECT-NAME].md. - Add .dockerignore and .gitignore to all projects. - Remove docker-compose.yml in favor of docker run instructions. - Fix Go version and dependency issues in observability, repo-integrations, and security-governance. - Add Podman support (fully qualified image names). - Update Dashboard to use Node.js static server for Distroless compatibility.
3.3 KiB
3.3 KiB
AUTOMATION-JOBS-CORE
Este serviço é responsável pela execução de automações, workflows de longa duração e jobs agendados, utilizando o poder do Temporal para garantir confiabilidade e idempotência.
📋 Visão Geral
O projeto é dividido em três componentes principais que trabalham em conjunto para processar tarefas assíncronas:
- API (HTTP): Ponto de entrada leve para iniciar workflows.
- Temporal Server: O "cérebro" que orquestra o estado e o agendamento das tarefas.
- Workers (Go): Onde o código da lógica de negócio (workflows e activities) realmente é executado.
Arquitetura
O diagrama abaixo ilustra como os componentes interagem:
graph TD
Client[Cliente Externo/Frontend] -->|HTTP POST /jobs/run| API[API Service :8080]
API -->|gRPC StartWorkflow| Temporal[Temporal Service :7233]
subgraph Temporal Cluster
Temporal
DB[(PostgreSQL)]
Temporal --> DB
end
Worker[Go Worker] -->|Poll TaskQueue| Temporal
Worker -->|Execute Activity| Worker
Worker -->|Return Result| Temporal
🚀 Estrutura do Projeto
Abaixo está o detalhamento de cada diretório e arquivo importante:
| Caminho | Descrição |
|---|---|
cmd/api/ |
Ponto de entrada (main.go) para o serviço da API. |
cmd/worker/ |
Ponto de entrada (main.go) para o serviço do Worker. |
internal/ |
Código compartilhado e lógica interna do aplicativo. |
temporal/ |
Definições de Workflows e Activities do Temporal. |
Dockerfile.api |
Configuração de build otimizada para a API (Distroless). |
Dockerfile.worker |
Configuração de build otimizada para o Worker (Distroless). |
docker-compose.yml |
Orquestração local de todos os serviços. |
🛠️ Tecnologias e Otimizações
- Linguagem: Go 1.23+
- Orquestração: Temporal.io
- Containerização:
- Images baseadas em
gcr.io/distroless/static. - Multi-stage builds para reduzir o tamanho final da imagem (~20MB).
- Execução como usuário
nonrootpara segurança aprimorada.
- Images baseadas em
💻 Como Executar
O projeto é projetado para ser executado via Docker Compose para um ambiente de desenvolvimento completo.
Pré-requisitos
- Docker Engine
- Docker Compose
Passo a Passo
-
Inicie o ambiente:
docker-compose up --buildIsso irá subir:
- Temporal Server & Web UI (Porta
8088) - PostgreSQL (Persistência do Temporal)
- API Service (Porta
8080) - Worker Service
- Temporal Server & Web UI (Porta
-
Dispare um Workflow de Teste:
curl -X POST http://localhost:8080/jobs/run -
Monitore a Execução: Acesse a interface do Temporal para ver o progresso em tempo real: http://localhost:8088
🔧 Detalhes dos Dockerfiles
Os Dockerfiles foram refatorados para máxima eficiência:
- Builder Stage: Usa
golang:1.23-alpinepara compilar o binário estático, removendo informações de debug (-ldflags="-w -s"). - Runtime Stage: Usa
gcr.io/distroless/static:nonroot, que contém apenas o mínimo necessário para rodar binários Go, sem shell ou gerenciador de pacotes, garantindo:- ✅ Segurança: Menor superfície de ataque.
- ✅ Tamanho: Imagens extremamente leves.
- ✅ Performance: Bootrápido.