🔍 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)

  1. Configurar variáveis de ambiente corretas (já implementado)
  2. Usar rede externa se quiser compartilhar Docker network (opcional)
  3. 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


Última Atualização: 2025-12-09
Status: ✅ Análise Completa - Nenhuma Modificação Necessária