309 lines
9.6 KiB
YAML
309 lines
9.6 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.
|
|
|
|
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:
|
|
# Use clean config to avoid caching issues
|
|
- ./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
|
|
|
|
# --- 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"
|
|
# Correct path for DB inside the mounted volume
|
|
DATABASE_URL: "sqlite:////data/companies_v3_fixed_2.db"
|
|
# Keys passed from .env
|
|
GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
SERP_API_KEY: "${SERP_API}"
|
|
NOTION_TOKEN: "${NOTION_API_KEY}"
|
|
volumes:
|
|
- ./company-explorer:/app
|
|
# Mount named volume to a DIRECTORY, not a file
|
|
- 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" # Expose internal 8000 to host 8003
|
|
volumes:
|
|
- ./connector-superoffice:/app
|
|
# Mount named volume to a DIRECTORY matching the Python code's expectation
|
|
- connector_db_data:/data
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
API_USER: "admin"
|
|
API_PASSWORD: "gemini"
|
|
# Correct path for DB inside the mounted volume
|
|
DB_PATH: "/app/data/connector_queue.db"
|
|
COMPANY_EXPLORER_URL: "http://company-explorer:8000"
|
|
# Keys passed from .env
|
|
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 Security
|
|
WEBHOOK_TOKEN: "${WEBHOOK_TOKEN}"
|
|
WEBHOOK_SECRET: "${WEBHOOK_SECRET}"
|
|
# Mappings
|
|
VERTICAL_MAP_JSON: "${VERTICAL_MAP_JSON}"
|
|
PERSONA_MAP_JSON: "${PERSONA_MAP_JSON}"
|
|
# User Defined Fields (UDFs)
|
|
UDF_SUBJECT: "${UDF_SUBJECT}"
|
|
UDF_INTRO: "${UDF_INTRO}"
|
|
UDF_SOCIAL_PROOF: "${UDF_SOCIAL_PROOF}"
|
|
UDF_OPENER: "${UDF_OPENER}"
|
|
UDF_OPENER_SECONDARY: "${UDF_OPENER_SECONDARY}"
|
|
UDF_VERTICAL: "${UDF_VERTICAL}"
|
|
UDF_CAMPAIGN: "${UDF_CAMPAIGN}"
|
|
UDF_UNSUBSCRIBE_LINK: "${UDF_UNSUBSCRIBE_LINK}"
|
|
UDF_SUMMARY: "${UDF_SUMMARY}"
|
|
UDF_LAST_UPDATE: "${UDF_LAST_UPDATE}"
|
|
UDF_LAST_OUTREACH: "${UDF_LAST_OUTREACH}"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
# --- LEAD ENGINE (Trading Twins) ---
|
|
lead-engine:
|
|
build:
|
|
context: ./lead-engine
|
|
dockerfile: Dockerfile
|
|
container_name: lead-engine
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8501:8501" # UI (Streamlit)
|
|
- "8004:8004" # API / Monitor
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
COMPANY_EXPLORER_URL: "http://company-explorer:8000/api"
|
|
COMPANY_EXPLORER_API_USER: "admin"
|
|
COMPANY_EXPLORER_API_PASSWORD: "gemini"
|
|
volumes:
|
|
- ./lead-engine:/app
|
|
- lead_engine_data:/app/data
|
|
- ./Log_from_docker:/app/Log
|
|
|
|
# --- INFRASTRUCTURE SERVICES ---
|
|
|
|
# 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
|
|
|
|
# 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
|
|
# - ./transcripts.db:/app/transcripts.db
|
|
# - ./uploads_audio:/app/uploads_audio
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# DATABASE_URL: "sqlite:////app/transcripts.db"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
# ports:
|
|
# - "8001:8001"
|
|
|
|
# b2b-app:
|
|
# build:
|
|
# context: ./b2b-marketing-assistant
|
|
# dockerfile: Dockerfile
|
|
# 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
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# DB_PATH: "/app/b2b_projects.db"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
|
|
# market-backend:
|
|
# build:
|
|
# context: ./general-market-intelligence
|
|
# dockerfile: Dockerfile
|
|
# 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
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# DB_PATH: "/app/market_intelligence.db"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
# SERPAPI_KEY: "${SERPAPI_KEY}"
|
|
|
|
# market-frontend:
|
|
# build:
|
|
# context: ./general-market-intelligence
|
|
# dockerfile: Dockerfile
|
|
# container_name: market-frontend
|
|
# restart: unless-stopped
|
|
# depends_on:
|
|
# - market-backend
|
|
|
|
# gtm-app:
|
|
# build:
|
|
# context: ./gtm-architect
|
|
# dockerfile: 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
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# DB_PATH: "/app/gtm_projects.db"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
# SERPAPI_KEY: "${SERPAPI_KEY}"
|
|
|
|
# content-app:
|
|
# build:
|
|
# context: ./content-engine
|
|
# dockerfile: 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
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# DB_PATH: "/app/content_engine.db"
|
|
# GTM_DB_PATH: "/app/gtm_projects.db"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
# SERPAPI_KEY: "${SERPAPI_KEY}"
|
|
|
|
# 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
|
|
# - ./Log_from_docker:/app/Log_from_docker
|
|
# environment:
|
|
# PYTHONUNBUFFERED: "1"
|
|
# GEMINI_API_KEY: "${GEMINI_API_KEY}"
|
|
|
|
# --- 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: "${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:
|
|
# moltbot_data: {}
|
|
connector_db_data: {}
|
|
explorer_db_data: {}
|
|
lead_engine_data: {} |