Consolidate tools into a secure Docker architecture with landing page

- Implement a central reverse proxy (Nginx) with Basic Auth on port 8090.
- Create a unified landing page (dashboard) to access B2B Assistant and Market Intelligence.
- Update frontends with relative API paths and base paths for subdirectory routing (/b2b/, /market/).
- Optimize Docker builds with .dockerignore and a Python-based image for market-backend.
- Enable code sideloading for Python logic via Docker volumes.
- Fix TypeScript errors in general-market-intelligence regarding ImportMeta.
This commit is contained in:
2025-12-29 05:19:53 +00:00
parent fc79f70e9c
commit b78e2fca59
18 changed files with 4214 additions and 277 deletions

View File

@@ -1,38 +1,73 @@
version: '3.8'
services:
backend:
build:
# --- CENTRAL GATEWAY (Reverse Proxy with Auth) ---
proxy:
build:
context: .
dockerfile: Dockerfile
container_name: market-intel-backend
dockerfile: Dockerfile.proxy
container_name: gemini-gateway
restart: unless-stopped
ports:
- "8090:80"
depends_on:
- dashboard
- b2b-app
- market-frontend
# --- DASHBOARD (Landing Page) ---
dashboard:
build:
context: ./dashboard
dockerfile: Dockerfile.dashboard
container_name: gemini-dashboard
restart: unless-stopped
# --- B2B MARKETING ASSISTANT ---
b2b-app:
build:
context: .
dockerfile: Dockerfile.b2b
container_name: b2b-assistant
restart: unless-stopped
volumes:
# Persist Logs
- ./Log:/app/Log
# API Keys & Config (Bind Mounts for easy editing)
# Sideloading: Python Logic
- ./b2b_marketing_orchestrator.py:/app/b2b_marketing_orchestrator.py
# Logs
- ./Log_from_docker:/app/Log_from_docker
# Keys
- ./gemini_api_key.txt:/app/gemini_api_key.txt
- ./serpapikey.txt:/app/serpapikey.txt
- ./config.py:/app/config.py
# Optional: Mount Python script for hot-reloading logic changes
- ./market_intel_orchestrator.py:/app/market_intel_orchestrator.py
environment:
- PYTHONUNBUFFERED=1
# Backend port is internal-only, accessed by frontend via Docker network
expose:
- "3001"
# Port 3002 is internal only
frontend:
# --- 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
- ./config.py:/app/config.py
- ./helpers.py:/app/helpers.py
# Logs & Keys
- ./Log:/app/Log
- ./gemini_api_key.txt:/app/gemini_api_key.txt
- ./serpapikey.txt:/app/serpapikey.txt
environment:
- PYTHONUNBUFFERED=1
# Port 3001 is internal only
# --- MARKET INTELLIGENCE FRONTEND ---
market-frontend:
build:
context: ./general-market-intelligence
dockerfile: Dockerfile
container_name: market-intel-frontend
container_name: market-frontend
restart: unless-stopped
ports:
# Expose Frontend to Host (Synology)
# Access via http://<Synology-IP>:8085
- "8085:80"
depends_on:
- backend
# Optional: Define a specific network if needed, otherwise 'default' is fine.
- market-backend
# Port 80 is internal only