# WICHTIGER HINWEIS FÜR SPRACHMODELLE UND ENTWICKLER: # Diese docker-compose.yml Datei ist die zentrale Orchestrierungsdatei für ALLE Docker-Services dieses Projekts. # Es ist strengstens untersagt, Service-Definitionen, Volumes, Netzwerke oder andere Konfigurationen # willkürlich zu löschen, auszukommentieren oder zu modifizieren, es sei denn, dies wurde # explizit angefordert und die Auswirkungen wurden vollständig verstanden. # Unbeabsichtigte Löschungen können zu massivem Datenverlust und Fehlfunktionen des Systems führen. # Prüfe IMMER den gesamten Kontext der Datei und die Projektdokumentation (readme.md), bevor du Änderungen vornimmst. version: '3.8' services: # --- GATEKEEPER (NGINX) --- nginx: image: nginx:alpine container_name: gateway_proxy restart: unless-stopped ports: - "8090:80" # Synology Reverse Proxy should point to THIS port (8090) volumes: - ./nginx-proxy.conf:/etc/nginx/nginx.conf:ro - ./.htpasswd:/etc/nginx/.htpasswd:ro depends_on: - company-explorer - dashboard - b2b-app - market-frontend - gtm-app - transcription-app - content-app - competitor-analysis # --- AGENT (moltbot) --- # moltbot: # Moltbot ist oft auskommentiert, um Port-Konflikte zu vermeiden, da der Agent oft separat läuft. # build: # context: . # dockerfile: Dockerfile.moltbot # container_name: moltbot # restart: unless-stopped # ports: # - "18789:18789" # command: /app/packages/clawdbot/node_modules/.bin/clawdbot gateway --port 18789 --allow-unconfigured # volumes: # - moltbot_data:/home/node/.clawd # --- 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" volumes: - ./company-explorer:/app - ./companies_v3_fixed_2.db:/app/companies_v3_fixed_2.db - ./gemini_api_key.txt:/app/gemini_api_key.txt - ./serpapikey.txt:/app/serpapikey.txt - ./notion_token.txt:/app/notion_token.txt - ./Log_from_docker:/app/logs_debug transcription-app: build: context: ./transcription-tool dockerfile: Dockerfile container_name: transcription-app restart: unless-stopped volumes: - ./transcription-tool/backend:/app/backend - ./transcripts.db:/app/transcripts.db - ./uploads_audio:/app/uploads_audio - ./gemini_api_key.txt:/app/gemini_api_key.txt environment: PYTHONUNBUFFERED: "1" DATABASE_URL: "sqlite:////app/transcripts.db" GEMINI_API_KEY: "AIzaSyCFRmr1rOrkFKiEuh9GOCJNB2zfJsYmR68" # Placeholder, actual key is in file ports: - "8001:8001" depends_on: - nginx # Abhängigkeit vom Proxy, da der Frontend über den Proxy geht b2b-app: build: context: . dockerfile: Dockerfile.b2b container_name: b2b-assistant restart: unless-stopped volumes: - ./b2b_marketing_orchestrator.py:/app/b2b_marketing_orchestrator.py - ./market_db_manager.py:/app/market_db_manager.py - ./b2b-marketing-assistant/server.cjs:/app/server.cjs - ./b2b_projects.db:/app/b2b_projects.db - ./Log_from_docker:/app/Log_from_docker - ./gemini_api_key.txt:/app/gemini_api_key.txt environment: PYTHONUNBUFFERED: "1" DB_PATH: "/app/b2b_projects.db" # Port 3002 is internal only market-backend: build: context: . dockerfile: Dockerfile.market container_name: market-backend restart: unless-stopped volumes: - ./market_intel_orchestrator.py:/app/market_intel_orchestrator.py - ./market_db_manager.py:/app/market_db_manager.py - ./config.py:/app/config.py - ./helpers.py:/app/helpers.py - ./general-market-intelligence/server.cjs:/app/general-market-intelligence/server.cjs - ./market_intelligence.db:/app/market_intelligence.db - ./Log:/app/Log - ./gemini_api_key.txt:/app/gemini_api_key.txt - ./serpapikey.txt:/app/serpapikey.txt environment: PYTHONUNBUFFERED: "1" DB_PATH: "/app/market_intelligence.db" # Port 3001 is internal only market-frontend: build: context: ./general-market-intelligence dockerfile: Dockerfile container_name: market-frontend restart: unless-stopped depends_on: - market-backend # Port 80 is internal only gtm-app: build: context: . dockerfile: gtm-architect/Dockerfile container_name: gtm-app restart: unless-stopped volumes: - ./gtm-architect:/app/gtm-architect - ./gtm-architect/server.cjs:/app/server.cjs - ./gtm_architect_orchestrator.py:/app/gtm_architect_orchestrator.py - ./helpers.py:/app/helpers.py - ./config.py:/app/config.py - ./gtm_db_manager.py:/app/gtm_db_manager.py - ./gtm_projects.db:/app/gtm_projects.db - ./Log_from_docker:/app/Log_from_docker - ./gemini_api_key.txt:/app/gemini_api_key.txt - ./serpapikey.txt:/app/serpapikey.txt environment: PYTHONUNBUFFERED: "1" DB_PATH: "/app/gtm_projects.db" # Port 3005 is internal only content-app: build: context: . dockerfile: content-engine/Dockerfile container_name: content-app restart: unless-stopped volumes: - ./content-engine:/app/content-engine - ./content-engine/server.cjs:/app/server.cjs - ./content-engine/content_orchestrator.py:/app/content_orchestrator.py - ./content-engine/content_db_manager.py:/app/content_db_manager.py - ./content_engine.db:/app/content_engine.db - ./helpers.py:/app/helpers.py - ./config.py:/app/config.py - ./gtm_projects.db:/app/gtm_projects.db - ./Log_from_docker:/app/Log_from_docker - ./gemini_api_key.txt:/app/gemini_api_key.txt - ./serpapikey.txt:/app/serpapikey.txt environment: PYTHONUNBUFFERED: "1" DB_PATH: "/app/content_engine.db" GTM_DB_PATH: "/app/gtm_projects.db" competitor-analysis: build: context: ./competitor-analysis-app dockerfile: Dockerfile container_name: competitor-analysis restart: unless-stopped dns: - 8.8.8.8 - 8.8.4.4 volumes: - ./competitor-analysis-app/competitor_analysis_orchestrator.py:/app/competitor_analysis_orchestrator.py - ./gemini_api_key.txt:/app/gemini_api_key.txt - ./Log_from_docker:/app/Log_from_docker environment: PYTHONUNBUFFERED: "1" GEMINI_API_KEY_FILE: "/app/gemini_api_key.txt" # Port 8000 is internal only # --- INFRASTRUCTURE SERVICES --- duckdns: image: lscr.io/linuxserver/duckdns:latest container_name: duckdns environment: PUID: "1000" # User ID (anpassen falls nötig) PGID: "1000" # Group ID (anpassen falls nötig) TZ: "Europe/Berlin" SUBDOMAINS: "floke,floke-ai,floke-gitea,floke-ha,floke-n8n" TOKEN: "2e073b27-971e-4847-988c-73ad23e648d4" # Actual token is in .env or config restart: unless-stopped dns-monitor: image: alpine container_name: dns-monitor dns: - 8.8.8.8 - 1.1.1.1 environment: SUBDOMAINS: "floke,floke-ai,floke-gitea,floke-ha,floke-n8n" TZ: "Europe/Berlin" volumes: - ./dns-monitor:/app command: "/app/monitor.sh" restart: unless-stopped volumes: moltbot_data: {} # Volume for moltbot data, even if service is commented out.