Files
Brancheneinstufung2/docker-compose.yml
Floke adb316d225 feat(trading-twins): Finalize Booking Engine & Infrastructure [31988f42]
- Implemented 'Direct Calendar Booking' logic replacing MS Bookings API.
- Integrated Dual-App architecture for Graph API (Sender vs. Reader permissions).
- Added FastAPI feedback server for Teams and Email interactions.
- Configured Nginx proxy for public feedback URL access.
- Updated Docker configuration (ports, env vars, dependencies).
- Finalized documentation in lead-engine/README.md.
2026-03-05 13:52:16 +00:00

300 lines
9.4 KiB
YAML

# 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
- heatmap-frontend
# --- HEATMAP ---
heatmap-backend:
build: ./heatmap-tool/backend
container_name: heatmap-backend
restart: unless-stopped
volumes:
- ./heatmap-tool/backend:/app
heatmap-frontend:
build: ./heatmap-tool/frontend
container_name: heatmap-frontend
restart: unless-stopped
volumes:
- ./heatmap-tool/frontend:/app
depends_on:
- heatmap-backend
# --- 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"
env_file:
- .env
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
- ./transcription-tool/frontend/dist:/app/frontend/dist # Mount Frontend Build for Live Updates
- ./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"
ports:
- "8001:8001"
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
connector-superoffice:
build:
context: ./connector-superoffice
dockerfile: Dockerfile
container_name: connector-superoffice
restart: unless-stopped
ports:
- "8003:8000" # Expose internal 8000 to host 8003 (8002 was taken)
env_file:
- .env
volumes:
- ./connector-superoffice:/app
- ./gemini_api_key.txt:/app/gemini_api_key.txt
- ./connector_queue.db:/app/connector_queue.db
environment:
PYTHONUNBUFFERED: "1"
API_USER: "admin"
API_PASSWORD: "gemini"
DB_PATH: "/app/connector_queue.db"
COMPANY_EXPLORER_URL: "http://company-explorer:8000"
lead-engine:
build:
context: ./lead-engine
dockerfile: Dockerfile
container_name: lead-engine
restart: unless-stopped
ports:
- "8501:8501"
- "8004:8004"
env_file:
- .env
environment:
PYTHONUNBUFFERED: "1"
COMPANY_EXPLORER_URL: "http://company-explorer:8000"
# Explicitly pass keys to ensure availability
SERP_API: "${SERP_API}"
GEMINI_API_KEY: "${GEMINI_API_KEY}"
# Calendar App Credentials
CAL_APPID: "${CAL_APPID}"
CAL_SECRET: "${CAL_SECRET}"
CAL_TENNANT_ID: "${CAL_TENNANT_ID}"
volumes:
- ./lead-engine:/app
# We need to mount the root connector module so it can be imported inside the container
- ./company_explorer_connector.py:/app/company_explorer_connector.py
# --- 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.