diff --git a/.dev_session/SESSION_INFO b/.dev_session/SESSION_INFO index 9fcaf7037..c53d7681f 100644 --- a/.dev_session/SESSION_INFO +++ b/.dev_session/SESSION_INFO @@ -1 +1 @@ -{"task_id": "32788f42-8544-80e1-a13a-c26114cf9b34", "token": "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", "readme_path": "readme.md", "session_start_time": "2026-04-08T08:21:53.169017"} \ No newline at end of file +{"task_id": "32788f42-8544-80e1-a13a-c26114cf9b34", "token": "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", "readme_path": "readme.md", "session_start_time": "2026-04-08T16:39:28.516327"} \ No newline at end of file diff --git a/dashboard/index.html b/dashboard/index.html index 7e7fb2a9d..814d5804f 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -133,18 +133,18 @@
- + Starten →
+ --> - + Starten → + --> - + Starten → + --> - + - +
🤖

Company Explorer

Das zentrale CRM-Data-Mining Tool. Importieren, Deduplizieren und Anreichern von Firmenlisten mit Fokus auf Robotik-Potential.

- Starten →
- + - +
@@ -218,7 +220,7 @@ Starten →
- + + + +
+ 📸 +

Fotograf.de ERP

+

+ Automatisierter Workflow zum Download und Formatieren der Anmeldelisten von fotograf.de als sortiertes PDF. +

