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: