# 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 # --- DASHBOARD --- dashboard: image: nginx:alpine container_name: dashboard restart: unless-stopped volumes: - ./dashboard:/usr/share/nginx/html:ro # --- APPS --- 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}" 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: {}