Files
boc/projects/landvex/docker-compose.prod.yml
T
Bernt f4f853d94b landvex: Datafabrik + Vision + Infrastruktur för 50GB skalning
Datafabrik:
- Skördare: crawler, källvitlista, upphandlingsskördare
- Extraktor: LLM-baserad schemastyrd extraktion
- Upplösare: Entitetsupplösning och deduplicering
- Köer: Schemalagd / kunddriven / fält
- Agentorkestrering: 20+ parallella agenter

Vision:
- Identify-modell: ResNet50 + kontrastivt lärande
- Träningspipeline: NT-Xent loss
- Vektordatabas: FAISS för snabb sökning
- OCR-pipeline: Typskyltsläsning

Infrastruktur:
- Docker Compose production
- Terraform för AWS ECS
- Prometheus + Grafana monitorering
- Neo4j + FAISS + MinIO + Redis
2026-07-05 06:25:51 +00:00

149 lines
4.0 KiB
YAML

version: "3.9"
services:
# ─── API ───────────────────────────────────────────────
api:
build: ./api
ports:
- "8081:8080"
volumes:
- ./10-data:/app/data:ro
- ./vision/modeller:/models:ro
environment:
- DATA_DIR=/app/data
- NEO4J_URI=bolt://neo4j:7687
- NEO4J_USER=neo4j
- NEO4J_PASSWORD=${NEO4J_PASSWORD}
- VISION_MODEL_PATH=/models/landvex-vision-model.pt
depends_on:
- neo4j
- vectordb
restart: unless-stopped
deploy:
resources:
limits:
memory: 2G
# ─── Neo4j (Property Graph) ────────────────────────────
neo4j:
image: neo4j:5.19-enterprise
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/${NEO4J_PASSWORD}
- NEO4J_PLUGINS=["apoc"]
- NEO4J_dbms_memory_heap_max__size=8G
- NEO4J_dbms_memory_pagecache_size=4G
volumes:
- neo4j_data:/data
- neo4j_logs:/logs
restart: unless-stopped
deploy:
resources:
limits:
memory: 12G
# ─── Vektordatabas (FAISS) ─────────────────────────────
vectordb:
build: ./vision/embeddings
ports:
- "8082:8080"
volumes:
- vectordb_data:/data
environment:
- FAISS_INDEX_DIR=/data
restart: unless-stopped
# ─── Datafabrik (Skördning + Extraktion) ───────────────
datafabrik:
build: ./datafabrik
volumes:
- datafabrik_output:/data/output
- datafabrik_koer:/data/koer
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- DATAFABRIK_KO_DIR=/data/koer
- DATAFABRIK_OUTPUT=/data/output
restart: unless-stopped
deploy:
resources:
limits:
memory: 4G
# ─── Vision-träning (GPU) ──────────────────────────────
vision-trainer:
build: ./vision
volumes:
- vision_models:/models
- vision_dataset:/data/dataset
environment:
- CUDA_VISIBLE_DEVICES=0
- VISION_MODEL_DIR=/models
- VISION_DATASET_DIR=/data/dataset
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
profiles: ["training"]
# ─── MinIO (Objektlagring för bilder/dokument) ─────────
minio:
image: minio/minio:latest
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ROOT_USER=${MINIO_USER:-landvex}
- MINIO_ROOT_PASSWORD=${MINIO_PASSWORD:-landvex2024}
volumes:
- minio_data:/data
command: server /data --console-address ":9001"
restart: unless-stopped
# ─── Redis (Köer och cache) ────────────────────────────
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
# ─── Prometheus (Metriker) ─────────────────────────────
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./infrastruktur/monitorering/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
restart: unless-stopped
# ─── Grafana (Dashboards) ──────────────────────────────
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-landvex}
volumes:
- grafana_data:/var/lib/grafana
restart: unless-stopped
volumes:
neo4j_data:
neo4j_logs:
vectordb_data:
datafabrik_output:
datafabrik_koer:
vision_models:
vision_dataset:
minio_data:
redis_data:
prometheus_data:
grafana_data: