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:
@@ -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
|
||||
Reference in New Issue
Block a user