🔍 Análise de Integração - ecosif-automations com ecosif-structure
Data: 2025-12-09
Objetivo: Analisar se são necessárias modificações no ecosif-structure para executar ecosif-automations localmente ou em servidor dedicado com Docker.
📋 Resumo Executivo
✅ CONCLUSÃO: NENHUMA MODIFICAÇÃO É NECESSÁRIA no ecosif-structure
O ecosif-automations foi projetado para ser independente e pode funcionar de três formas:
1. Local (sem Docker) - conecta via localhost
2. Docker isolado - conecta via host.docker.internal ou rede externa
3. AWS Lambda - conecta via URLs públicas/privadas
🔌 Como ecosif-automations se Conecta
1. APIs (masterdata e moviments)
Código: src/aws_clients/api_client.py
# Construção da URL:
base_url = os.getenv('ECOSIF_API_BASE_URL', 'http://localhost')
port = os.getenv('ECOSIF_MASTERDATA_PORT', '8081')
context = os.getenv('ECOSIF_MASTERDATA_CONTEXT_PATH', '/ecosif-masterdata')
# URL final: http://localhost:8081/ecosif-masterdata
Variáveis de ambiente necessárias:
- ECOSIF_API_BASE_URL - Base URL (ex: http://localhost ou http://host.docker.internal)
- ECOSIF_MASTERDATA_PORT - Porta (padrão: 8081)
- ECOSIF_MASTERDATA_CONTEXT_PATH - Context path (padrão: /ecosif-masterdata)
- ECOSIF_MOVIMENTS_PORT - Porta (padrão: 8082)
- ECOSIF_MOVIMENTS_CONTEXT_PATH - Context path (padrão: /ecOSIF-moviments)
2. PostgreSQL
Código: src/database/pg_client.py
# Credenciais via variáveis de ambiente:
host = os.getenv('POSTGRES_HOST', 'localhost')
port = int(os.getenv('POSTGRES_PORT', 5432))
database = os.getenv('POSTGRES_DB', 'ecosif')
user = os.getenv('POSTGRES_USER', 'postgres')
password = os.getenv('POSTGRES_PASSWORD', '')
Variáveis de ambiente necessárias:
- POSTGRES_HOST - Host do PostgreSQL
- POSTGRES_PORT - Porta (padrão: 5432)
- POSTGRES_DB - Nome do banco
- POSTGRES_USER - Usuário
- POSTGRES_PASSWORD - Senha
🐳 Cenários de Execução
Cenário 1: Local (sem Docker)
Configuração:
ECOSIF_API_BASE_URL=http://localhost
ECOSIF_MASTERDATA_PORT=8081
ECOSIF_MOVIMENTS_PORT=8082
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
Requisitos:
- ✅ ecosif-structure rodando (APIs expostas em localhost:8081 e localhost:8082)
- ✅ PostgreSQL acessível em localhost:5432
- ✅ Nenhuma modificação necessária no ecosif-structure
Status: ✅ FUNCIONA SEM MODIFICAÇÕES
Cenário 2: Docker Isolado (ecosif-automations em Docker, ecosif-structure rodando)
Configuração:
# Opção A: Usar host.docker.internal (Windows/Mac)
ECOSIF_API_BASE_URL=http://host.docker.internal
ECOSIF_MASTERDATA_PORT=8081
ECOSIF_MOVIMENTS_PORT=8082
POSTGRES_HOST=host.docker.internal
POSTGRES_PORT=5432
# Opção B: Usar IP do host (Linux)
ECOSIF_API_BASE_URL=http://172.17.0.1 # IP padrão do Docker bridge
POSTGRES_HOST=172.17.0.1
Requisitos:
- ✅ ecosif-structure rodando no host
- ✅ PostgreSQL acessível do host
- ✅ Nenhuma modificação necessária no ecosif-structure
Status: ✅ FUNCIONA SEM MODIFICAÇÕES
Cenário 3: Docker Compartilhado (ambos em Docker, mesma rede)
Configuração:
# Usar rede externa do ecosif-structure
ECOSIF_API_BASE_URL=http://ecosif-masterdata # Nome do container
ECOSIF_MASTERDATA_PORT=8081
ECOSIF_MOVIMENTS_PORT=8082
POSTGRES_HOST=postgres # Nome do container do ecosif-structure
POSTGRES_PORT=5432
Requisitos:
- ✅ ecosif-automations usar rede externa ecosif-network (do ecosif-structure)
- ✅ Nenhuma modificação necessária no ecosif-structure
Status: ✅ FUNCIONA SEM MODIFICAÇÕES (apenas configurar rede externa)
Cenário 4: Servidor Dedicado (ambos em Docker, redes separadas)
Configuração:
# Usar IP do servidor ou domínio
ECOSIF_API_BASE_URL=http://192.168.1.100 # IP do servidor
# ou
ECOSIF_API_BASE_URL=http://api.ecosif.local # Domínio interno
POSTGRES_HOST=192.168.1.100
Requisitos:
- ✅ APIs do ecosif-structure acessíveis via rede
- ✅ PostgreSQL acessível via rede
- ✅ Nenhuma modificação necessária no ecosif-structure
Status: ✅ FUNCIONA SEM MODIFICAÇÕES
🔍 Análise Detalhada
Portas Utilizadas
| Serviço | ecosif-structure | ecosif-automations | Conflito? |
|---|---|---|---|
| PostgreSQL | 5432 | 5432 (configurável) | ⚠️ Se ambos criarem container |
| Masterdata | 8081 | - | ❌ Não |
| Moviments | 8082 | - | ❌ Não |
| Auth | 8080 | - | ❌ Não |
| Querys | 8083 | - | ❌ Não |
| Reports | 8084 | - | ❌ Não |
Observação: Se ecosif-automations criar seu próprio container PostgreSQL, haverá conflito de porta. Solução: Usar o PostgreSQL do ecosif-structure ou configurar porta diferente.
Redes Docker
| Rede | ecosif-structure | ecosif-automations | Compatibilidade |
|---|---|---|---|
| ecosif-network | ✅ Usa | ❌ Não usa | Pode usar como externa |
| ecosif-network-{ENV} | ❌ Não usa | ✅ Usa | Isolada por ambiente |
Observação: ecosif-automations pode usar a rede ecosif-network como external network sem modificações no ecosif-structure.
Variáveis de Ambiente
ecosif-structure usa:
- ECOSIF_MASTERDATA_PORT=8081
- ECOSIF_MOVIMENTS_PORT=8082
- ECOSIF_MASTERDATA_CONTEXT_PATH=/ecosif-masterdata
- ECOSIF_MOVIMENTS_CONTEXT_PATH=/ecosif-moviments
- POSTGRES_HOST=postgres (dentro do Docker)
- POSTGRES_PORT=5432
ecosif-automations espera:
- ECOSIF_API_BASE_URL - Base URL (configurável)
- ECOSIF_MASTERDATA_PORT - Porta (padrão: 8081) ✅ Compatível
- ECOSIF_MASTERDATA_CONTEXT_PATH - Context (padrão: /ecosif-masterdata) ✅ Compatível
- ECOSIF_MOVIMENTS_PORT - Porta (padrão: 8082) ✅ Compatível
- ECOSIF_MOVIMENTS_CONTEXT_PATH - Context (padrão: /ecosif-moviments) ✅ Compatível
- POSTGRES_HOST - Host (configurável)
- POSTGRES_PORT - Porta (padrão: 5432) ✅ Compatível
Status: ✅ 100% COMPATÍVEL - Mesmas portas e context paths
📊 Matriz de Compatibilidade
| Cenário | ecosif-structure | ecosif-automations | Modificação Necessária? |
|---|---|---|---|
| Local (sem Docker) | Rodando no host | Rodando no host | ❌ NENHUMA |
| Docker Isolado | Rodando no host | Docker container | ❌ NENHUMA |
| Docker Compartilhado | Docker network | Docker network (mesma rede) | ❌ NENHUMA |
| Servidor Dedicado | Docker em servidor | Docker em servidor | ❌ NENHUMA |
| AWS Lambda | Qualquer | AWS Lambda | ❌ NENHUMA |
🎯 Recomendações por Cenário
Para Desenvolvimento Local
Opção 1: Sem Docker (Recomendado)
# 1. Iniciar ecosif-structure
cd ecosif-structure
./scripts/start.sh --dev
# 2. Configurar ecosif-automations
cd ecosif-automations
make setup ENV=dev
# 3. Editar .envs/dev/.env
ECOSIF_API_BASE_URL=http://localhost
ECOSIF_MASTERDATA_PORT=8081
ECOSIF_MOVIMENTS_PORT=8082
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
# 4. Executar
make start ENV=dev
Opção 2: Com Docker (Isolado)
# 1. Iniciar ecosif-structure no host
cd ecosif-structure
./scripts/start.sh --dev
# 2. Configurar ecosif-automations
cd ecosif-automations
make setup ENV=dev
# 3. Editar .envs/dev/.env
ECOSIF_API_BASE_URL=http://host.docker.internal # ou IP do host
POSTGRES_HOST=host.docker.internal
# 4. Executar
make start-docker ENV=dev
Para Servidor Dedicado
Opção 1: Rede Externa (Recomendado)
# 1. Iniciar ecosif-structure
cd ecosif-structure
./scripts/start.sh
# 2. Configurar ecosif-automations para usar rede externa
# Editar docker-compose.yml do ecosif-automations:
networks:
ecosif-network:
external: true
name: ecosif-network
# 3. Configurar .env
ECOSIF_API_BASE_URL=http://ecosif-masterdata # Nome do container
POSTGRES_HOST=postgres # Nome do container
# 4. Executar
make start-docker ENV=prod
Opção 2: Rede Separada (IP/Domínio)
# 1. Iniciar ecosif-structure
cd ecosif-structure
./scripts/start.sh
# 2. Configurar ecosif-automations
ECOSIF_API_BASE_URL=http://192.168.1.100 # IP do servidor
POSTGRES_HOST=192.168.1.100
# 3. Executar
make start-docker ENV=prod
⚠️ Pontos de Atenção
1. Conflito de PostgreSQL
Problema: Se ecosif-automations criar seu próprio container PostgreSQL na porta 5432, haverá conflito.
Solução:
- ✅ Usar o PostgreSQL do ecosif-structure (recomendado)
- ✅ Ou configurar porta diferente no ecosif-automations
2. Rede Docker
Problema: Por padrão, ecosif-automations cria redes isoladas (ecosif-network-{ENV}).
Solução:
- ✅ Usar rede externa ecosif-network (sem modificar ecosif-structure)
- ✅ Ou usar host.docker.internal / IP do host
3. Variáveis de Ambiente
Problema: Cada ambiente precisa de configuração específica.
Solução:
- ✅ Usar arquivos .env por ambiente (já implementado)
- ✅ Script setup.sh já cria templates corretos
✅ Conclusão Final
Nenhuma Modificação Necessária no ecosif-structure
Razões: 1. ✅ APIs já expostas - masterdata e moviments já estão acessíveis 2. ✅ PostgreSQL compartilhado - pode ser usado por ambos 3. ✅ Portas compatíveis - mesmas portas e context paths 4. ✅ Rede Docker - pode usar rede externa sem modificações 5. ✅ Variáveis de ambiente - 100% compatíveis
O que Precisa ser Feito (apenas em ecosif-automations)
- ✅ Configurar variáveis de ambiente corretas (já implementado)
- ✅ Usar rede externa se quiser compartilhar Docker network (opcional)
- ✅ Usar mesmo PostgreSQL se quiser compartilhar banco (opcional)
Exemplo de Configuração Completa
docker-compose.yml do ecosif-automations (usando rede externa):
services:
postgres:
# Remover se usar o do ecosif-structure
# Ou manter se quiser banco isolado
# ... outros serviços
networks:
ecosif-network:
external: true
name: ecosif-network # Rede do ecosif-structure
Variáveis de ambiente:
ECOSIF_API_BASE_URL=http://ecosif-masterdata
ECOSIF_MASTERDATA_PORT=8081
ECOSIF_MOVIMENTS_PORT=8082
POSTGRES_HOST=postgres # Container do ecosif-structure
POSTGRES_PORT=5432
📚 Referências
ecosif-structure/docker-compose.yml- Configuração dos serviçosecosif-structure/env.template- Variáveis de ambienteecosif-automations/src/aws_clients/api_client.py- Cliente de APIsecosif-automations/src/database/pg_client.py- Cliente PostgreSQL
Última Atualização: 2025-12-09
Status: ✅ Análise Completa - Nenhuma Modificação Necessária