From 9143cb6ad1c173bd5fc45b31e42505a0b86f44d2 Mon Sep 17 00:00:00 2001 From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com> Date: Fri, 29 May 2026 11:39:11 +0530 Subject: [PATCH] feat(gateway): update WhatsApp bridge configuration and expose port 9929 --- docker/.env.example | 3 +++ docker/docker-compose.dev.yml | 22 +++++++++++++++++++ docker/docker-compose.yml | 7 ++++-- surfsense_backend/.env.example | 2 +- surfsense_backend/app/config/__init__.py | 2 +- .../scripts/whatsapp-bridge/Dockerfile | 4 ++-- .../scripts/whatsapp-bridge/bridge.js | 2 +- 7 files changed, 35 insertions(+), 7 deletions(-) diff --git a/docker/.env.example b/docker/.env.example index 748f03048..39fd8989b 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -55,6 +55,9 @@ EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 # -- Redis exposed port (dev only; Redis is internal-only in prod) -- # REDIS_PORT=6379 +# -- WhatsApp bridge exposed port (dev/hybrid only; prod keeps it Docker-internal) -- +# WHATSAPP_BRIDGE_PORT=9929 + # -- Frontend Build Args -- # In dev, the frontend is built from source and these are passed as build args. # In prod, they are automatically derived from AUTH_TYPE, ETL_SERVICE, and the port settings above. diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 58cb7b42f..818611138 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -126,6 +126,7 @@ services: - AUTH_TYPE=${AUTH_TYPE:-LOCAL} - NEXT_FRONTEND_URL=${NEXT_FRONTEND_URL:-http://localhost:3000} - SEARXNG_DEFAULT_HOST=${SEARXNG_DEFAULT_HOST:-http://searxng:8080} + - WHATSAPP_BRIDGE_URL=${WHATSAPP_BRIDGE_URL:-http://whatsapp-bridge:9929} # Daytona Sandbox – uncomment and set credentials to enable cloud code execution # - DAYTONA_SANDBOX_ENABLED=TRUE # - DAYTONA_API_KEY=${DAYTONA_API_KEY:-} @@ -148,6 +149,25 @@ services: retries: 30 start_period: 200s + whatsapp-bridge: + build: ../surfsense_backend/scripts/whatsapp-bridge + profiles: + - whatsapp + ports: + - "127.0.0.1:${WHATSAPP_BRIDGE_PORT:-9929}:9929" + volumes: + - whatsapp_sessions:/data/sessions + environment: + - PORT=9929 + - WHATSAPP_MODE=${WHATSAPP_MODE:-self-chat} + - WHATSAPP_SESSION_DIR=/data/sessions + restart: unless-stopped + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:9929/health"] + interval: 30s + timeout: 5s + retries: 5 + celery_worker: build: *backend-build volumes: @@ -282,3 +302,5 @@ volumes: name: surfsense-dev-zero-cache zero_init: name: surfsense-dev-zero-init + whatsapp_sessions: + name: surfsense-dev-whatsapp-sessions diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 12b7a6a33..66ad55b77 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -118,7 +118,7 @@ services: UNSTRUCTURED_HAS_PATCHED_LOOP: "1" NEXT_FRONTEND_URL: ${NEXT_FRONTEND_URL:-http://localhost:${FRONTEND_PORT:-3929}} SEARXNG_DEFAULT_HOST: ${SEARXNG_DEFAULT_HOST:-http://searxng:8080} - WHATSAPP_BRIDGE_URL: ${WHATSAPP_BRIDGE_URL:-http://whatsapp-bridge:3000} + WHATSAPP_BRIDGE_URL: ${WHATSAPP_BRIDGE_URL:-http://whatsapp-bridge:9929} # Daytona Sandbox – uncomment and set credentials to enable cloud code execution # DAYTONA_SANDBOX_ENABLED: "TRUE" # DAYTONA_API_KEY: ${DAYTONA_API_KEY:-} @@ -148,15 +148,18 @@ services: build: ../surfsense_backend/scripts/whatsapp-bridge profiles: - whatsapp + expose: + - "9929" volumes: - whatsapp_sessions:/data/sessions environment: + PORT: 9929 WHATSAPP_MODE: ${WHATSAPP_MODE:-self-chat} WHATSAPP_SESSION_DIR: /data/sessions mem_limit: 512m restart: unless-stopped healthcheck: - test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"] + test: ["CMD", "wget", "-qO-", "http://localhost:9929/health"] interval: 30s timeout: 5s retries: 5 diff --git a/surfsense_backend/.env.example b/surfsense_backend/.env.example index bc96cc948..6ddf18ebb 100644 --- a/surfsense_backend/.env.example +++ b/surfsense_backend/.env.example @@ -34,7 +34,7 @@ WHATSAPP_SHARED_WABA_ID= WHATSAPP_GRAPH_API_VERSION=v25.0 WHATSAPP_WEBHOOK_VERIFY_TOKEN= WHATSAPP_WEBHOOK_APP_SECRET= -WHATSAPP_BRIDGE_URL=http://whatsapp-bridge:3000 +WHATSAPP_BRIDGE_URL=http://whatsapp-bridge:9929 # Platform Web Search (SearXNG) # Set this to enable built-in web search. Docker Compose sets it automatically. diff --git a/surfsense_backend/app/config/__init__.py b/surfsense_backend/app/config/__init__.py index afccb190b..c8ffa802e 100644 --- a/surfsense_backend/app/config/__init__.py +++ b/surfsense_backend/app/config/__init__.py @@ -562,7 +562,7 @@ class Config: WHATSAPP_GRAPH_API_VERSION = os.getenv("WHATSAPP_GRAPH_API_VERSION", "v25.0") WHATSAPP_WEBHOOK_VERIFY_TOKEN = os.getenv("WHATSAPP_WEBHOOK_VERIFY_TOKEN") WHATSAPP_WEBHOOK_APP_SECRET = os.getenv("WHATSAPP_WEBHOOK_APP_SECRET") - WHATSAPP_BRIDGE_URL = os.getenv("WHATSAPP_BRIDGE_URL", "http://whatsapp-bridge:3000") + WHATSAPP_BRIDGE_URL = os.getenv("WHATSAPP_BRIDGE_URL", "http://whatsapp-bridge:9929") GATEWAY_WHATSAPP_INTAKE_MODE = os.getenv( "GATEWAY_WHATSAPP_INTAKE_MODE", "disabled" ).lower() diff --git a/surfsense_backend/scripts/whatsapp-bridge/Dockerfile b/surfsense_backend/scripts/whatsapp-bridge/Dockerfile index 4a7e3f3fd..42bcd6b21 100644 --- a/surfsense_backend/scripts/whatsapp-bridge/Dockerfile +++ b/surfsense_backend/scripts/whatsapp-bridge/Dockerfile @@ -8,8 +8,8 @@ RUN npm ci --silent COPY . . ENV WHATSAPP_SESSION_DIR=/data/sessions -EXPOSE 3000 +EXPOSE 9929 -HEALTHCHECK --interval=30s --timeout=5s CMD wget -qO- http://127.0.0.1:3000/health || exit 1 +HEALTHCHECK --interval=30s --timeout=5s CMD wget -qO- http://127.0.0.1:9929/health || exit 1 CMD ["node", "bridge.js"] diff --git a/surfsense_backend/scripts/whatsapp-bridge/bridge.js b/surfsense_backend/scripts/whatsapp-bridge/bridge.js index 5cef6b980..84b28030b 100644 --- a/surfsense_backend/scripts/whatsapp-bridge/bridge.js +++ b/surfsense_backend/scripts/whatsapp-bridge/bridge.js @@ -13,7 +13,7 @@ import path from "node:path"; import pino from "pino"; import qrcode from "qrcode-terminal"; -const PORT = Number(process.env.PORT || "3000"); +const PORT = Number(process.env.PORT || "9929"); const SESSION_DIR = process.env.WHATSAPP_SESSION_DIR || "/data/sessions"; const SEND_TIMEOUT_MS = Number(process.env.WHATSAPP_SEND_TIMEOUT_MS || "60000"); const MAX_QUEUE_SIZE = Number(process.env.WHATSAPP_MAX_QUEUE_SIZE || "100");