This commit introduces the foundational elements for the new "Company Explorer" web application, marking a significant step away from the legacy Google Sheets / CLI system. Key changes include: - Project Structure: A new directory with separate (FastAPI) and (React/Vite) components. - Data Persistence: Migration from Google Sheets to a local SQLite database () using SQLAlchemy. - Core Utilities: Extraction and cleanup of essential helper functions (LLM wrappers, text utilities) into . - Backend Services: , , for AI-powered analysis, and logic. - Frontend UI: Basic React application with company table, import wizard, and dynamic inspector sidebar. - Docker Integration: Updated and for multi-stage builds and sideloading. - Deployment & Access: Integrated into central Nginx proxy and dashboard, accessible via . Lessons Learned & Fixed during development: - Frontend Asset Loading: Addressed issues with Vite's path and FastAPI's . - TypeScript Configuration: Added and . - Database Schema Evolution: Solved errors by forcing a new database file and correcting override. - Logging: Implemented robust file-based logging (). This new foundation provides a powerful and maintainable platform for future B2B robotics lead generation.
156 lines
4.5 KiB
YAML
156 lines
4.5 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
# --- CENTRAL GATEWAY (Reverse Proxy with Auth) ---
|
|
proxy:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.proxy
|
|
container_name: gemini-gateway
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8090:80"
|
|
volumes:
|
|
- ./nginx-proxy.conf:/etc/nginx/nginx.conf
|
|
depends_on:
|
|
- dashboard
|
|
- b2b-app
|
|
- market-frontend
|
|
- company-explorer # NEW
|
|
|
|
# --- DASHBOARD (Landing Page) ---
|
|
dashboard:
|
|
build:
|
|
context: ./dashboard
|
|
dockerfile: Dockerfile.dashboard
|
|
container_name: gemini-dashboard
|
|
restart: unless-stopped
|
|
|
|
# --- COMPANY EXPLORER (Robotics Edition) ---
|
|
company-explorer:
|
|
build:
|
|
context: ./company-explorer
|
|
dockerfile: Dockerfile
|
|
container_name: company-explorer
|
|
restart: unless-stopped
|
|
volumes:
|
|
# Sideloading: Source Code (Hot Reload)
|
|
- ./company-explorer:/app
|
|
# Keys
|
|
- ./gemini_api_key.txt:/app/gemini_api_key.txt
|
|
- ./serpapikey.txt:/app/serpapikey.txt
|
|
# Logs (Debug)
|
|
- ./Log_from_docker:/app/logs_debug
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
# Port 8000 is internal only
|
|
|
|
# --- B2B MARKETING ASSISTANT ---
|
|
b2b-app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.b2b
|
|
container_name: b2b-assistant
|
|
restart: unless-stopped
|
|
volumes:
|
|
# Sideloading: Python Logic
|
|
- ./b2b_marketing_orchestrator.py:/app/b2b_marketing_orchestrator.py
|
|
- ./market_db_manager.py:/app/market_db_manager.py
|
|
# Sideloading: Server Logic
|
|
- ./b2b-marketing-assistant/server.cjs:/app/server.cjs
|
|
# Database Persistence
|
|
- ./b2b_projects.db:/app/b2b_projects.db
|
|
# Logs
|
|
- ./Log_from_docker:/app/Log_from_docker
|
|
# Keys
|
|
- ./gemini_api_key.txt:/app/gemini_api_key.txt
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
- DB_PATH=/app/b2b_projects.db
|
|
# Port 3002 is internal only
|
|
|
|
# --- MARKET INTELLIGENCE BACKEND ---
|
|
market-backend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.market
|
|
container_name: market-backend
|
|
restart: unless-stopped
|
|
volumes:
|
|
# Sideloading: Python Logic & Config
|
|
- ./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
|
|
# Sideloading: Server Logic
|
|
- ./general-market-intelligence/server.cjs:/app/general-market-intelligence/server.cjs
|
|
# Database Persistence
|
|
- ./market_intelligence.db:/app/market_intelligence.db
|
|
# Logs & Keys
|
|
- ./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 INTELLIGENCE FRONTEND ---
|
|
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:
|
|
# Sideloading for live development
|
|
- ./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
|
|
|
|
# --- DUCKDNS UPDATER ---
|
|
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
|
|
restart: unless-stopped
|
|
|
|
# --- DNS MONITOR (Sidecar) ---
|
|
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 |