234 lines
7.8 KiB
YAML
234 lines
7.8 KiB
YAML
# ─── Arcádia Suite — Desenvolvimento Local ────────────────────────────────────
|
|
# Uso: docker compose up
|
|
# Para subir com IA local: docker compose --profile ai up
|
|
|
|
name: arcadia-dev
|
|
|
|
services:
|
|
|
|
# ── Banco de dados com pgvector ─────────────────────────────────────────────
|
|
db:
|
|
image: pgvector/pgvector:pg16
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: arcadia
|
|
POSTGRES_USER: arcadia
|
|
POSTGRES_PASSWORD: arcadia123
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
- ./docker/init-pgvector.sql:/docker-entrypoint-initdb.d/01-pgvector.sql
|
|
ports:
|
|
- "5432:5432"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U arcadia -d arcadia"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ── Redis (filas de jobs) ────────────────────────────────────────────────────
|
|
redis:
|
|
image: redis:7-alpine
|
|
restart: unless-stopped
|
|
ports:
|
|
- "6379:6379"
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ── App principal (Node.js + React) ─────────────────────────────────────────
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
target: builder # usa stage builder em dev (hot reload via volume)
|
|
restart: unless-stopped
|
|
command: npx tsx server/index.ts
|
|
environment:
|
|
NODE_ENV: development
|
|
PORT: 5000
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
REDIS_URL: redis://redis:6379
|
|
DOCKER_MODE: "true" # desativa spawn de processos filhos
|
|
CONTABIL_PYTHON_URL: http://contabil:8003
|
|
BI_PYTHON_URL: http://bi:8004
|
|
AUTOMATION_PYTHON_URL: http://automation:8005
|
|
FISCO_PYTHON_URL: http://fisco:8002
|
|
PYTHON_SERVICE_URL: http://embeddings:8001
|
|
SESSION_SECRET: ${SESSION_SECRET:-arcadia-dev-secret-change-in-prod}
|
|
SSO_SECRET: ${SSO_SECRET:-arcadia-sso-secret-2024-plus-integration-key-secure}
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
|
LITELLM_BASE_URL: http://litellm:4000
|
|
LITELLM_API_KEY: ${LITELLM_API_KEY:-arcadia-internal}
|
|
ports:
|
|
- "5000:5000"
|
|
volumes:
|
|
- .:/app
|
|
- /app/node_modules
|
|
- /app/dist
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
contabil:
|
|
condition: service_started
|
|
bi:
|
|
condition: service_started
|
|
|
|
# ── Microserviço Contábil (Python) ──────────────────────────────────────────
|
|
contabil:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.python
|
|
restart: unless-stopped
|
|
environment:
|
|
SERVICE_NAME: contabil
|
|
SERVICE_PORT: 8003
|
|
CONTABIL_PORT: 8003
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
ports:
|
|
- "8003:8003"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
# ── Microserviço BI Engine (Python) ─────────────────────────────────────────
|
|
bi:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.python
|
|
restart: unless-stopped
|
|
environment:
|
|
SERVICE_NAME: bi
|
|
SERVICE_PORT: 8004
|
|
BI_PORT: 8004
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
ports:
|
|
- "8004:8004"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
# ── Microserviço Automações (Python) ────────────────────────────────────────
|
|
automation:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.python
|
|
restart: unless-stopped
|
|
environment:
|
|
SERVICE_NAME: automation
|
|
SERVICE_PORT: 8005
|
|
AUTOMATION_PORT: 8005
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
ports:
|
|
- "8005:8005"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
# ── Microserviço Fiscal (Python) ────────────────────────────────────────────
|
|
fisco:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.python
|
|
restart: unless-stopped
|
|
environment:
|
|
SERVICE_NAME: fisco
|
|
SERVICE_PORT: 8002
|
|
FISCO_PORT: 8002
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
ports:
|
|
- "8002:8002"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
# ── Serviço de Embeddings (pgvector via Python) ──────────────────────────────
|
|
embeddings:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.python
|
|
restart: unless-stopped
|
|
environment:
|
|
SERVICE_NAME: embeddings
|
|
SERVICE_PORT: 8001
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
ports:
|
|
- "8001:8001"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
|
|
# ── Apache Superset (BI avançado) ────────────────────────────────────────────
|
|
superset:
|
|
image: apache/superset:4.1.0
|
|
restart: unless-stopped
|
|
environment:
|
|
SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY:-superset-secret-change-in-prod}
|
|
DATABASE_URL: postgresql://arcadia:arcadia123@db:5432/arcadia_superset
|
|
ports:
|
|
- "8088:8088"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
profiles: [bi]
|
|
|
|
# ─────────────── PERFIL: ai (Soberania de IA) ────────────────────────────────
|
|
|
|
# ── Ollama (LLMs locais) ─────────────────────────────────────────────────────
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ollama_models:/root/.ollama
|
|
ports:
|
|
- "11434:11434"
|
|
profiles: [ai]
|
|
# Para GPU NVIDIA: adicione `deploy.resources.reservations.devices`
|
|
# deploy:
|
|
# resources:
|
|
# reservations:
|
|
# devices:
|
|
# - driver: nvidia
|
|
# count: 1
|
|
# capabilities: [gpu]
|
|
|
|
# ── Open WebUI (interface para devs/consultores) ─────────────────────────────
|
|
open-webui:
|
|
image: ghcr.io/open-webui/open-webui:main
|
|
restart: unless-stopped
|
|
environment:
|
|
OLLAMA_BASE_URL: http://ollama:11434
|
|
WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY:-webui-secret-change-in-prod}
|
|
DEFAULT_MODELS: llama3.3,qwen2.5-coder
|
|
ENABLE_RAG_WEB_SEARCH: "true"
|
|
ports:
|
|
- "3001:8080"
|
|
volumes:
|
|
- open_webui_data:/app/backend/data
|
|
depends_on:
|
|
- ollama
|
|
profiles: [ai]
|
|
|
|
# ── LiteLLM (proxy unificado de LLMs) ───────────────────────────────────────
|
|
litellm:
|
|
image: ghcr.io/berriai/litellm:main-latest
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./docker/litellm-config.yaml:/app/config.yaml
|
|
command: ["--config", "/app/config.yaml", "--port", "4000", "--detailed_debug"]
|
|
environment:
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
|
OLLAMA_BASE_URL: http://ollama:11434
|
|
LITELLM_MASTER_KEY: ${LITELLM_API_KEY:-arcadia-internal}
|
|
ports:
|
|
- "4000:4000"
|
|
profiles: [ai]
|
|
|
|
volumes:
|
|
pgdata:
|
|
ollama_models:
|
|
open_webui_data:
|