- Verschiebt alle Datenbank-Mounts im Container nach /data/. - Verhindert, dass der /app Code-Mount die Datenbankdateien überschreibt oder blockiert. - Betrifft alle Dienste mit persistenter Datenbank. - Synchronisiert die Pfade in config.py (Explorer) und queue_manager.py (Connector).
271 lines
7.4 KiB
YAML
271 lines
7.4 KiB
YAML
# =================================================================
|
|
# ZENTRALE ORCHESTRIERUNGSDATEI - ROBO-PLANET GTM STACK
|
|
# FINALER STAND FÜR MIGRATION (MÄRZ 2026) - DB-FIX EDITION
|
|
# =================================================================
|
|
|
|
version: '3.8'
|
|
|
|
services:
|
|
# --- GATEKEEPER (NGINX) ---
|
|
nginx:
|
|
image: nginx:alpine
|
|
container_name: gateway_proxy
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8090:80"
|
|
volumes:
|
|
- ./nginx-proxy.conf:/etc/nginx/nginx.conf:ro
|
|
- ./.htpasswd:/etc/nginx/.htpasswd:ro
|
|
depends_on:
|
|
- company-explorer
|
|
- dashboard
|
|
- connector-superoffice
|
|
- b2b-assistant
|
|
- market-frontend
|
|
- gtm-app
|
|
- transcription-app
|
|
- content-app
|
|
- competitor-analysis
|
|
- heatmap-frontend
|
|
|
|
# --- DASHBOARD ---
|
|
dashboard:
|
|
image: nginx:alpine
|
|
container_name: dashboard
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./dashboard:/usr/share/nginx/html:ro
|
|
|
|
# --- APPS (Core) ---
|
|
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
|
|
- ./data/companies_v3_fixed_2.db:/data/companies_v3_fixed_2.db
|
|
- ./Log_from_docker:/app/logs_debug
|
|
|
|
connector-superoffice:
|
|
build:
|
|
context: ./connector-superoffice
|
|
dockerfile: Dockerfile
|
|
container_name: connector-superoffice
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8003:8000"
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./connector-superoffice:/app
|
|
- ./data/connector_queue.db:/data/connector_queue.db
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
API_USER: "admin"
|
|
API_PASSWORD: "gemini"
|
|
DB_PATH: "/data/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"
|
|
volumes:
|
|
- ./lead-engine:/app
|
|
- ./company-explorer/company_explorer_connector.py:/app/company_explorer_connector.py
|
|
|
|
# --- APPS (Auxiliary) ---
|
|
transcription-app:
|
|
build:
|
|
context: ./transcription-tool
|
|
dockerfile: Dockerfile
|
|
container_name: transcription-app
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8001:8001"
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./transcription-tool/backend:/app/backend
|
|
- ./transcription-tool/frontend/dist:/app/frontend/dist
|
|
- ./data/transcripts.db:/data/transcripts.db
|
|
- ./uploads_audio:/app/uploads_audio
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
DATABASE_URL: "sqlite:////data/transcripts.db"
|
|
|
|
b2b-assistant:
|
|
build:
|
|
context: .
|
|
dockerfile: dockerfiles/Dockerfile.b2b
|
|
container_name: b2b-assistant
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./b2b-marketing-assistant/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
|
|
- ./data/b2b_projects.db:/data/b2b_projects.db
|
|
- ./Log_from_docker:/app/Log_from_docker
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
DB_PATH: "/data/b2b_projects.db"
|
|
|
|
market-backend:
|
|
build:
|
|
context: .
|
|
dockerfile: dockerfiles/Dockerfile.market
|
|
container_name: market-backend
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./general-market-intelligence/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
|
|
- ./data/market_intelligence.db:/data/market_intelligence.db
|
|
- ./Log:/app/Log
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
DB_PATH: "/data/market_intelligence.db"
|
|
|
|
market-frontend:
|
|
build:
|
|
context: ./general-market-intelligence
|
|
dockerfile: Dockerfile
|
|
container_name: market-frontend
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- market-backend
|
|
|
|
gtm-app:
|
|
build:
|
|
context: .
|
|
dockerfile: gtm-architect/Dockerfile
|
|
container_name: gtm-app
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./gtm-architect:/app/gtm-architect
|
|
- ./gtm-architect/server.cjs:/app/server.cjs
|
|
- ./gtm-architect/gtm_architect_orchestrator.py:/app/gtm_architect_orchestrator.py
|
|
- ./helpers.py:/app/helpers.py
|
|
- ./config.py:/app/config.py
|
|
- ./gtm-architect/gtm_db_manager.py:/app/gtm_db_manager.py
|
|
- ./data/gtm_projects.db:/data/gtm_projects.db
|
|
- ./Log_from_docker:/app/Log_from_docker
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
DB_PATH: "/data/gtm_projects.db"
|
|
|
|
content-app:
|
|
build:
|
|
context: .
|
|
dockerfile: content-engine/Dockerfile
|
|
container_name: content-app
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
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
|
|
- ./data/content_engine.db:/data/content_engine.db
|
|
- ./helpers.py:/app/helpers.py
|
|
- ./config.py:/app/config.py
|
|
- ./data/gtm_projects.db:/data/gtm_projects.db
|
|
- ./Log_from_docker:/app/Log_from_docker
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
DB_PATH: "/data/content_engine.db"
|
|
GTM_DB_PATH: "/data/gtm_projects.db"
|
|
|
|
competitor-analysis:
|
|
build:
|
|
context: ./competitor-analysis-app
|
|
dockerfile: Dockerfile
|
|
container_name: competitor-analysis
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
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/logs_debug
|
|
environment:
|
|
PYTHONUNBUFFERED: "1"
|
|
|
|
# --- HEATMAP ---
|
|
heatmap-backend:
|
|
build: ./heatmap-tool/backend
|
|
container_name: heatmap-backend
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./heatmap-tool/backend:/app
|
|
|
|
heatmap-frontend:
|
|
build: ./heatmap-tool/frontend
|
|
container_name: heatmap-frontend
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
volumes:
|
|
- ./heatmap-tool/frontend:/app
|
|
depends_on:
|
|
- heatmap-backend
|
|
|
|
# --- INFRASTRUCTURE ---
|
|
duckdns:
|
|
image: lscr.io/linuxserver/duckdns:latest
|
|
container_name: duckdns
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
PUID: "1000"
|
|
PGID: "1000"
|
|
TZ: "Europe/Berlin"
|
|
SUBDOMAINS: "floke,floke-ai,floke-gitea,floke-ha,floke-n8n"
|
|
|
|
dns-monitor:
|
|
image: alpine
|
|
container_name: dns-monitor
|
|
restart: unless-stopped
|
|
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" |