Docker - ecosif-masterdata

Este documento explica como usar Docker para executar o ecosif-masterdata.

Pré-requisitos

Dockerfile

O projeto inclui um Dockerfile multi-stage que:

  1. Stage 1 (Build): Compila a aplicação usando Maven
  2. Stage 2 (Runtime): Cria imagem final otimizada com apenas o JAR

Características do Dockerfile

Build da Imagem

Build Local

docker build -t ecosif-masterdata:latest .

Build com Tag Específica

docker build -t ecosif-masterdata:0.7.01.202511281 .

Docker Compose

docker-compose.yml

O arquivo docker-compose.yml está na raiz do projeto e inclui:

Arquivo .env

Crie um arquivo .env na mesma pasta do docker-compose.yml:

# Database
POSTGRES_DB=ecosif
POSTGRES_USER=postgres
POSTGRES_PASSWORD=sua_senha_segura
POSTGRES_PORT=5432

# Server
ECOSIF_MASTERDATA_PORT=8081

# JWT (OBRIGATÓRIO - deve ser a mesma do ecosif-auth)
AUTH_TOKEN_SECRET=$(openssl rand -base64 64)

# Token Expiration (30 minutos)
TOKEN_EXPIRATION=1800000

# OAuth2 (Opcional)
AUTH2_CLIENT_ID=
AUTH2_SECRET=

# CORS
ECOSIF_CORS=http://localhost:4200

# Flyway
ECOSIF_FLYWAY_ENABLED=false

# Hibernate
HIBERNATE_DDL_AUTO=none

# Logging
LOG_FORMAT=default
ECOSIF_LOGSHOW=false
ECOSIF_LOGMODE_ROOT=INFO
ECOSIF_LOGMODE_SPRING=INFO
ECOSIF_LOGMODE_HIBERNATE_SQL=INFO

# AWS S3 (Opcional)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_S3_BUCKET=

# Timezone
TZ=America/Sao_Paulo

Executando com Docker Compose

Iniciar Serviços

docker-compose up -d

Ver Logs

# Todos os serviços
docker-compose logs -f

# Apenas ecosif-masterdata
docker-compose logs -f ecosif-masterdata

# Apenas postgres
docker-compose logs -f postgres

Parar Serviços

docker-compose stop

Parar e Remover Contêineres

docker-compose down

Parar e Remover Tudo (incluindo volumes)

docker-compose down -v

⚠️ ATENÇÃO: Isso remove todos os dados do PostgreSQL!

Rebuild da Imagem

docker-compose build --no-cache
docker-compose up -d

Executando Container Individualmente

Executar Container

docker run -d \
  --name ecosif-masterdata \
  -p 8081:8081 \
  -e POSTGRES_HOST=host.docker.internal \
  -e POSTGRES_PORT=5432 \
  -e POSTGRES_DB=ecosif \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=senha \
  -e AUTH_TOKEN_SECRET=sua_chave_secreta_muito_longa \
  ecosif-masterdata:latest

Health Check

O container inclui health check configurado:

# Verificar status
docker ps

# Health check manual
docker exec ecosif-masterdata curl -f http://localhost:8081/actuator/health

Troubleshooting

Container não inicia

  1. Verifique os logs: bash docker logs ecosif-masterdata

  2. Verifique variáveis de ambiente: bash docker exec ecosif-masterdata env | grep POSTGRES

  3. Verifique conectividade com banco: bash docker exec ecosif-masterdata ping postgres

Erro de conexão com banco

  1. Verifique se o PostgreSQL está rodando: bash docker ps | grep postgres

  2. Verifique se as credenciais estão corretas

  3. Verifique se a rede está configurada corretamente: bash docker network inspect ecosif-network

Container reinicia constantemente

  1. Verifique os logs: bash docker logs --tail 100 ecosif-masterdata

  2. Verifique recursos (memória, CPU): bash docker stats ecosif-masterdata

  3. Verifique health check: bash docker inspect ecosif-masterdata | grep Health -A 10

Volumes Persistentes

Dados do PostgreSQL

Os dados do PostgreSQL são persistidos em volume:

# Listar volumes
docker volume ls

# Inspecionar volume
docker volume inspect <nome-do-volume>

Backup do Banco

# Criar backup
docker exec ecosif-postgres pg_dump -U postgres ecosif > backup.sql

# Restaurar backup
docker exec -i ecosif-postgres psql -U postgres ecosif < backup.sql

Otimizações

Reduzir Tamanho da Imagem

O Dockerfile já está otimizado com multi-stage build. Para reduzir ainda mais:

  1. Use .dockerignore para excluir arquivos desnecessários
  2. Use Alpine Linux (já está usando)
  3. Limpe cache do Maven após build

Performance

  1. Ajuste recursos do container: yaml deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '1' memory: 1G

  2. Configure JVM para containers: bash JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"

Produção

Recomendações para Produção

  1. Use secrets: Não coloque senhas em variáveis de ambiente simples
  2. HTTPS: Configure reverse proxy (nginx, traefik) com HTTPS
  3. Monitoramento: Configure health checks e métricas
  4. Backups: Configure backups automáticos do banco
  5. Logs: Configure log aggregation (ELK, CloudWatch, etc.)
  6. Resources: Defina limites de recursos
  7. Rede: Use rede isolada
  8. Tags: Use tags específicas (não latest)

Exemplo com Secrets

services:
  ecosif-masterdata:
    secrets:
      - db_password
      - jwt_secret

secrets:
  db_password:
    external: true
  jwt_secret:
    external: true

Integração com Outros Serviços

O ecosif-masterdata pode ser executado junto com outros serviços ecosif usando o docker-compose do diretório configure/:

cd configure/
docker-compose up -d

Isso iniciará todos os serviços do ecossistema ecosif.

Recursos