# WICHTIGER HINWEIS: Diese Version konzentriert sich auf den stabilen Core-Stack. # Alle nicht essenziellen Dienste sind auskommentiert, um Build-Fehler zu vermeiden. version: '3.8' services: # --- GATEKEEPER (NGINX) --- nginx: image: nginx:alpine container_name: gateway_proxy restart: unless-stopped ports: - "8090:80" volumes: - ./nginx-proxy-clean.conf:/etc/nginx/nginx.conf:ro - ./.htpasswd:/etc/nginx/.htpasswd:ro depends_on: dashboard: condition: service_started company-explorer: condition: service_healthy connector-superoffice: condition: service_healthy lead-engine: condition: service_started gtm-architect: condition: service_started b2b-marketing-assistant: condition: service_started transcription-tool: condition: service_started heatmap-frontend: condition: service_started competitor-analysis: condition: service_started content-engine: condition: service_started market-intelligence: condition: service_started # --- DASHBOARD --- dashboard: image: nginx:alpine container_name: dashboard restart: unless-stopped volumes: - ./dashboard:/usr/share/nginx/html:ro # --- APPS --- market-intelligence: build: context: . dockerfile: general-market-intelligence/Dockerfile.fullstack container_name: market-intelligence restart: unless-stopped ports: - "8098:3001" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" SERP_API_KEY: "${SERP_API}" PYTHONUNBUFFERED: "1" volumes: - market_intel_data:/data - ./Log_from_docker:/app/Log content-engine: build: context: . dockerfile: content-engine/Dockerfile container_name: content-engine restart: unless-stopped ports: - "8093:3000" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" PYTHONUNBUFFERED: "1" GTM_DB_PATH: "/gtm_data/gtm_projects.db" CONTENT_DB_PATH: "/data/content_engine.db" volumes: - content_engine_data:/data - gtm_architect_data:/gtm_data:ro - ./Log_from_docker:/app/logs_debug healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3006"] interval: 10s timeout: 5s retries: 5 start_period: 30s competitor-analysis: build: context: ./competitor-analysis-app dockerfile: Dockerfile container_name: competitor-analysis restart: unless-stopped ports: - "8097:3000" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" PYTHONUNBUFFERED: "1" volumes: - competitor_analysis_data:/data - ./Log_from_docker:/app/logs_debug transcription-tool: build: context: ./transcription-tool dockerfile: Dockerfile container_name: transcription-tool restart: unless-stopped ports: - "8001:8001" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" UPLOAD_DIR: "/app/uploads" volumes: - transcription_uploads:/app/uploads - ./Log_from_docker:/app/logs_debug heatmap-backend: build: context: ./heatmap-tool/backend container_name: heatmap-backend restart: unless-stopped ports: - "8002:8000" environment: ORS_API_KEY: "${ORS_API_KEY}" PYTHONUNBUFFERED: "1" heatmap-frontend: build: context: ./heatmap-tool/frontend dockerfile: Dockerfile container_name: heatmap-frontend restart: unless-stopped ports: - "8096:80" depends_on: - heatmap-backend b2b-marketing-assistant: build: context: . dockerfile: b2b-marketing-assistant/Dockerfile container_name: b2b-marketing-assistant restart: unless-stopped ports: - "8092:3002" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" PYTHONUNBUFFERED: "1" volumes: - b2b_marketing_data:/data - ./Log_from_docker:/app/logs_debug gtm-architect: build: context: . dockerfile: gtm-architect/Dockerfile container_name: gtm-architect restart: unless-stopped ports: - "8094:80" environment: GEMINI_API_KEY: "${GEMINI_API_KEY}" VITE_API_BASE_URL: "/gtm/api" GTM_DB_PATH: "/data/gtm_projects.db" volumes: - ./Log_from_docker:/app/logs_debug - gtm_architect_data:/data company-explorer: build: context: ./company-explorer dockerfile: Dockerfile container_name: company-explorer restart: unless-stopped ports: - "8000:8000" environment: API_USER: "admin" API_PASSWORD: "gemini" PYTHONUNBUFFERED: "1" DATABASE_URL: "sqlite:////data/companies_v3_fixed_2.db" GEMINI_API_KEY: "${GEMINI_API_KEY}" SERP_API_KEY: "${SERP_API}" NOTION_TOKEN: "${NOTION_API_KEY}" volumes: - ./company-explorer:/app - explorer_db_data:/data - ./Log_from_docker:/app/logs_debug healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/docs"] interval: 10s timeout: 5s retries: 5 start_period: 30s connector-superoffice: build: context: ./connector-superoffice dockerfile: Dockerfile container_name: connector-superoffice restart: unless-stopped ports: - "8003:8000" volumes: - ./connector-superoffice:/app - connector_db_data:/data environment: PYTHONUNBUFFERED: "1" GEMINI_API_KEY: "${GEMINI_API_KEY}" SO_CLIENT_ID: "${SO_CLIENT_ID}" SO_CLIENT_SECRET: "${SO_CLIENT_SECRET}" SO_REFRESH_TOKEN: "${SO_REFRESH_TOKEN}" SO_ENVIRONMENT: "${SO_ENVIRONMENT}" SO_CONTEXT_IDENTIFIER: "${SO_CONTEXT_IDENTIFIER}" WEBHOOK_TOKEN: "${WEBHOOK_TOKEN}" WEBHOOK_SECRET: "${WEBHOOK_SECRET}" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 10s timeout: 5s retries: 5 start_period: 30s lead-engine: build: context: ./lead-engine dockerfile: Dockerfile container_name: lead-engine restart: unless-stopped ports: - "8501:8501" # UI (Streamlit) - "8004:8004" # API / Monitor - "8099:8004" # Direct Test Port environment: PYTHONUNBUFFERED: "1" GEMINI_API_KEY: "${GEMINI_API_KEY}" SERP_API: "${SERP_API}" INFO_Application_ID: "${INFO_Application_ID}" INFO_Tenant_ID: "${INFO_Tenant_ID}" INFO_Secret: "${INFO_Secret}" CAL_APPID: "${CAL_APPID}" CAL_SECRET: "${CAL_SECRET}" CAL_TENNANT_ID: "${CAL_TENNANT_ID}" TEAMS_WEBHOOK_URL: "${TEAMS_WEBHOOK_URL}" FEEDBACK_SERVER_BASE_URL: "${FEEDBACK_SERVER_BASE_URL}" WORDPRESS_BOOKING_URL: "${WORDPRESS_BOOKING_URL}" MS_BOOKINGS_URL: "${MS_BOOKINGS_URL}" volumes: - ./lead-engine:/app - lead_engine_data:/app/data # --- INFRASTRUCTURE SERVICES --- duckdns: image: lscr.io/linuxserver/duckdns:latest container_name: duckdns environment: PUID: "1000" PGID: "1000" TZ: "Europe/Berlin" SUBDOMAINS: "${DUCKDNS_SUBDOMAINS}" TOKEN: "${DUCKDNS_TOKEN}" restart: unless-stopped dns-monitor: image: alpine container_name: dns-monitor dns: - 8.8.8.8 - 1.1.1.1 environment: SUBDOMAINS: "${DUCKDNS_SUBDOMAINS}" TZ: "Europe/Berlin" volumes: - ./dns-monitor:/app command: "/app/monitor.sh" restart: unless-stopped volumes: connector_db_data: {} explorer_db_data: {} lead_engine_data: {} gtm_architect_data: {} b2b_marketing_data: {} transcription_uploads: {} content_engine_data: {} competitor_analysis_data: {} market_intel_data: {}