Files

3.8 KiB

Deploying to AWS

Target: ubuntu@52.66.12.133, Ubuntu 24.04, Docker 29.7.2 / Compose v5.4.0.

The service runs alongside the existing CRM stack, attaching to its network so it can reach redis and whatsapp-api by name. It does not modify the CRM.

Do not clone into /opt/wele/whatsapp-crm. That directory is the live CRM's own git repo — cloning over it would destroy the running deployment. This project gets its own directory next to it.

What is not deployed

voice-service/ stays off this host. It needs a CUDA GPU and ~5 GB of RAM; the instance has no GPU, 2 vCPU and 3.7 GB total (~2.3 GB free with the CRM running). Attempting it would OOM the box and take the CRM down with it.

Voice needs a GPU instance (e.g. g4dn.xlarge) before it can be deployed.

First deploy

ssh -i wele-product-aws.pem ubuntu@52.66.12.133

sudo mkdir -p /opt/wele/agentic-ai && sudo chown ubuntu:ubuntu /opt/wele/agentic-ai
git clone https://gitea.wele.in/Thulasiraman/Agentic-AI.git /opt/wele/agentic-ai
cd /opt/wele/agentic-ai

cp .env.example .env
nano .env          # fill in the values in the table below

sudo docker compose up --build -d
sudo docker compose logs -f agentic-ai

Required in .env

Variable Value
MONGODB_URI same connection string the CRM uses
CRM_JWT_SECRET must equal the CRM's JWT_SECRET, or every login is rejected here
GMI_API_KEY GMI Cloud key
OPENROUTER_API_KEY OpenRouter key (failover)
PUBLIC_BASE_URL https://crm.wele.in — used in artifact download links

REDIS_* and CRM_API_BASE are set by compose and should be left alone.

Compose fails fast with a named error if MONGODB_URI or CRM_JWT_SECRET is missing, rather than starting a container that cannot authenticate anyone.

Updating

cd /opt/wele/agentic-ai
git pull origin main
sudo docker compose up --build -d

Verify

curl -s localhost:4000/health | jq

Expect mongo: connected, redis: redis, crm_api: reachable, and the model chains. redis: memory means it fell back to an in-process store — check that the container really joined whatsapp-crm_default.

Frontend

The chat UI lives in the CRM repo (frontend/src/pages/AIAssistant.jsx), so it deploys with the CRM, not with this service. It needs to know where this service is:

# in the CRM repo, frontend/.env.production
VITE_AGENT_URL=https://crm.wele.in/agent

Then add a reverse-proxy rule so that path reaches port 4000. Nginx:

location /agent/ {
    proxy_pass http://127.0.0.1:4000/;
    proxy_http_version 1.1;

    # Required for SSE streaming and the voice WebSocket.
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host       $host;
    proxy_buffering off;
    proxy_read_timeout 300s;   # a turn can take 45s; the default 60s is too tight
}

proxy_buffering off matters — with it on, nginx holds the SSE stream and the UI shows nothing until the turn finishes, which looks like a hang.

Ports

Port Service Published
3000 CRM (wele-whatsapp-api) yes
4000 this service yes
4000 CRM chat-service no — container-internal only, so no clash
6379 Redis (shared) yes
19530 Milvus yes

Resource notes

The container is capped at 768 MB. On a 3.7 GB box already running the CRM, chat-service, Redis and Milvus, an uncapped Node process having a bad turn can starve the CRM. Raise it only if you see OOM kills:

sudo docker inspect wele-agentic-ai --format '{{.State.OOMKilled}}'

Rollback

cd /opt/wele/agentic-ai
git log --oneline -5
git checkout <previous-sha>
sudo docker compose up --build -d

The CRM is a separate stack and is unaffected by anything here.