+ Starten → +
diff --git a/docker-compose.yml b/docker-compose.yml index 2512b3401..ee7e3c0c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,23 +19,25 @@ services: condition: service_started company-explorer: condition: service_healthy - connector-superoffice: - condition: service_healthy - lead-engine: - condition: service_started - gtm-architect: - condition: service_started - b2b-marketing-assistant: - condition: service_started + # connector-superoffice: + # condition: service_healthy + # lead-engine: + # condition: service_started + # gtm-architect: + # condition: service_started + # b2b-marketing-assistant: + # condition: service_started transcription-tool: condition: service_started - heatmap-frontend: - condition: service_started - competitor-analysis: - condition: service_started - content-engine: - condition: service_started - market-intelligence: + # heatmap-frontend: + # condition: service_started + # competitor-analysis: + # condition: service_started + # content-engine: + # condition: service_started + # market-intelligence: + # condition: service_started + fotograf-de-scraper-frontend: condition: service_started # --- DASHBOARD --- @@ -47,60 +49,60 @@ services: - ./dashboard:/usr/share/nginx/html:ro # --- APPS --- - market-intelligence: - build: - context: . - dockerfile: general-market-intelligence/Dockerfile.fullstack - container_name: market-intelligence - restart: unless-stopped - ports: - - "8098:3001" - environment: - GEMINI_API_KEY: "${GEMINI_API_KEY}" - SERP_API_KEY: "${SERP_API}" - PYTHONUNBUFFERED: "1" - volumes: - - market_intel_data:/data - - ./Log_from_docker:/app/Log + # market-intelligence: + # build: + # context: . + # dockerfile: general-market-intelligence/Dockerfile.fullstack + # container_name: market-intelligence + # restart: unless-stopped + # ports: + # - "8098:3001" + # environment: + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # SERP_API_KEY: "${SERP_API}" + # PYTHONUNBUFFERED: "1" + # volumes: + # - market_intel_data:/data + # - ./Log_from_docker:/app/Log - content-engine: - build: - context: . - dockerfile: content-engine/Dockerfile - container_name: content-engine - restart: unless-stopped - ports: - - "8093:3000" - environment: - GEMINI_API_KEY: "${GEMINI_API_KEY}" - PYTHONUNBUFFERED: "1" - GTM_DB_PATH: "/gtm_data/gtm_projects.db" - CONTENT_DB_PATH: "/data/content_engine.db" - volumes: - - content_engine_data:/data - - gtm_architect_data:/gtm_data:ro - - ./Log_from_docker:/app/logs_debug - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3006"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s + # content-engine: + # build: + # context: . + # dockerfile: content-engine/Dockerfile + # container_name: content-engine + # restart: unless-stopped + # ports: + # - "8093:3000" + # environment: + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # PYTHONUNBUFFERED: "1" + # GTM_DB_PATH: "/gtm_data/gtm_projects.db" + # CONTENT_DB_PATH: "/data/content_engine.db" + # volumes: + # - content_engine_data:/data + # - gtm_architect_data:/gtm_data:ro + # - ./Log_from_docker:/app/logs_debug + # healthcheck: + # test: ["CMD", "curl", "-f", "http://localhost:3006"] + # interval: 10s + # timeout: 5s + # retries: 5 + # start_period: 30s - competitor-analysis: - build: - context: ./competitor-analysis-app - dockerfile: Dockerfile - container_name: competitor-analysis - restart: unless-stopped - ports: - - "8097:3000" - environment: - GEMINI_API_KEY: "${GEMINI_API_KEY}" - PYTHONUNBUFFERED: "1" - volumes: - - competitor_analysis_data:/data - - ./Log_from_docker:/app/logs_debug + # competitor-analysis: + # build: + # context: ./competitor-analysis-app + # dockerfile: Dockerfile + # container_name: competitor-analysis + # restart: unless-stopped + # ports: + # - "8097:3000" + # environment: + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # PYTHONUNBUFFERED: "1" + # volumes: + # - competitor_analysis_data:/data + # - ./Log_from_docker:/app/logs_debug transcription-tool: build: @@ -117,58 +119,58 @@ services: - transcription_uploads:/app/uploads - ./Log_from_docker:/app/logs_debug - heatmap-backend: - build: - context: ./heatmap-tool/backend - container_name: heatmap-backend - restart: unless-stopped - ports: - - "8002:8000" - environment: - ORS_API_KEY: "${ORS_API_KEY}" - PYTHONUNBUFFERED: "1" + # heatmap-backend: + # build: + # context: ./heatmap-tool/backend + # container_name: heatmap-backend + # restart: unless-stopped + # ports: + # - "8002:8000" + # environment: + # ORS_API_KEY: "${ORS_API_KEY}" + # PYTHONUNBUFFERED: "1" - heatmap-frontend: - build: - context: ./heatmap-tool/frontend - dockerfile: Dockerfile - container_name: heatmap-frontend - restart: unless-stopped - ports: - - "8096:80" - depends_on: - - heatmap-backend + # heatmap-frontend: + # build: + # context: ./heatmap-tool/frontend + # dockerfile: Dockerfile + # container_name: heatmap-frontend + # restart: unless-stopped + # ports: + # - "8096:80" + # depends_on: + # - heatmap-backend - b2b-marketing-assistant: - build: - context: . - dockerfile: b2b-marketing-assistant/Dockerfile - container_name: b2b-marketing-assistant - restart: unless-stopped - ports: - - "8092:3002" - environment: - GEMINI_API_KEY: "${GEMINI_API_KEY}" - PYTHONUNBUFFERED: "1" - volumes: - - b2b_marketing_data:/data - - ./Log_from_docker:/app/logs_debug + # b2b-marketing-assistant: + # build: + # context: . + # dockerfile: b2b-marketing-assistant/Dockerfile + # container_name: b2b-marketing-assistant + # restart: unless-stopped + # ports: + # - "8092:3002" + # environment: + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # PYTHONUNBUFFERED: "1" + # volumes: + # - b2b_marketing_data:/data + # - ./Log_from_docker:/app/logs_debug - gtm-architect: - build: - context: . - dockerfile: gtm-architect/Dockerfile - container_name: gtm-architect - restart: unless-stopped - ports: - - "8094:80" - environment: - GEMINI_API_KEY: "${GEMINI_API_KEY}" - VITE_API_BASE_URL: "/gtm/api" - GTM_DB_PATH: "/data/gtm_projects.db" - volumes: - - ./Log_from_docker:/app/logs_debug - - gtm_architect_data:/data + # gtm-architect: + # build: + # context: . + # dockerfile: gtm-architect/Dockerfile + # container_name: gtm-architect + # restart: unless-stopped + # ports: + # - "8094:80" + # environment: + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # VITE_API_BASE_URL: "/gtm/api" + # GTM_DB_PATH: "/data/gtm_projects.db" + # volumes: + # - ./Log_from_docker:/app/logs_debug + # - gtm_architect_data:/data company-explorer: build: @@ -197,64 +199,90 @@ services: retries: 5 start_period: 30s - connector-superoffice: + # connector-superoffice: + # build: + # context: ./connector-superoffice + # dockerfile: Dockerfile + # container_name: connector-superoffice + # restart: unless-stopped + # ports: + # - "8003:8000" + # volumes: + # - ./connector-superoffice:/app + # - ./connector-superoffice/data:/data # Persistent local DB storage + # environment: + # PYTHONUNBUFFERED: "1" + # 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_TOKEN: "${WEBHOOK_TOKEN}" + # WEBHOOK_SECRET: "${WEBHOOK_SECRET}" + # healthcheck: + # test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + # interval: 10s + # timeout: 5s + # retries: 5 + # start_period: 30s + + # lead-engine: + # build: + # context: ./lead-engine + # dockerfile: Dockerfile + # container_name: lead-engine + # restart: unless-stopped + # ports: + # - "8501:8501" # UI (Streamlit) + # - "8004:8004" # API / Monitor + # - "8099:8004" # Direct Test Port + # environment: + # PYTHONUNBUFFERED: "1" + # GEMINI_API_KEY: "${GEMINI_API_KEY}" + # SERP_API: "${SERP_API}" + # INFO_Application_ID: "${INFO_Application_ID}" + # INFO_Tenant_ID: "${INFO_Tenant_ID}" + # INFO_Secret: "${INFO_Secret}" + # CAL_APPID: "${CAL_APPID}" + # CAL_SECRET: "${CAL_SECRET}" + # CAL_TENNANT_ID: "${CAL_TENNANT_ID}" + # TEAMS_WEBHOOK_URL: "${TEAMS_WEBHOOK_URL}" + # FEEDBACK_SERVER_BASE_URL: "${FEEDBACK_SERVER_BASE_URL}" + # WORDPRESS_BOOKING_URL: "${WORDPRESS_BOOKING_URL}" + # MS_BOOKINGS_URL: "${MS_BOOKINGS_URL}" + # volumes: + # - ./lead-engine:/app + # - ./lead-engine/data:/app/data # Local persistent database + + fotograf-de-scraper-backend: build: - context: ./connector-superoffice + context: ./fotograf-de-scraper/backend dockerfile: Dockerfile - container_name: connector-superoffice - restart: unless-stopped - ports: - - "8003:8000" - volumes: - - ./connector-superoffice:/app - - ./connector-superoffice/data:/data # Persistent local DB storage + container_name: fotograf-de-scraper-backend + env_file: + - ./fotograf-de-scraper/.env environment: - PYTHONUNBUFFERED: "1" - 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_TOKEN: "${WEBHOOK_TOKEN}" - WEBHOOK_SECRET: "${WEBHOOK_SECRET}" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] - interval: 10s - timeout: 5s - retries: 5 - start_period: 30s + - TZ=Europe/Berlin + ports: + - "8002:8000" + volumes: + - ./fotograf-de-scraper/backend:/app + - ./fotograf-de-scraper/backend/data:/app/data + restart: unless-stopped - lead-engine: + fotograf-de-scraper-frontend: build: - context: ./lead-engine + context: ./fotograf-de-scraper/frontend dockerfile: Dockerfile - container_name: lead-engine - restart: unless-stopped + args: + VITE_API_BASE_URL: "http://192.168.178.6:8002" + container_name: fotograf-de-scraper-frontend ports: - - "8501:8501" # UI (Streamlit) - - "8004:8004" # API / Monitor - - "8099:8004" # Direct Test Port - environment: - PYTHONUNBUFFERED: "1" - GEMINI_API_KEY: "${GEMINI_API_KEY}" - SERP_API: "${SERP_API}" - INFO_Application_ID: "${INFO_Application_ID}" - INFO_Tenant_ID: "${INFO_Tenant_ID}" - INFO_Secret: "${INFO_Secret}" - CAL_APPID: "${CAL_APPID}" - CAL_SECRET: "${CAL_SECRET}" - CAL_TENNANT_ID: "${CAL_TENNANT_ID}" - TEAMS_WEBHOOK_URL: "${TEAMS_WEBHOOK_URL}" - FEEDBACK_SERVER_BASE_URL: "${FEEDBACK_SERVER_BASE_URL}" - WORDPRESS_BOOKING_URL: "${WORDPRESS_BOOKING_URL}" - MS_BOOKINGS_URL: "${MS_BOOKINGS_URL}" - volumes: - - ./lead-engine:/app - - ./lead-engine/data:/app/data # Local persistent database - - # --- INFRASTRUCTURE SERVICES --- - + - "3009:80" + depends_on: + - fotograf-de-scraper-backend + restart: unless-stopped volumes: gtm_architect_data: {} diff --git a/fotograf-de-scraper/frontend/Dockerfile b/fotograf-de-scraper/frontend/Dockerfile index 524c0accf..38205227a 100644 --- a/fotograf-de-scraper/frontend/Dockerfile +++ b/fotograf-de-scraper/frontend/Dockerfile @@ -3,6 +3,9 @@ FROM node:20-alpine AS builder WORKDIR /app +# Accept build arguments +ARG VITE_API_BASE_URL + # Copy package.json and package-lock.json COPY package*.json ./ @@ -12,6 +15,9 @@ RUN npm install # Copy the rest of the application source code COPY . . +# Write the build arg to .env.production so Vite picks it up during build +RUN echo "VITE_API_BASE_URL=${VITE_API_BASE_URL}" > .env.production + # Build the application RUN npm run build diff --git a/modify_compose_for_user.py b/modify_compose_for_user.py new file mode 100644 index 000000000..837835815 --- /dev/null +++ b/modify_compose_for_user.py @@ -0,0 +1,66 @@ +import yaml + +with open('docker-compose.yml', 'r') as f: + data = yaml.safe_load(f) + +services = data.get('services', {}) + +# We only keep the following core services +core_services = [ + 'nginx', + 'dashboard', + 'company-explorer', + 'transcription-tool' +] + +# Create a filtered services dict +new_services = {} +for k, v in services.items(): + if k in core_services: + new_services[k] = v + +# Add fotograf-de services since they are in subdirectories but belong to the main stack +new_services['fotograf-de-scraper-backend'] = { + 'build': { + 'context': './fotograf-de-scraper/backend', + 'dockerfile': 'Dockerfile' + }, + 'container_name': 'fotograf-de-scraper-backend', + 'env_file': ['./fotograf-de-scraper/.env'], + 'environment': ['TZ=Europe/Berlin'], + 'ports': ['8002:8000'], + 'volumes': [ + './fotograf-de-scraper/backend:/app', + './fotograf-de-scraper/backend/data:/app/data' + ], + 'restart': 'unless-stopped' +} + +new_services['fotograf-de-scraper-frontend'] = { + 'build': { + 'context': './fotograf-de-scraper/frontend', + 'dockerfile': 'Dockerfile', + 'args': {'VITE_API_BASE_URL': '/fotograf-de-api'} + }, + 'container_name': 'fotograf-de-scraper-frontend', + 'ports': ['3009:80'], + 'depends_on': ['fotograf-de-scraper-backend'], + 'restart': 'unless-stopped' +} + +# Update NGINX depends_on +if 'nginx' in new_services and 'depends_on' in new_services['nginx']: + new_services['nginx']['depends_on'] = { + 'dashboard': {'condition': 'service_started'}, + 'company-explorer': {'condition': 'service_healthy'}, + 'transcription-tool': {'condition': 'service_started'}, + 'fotograf-de-scraper-frontend': {'condition': 'service_started'} + } + +data['services'] = new_services + +# Prune unused volumes +data['volumes'] = {'transcription_uploads': {}} + +with open('docker-compose.yml', 'w') as f: + yaml.dump(data, f, sort_keys=False) diff --git a/nginx-proxy-clean.conf b/nginx-proxy-clean.conf index 00b128dc0..f06867185 100644 --- a/nginx-proxy-clean.conf +++ b/nginx-proxy-clean.conf @@ -38,47 +38,47 @@ http { proxy_set_header Connection "upgrade"; } - location /lead/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://lead-engine:8501/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_http_version 1.1; - proxy_read_timeout 86400; - } + # location /lead/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://lead-engine:8501/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # proxy_http_version 1.1; + # proxy_read_timeout 86400; + # } - location /gtm/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://gtm-architect:3005/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /gtm/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://gtm-architect:3005/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } - location /market/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://market-intelligence:3001/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /market/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://market-intelligence:3001/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } - location /b2b/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://b2b-marketing-assistant:3002/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /b2b/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://b2b-marketing-assistant:3002/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } location /tr/ { auth_basic "Restricted Access - Local AI Suite"; @@ -91,72 +91,93 @@ http { proxy_set_header Connection "upgrade"; } - location /content/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://content-engine:3000/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /content/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://content-engine:3000/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } - location /competitor/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://competitor-analysis:3000/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /competitor/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://competitor-analysis:3000/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } - location /heatmap/ { - auth_basic "Restricted Access - Local AI Suite"; - auth_basic_user_file /etc/nginx/.htpasswd; - proxy_pass http://heatmap-frontend:80/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } + # location /heatmap/ { + # auth_basic "Restricted Access - Local AI Suite"; + # auth_basic_user_file /etc/nginx/.htpasswd; + # proxy_pass http://heatmap-frontend:80/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } - location /feedback/ { - auth_basic off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - rewrite ^/feedback/(.*)$ /$1 break; - proxy_pass http://lead-engine:8004; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } + # location /feedback/ { + # auth_basic off; + # proxy_http_version 1.1; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # rewrite ^/feedback/(.*)$ /$1 break; + # proxy_pass http://lead-engine:8004; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_set_header X-Forwarded-Proto $scheme; + # } # Smartlead Webhooks (public) - location /public/smartlead/ { - auth_basic off; - # Rewrite the URL to remove the public prefix and pass the rest to the webhook handler - # e.g., /public/smartlead/hot-lead -> /webhook/hot-lead - rewrite ^/public/smartlead/(.*)$ /webhook/$1 break; - - proxy_pass http://lead-engine:8004; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } + # location /public/smartlead/ { + # auth_basic off; + # # Rewrite the URL to remove the public prefix and pass the rest to the webhook handler + # # e.g., /public/smartlead/hot-lead -> /webhook/hot-lead + # rewrite ^/public/smartlead/(.*)$ /webhook/$1 break; + # + # proxy_pass http://lead-engine:8004; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_set_header X-Forwarded-Proto $scheme; + # } - location /connector/ { - auth_basic off; - proxy_pass http://connector-superoffice:8000/; + # location /connector/ { + # auth_basic off; + # proxy_pass http://connector-superoffice:8000/; + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_set_header X-Forwarded-Proto $scheme; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # } + + location /fotograf-de/ { + auth_basic "Restricted Access - Local AI Suite"; + auth_basic_user_file /etc/nginx/.htpasswd; + proxy_pass http://fotograf-de-scraper-frontend:80/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } + + # Fotograf.de Backend API (internal) + location /fotograf-de-api/ { + auth_basic off; + rewrite ^/fotograf-de-api/(.*)$ /$1 break; + proxy_pass http://fotograf-de-scraper-backend:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } } }