name: lingxi-crossborder services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: ${LX_DB_USER:-lingxi} POSTGRES_PASSWORD: ${LX_DB_PASSWORD:?LX_DB_PASSWORD is required} POSTGRES_DB: ${LX_DB_NAME:-lingxi_crossborder} volumes: - lingxi_pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${LX_DB_USER:-lingxi} -d ${LX_DB_NAME:-lingxi_crossborder}"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped whatsapp-gateway: build: context: ./whatsapp-gateway args: DEBIAN_MIRROR: ${DEBIAN_MIRROR:-https://deb.debian.org/debian} DEBIAN_SECURITY_MIRROR: ${DEBIAN_SECURITY_MIRROR:-https://deb.debian.org/debian-security} environment: PORT: 3200 DATA_DIR: /data WHATSAPP_GATEWAY_TOKEN: ${WHATSAPP_GATEWAY_TOKEN:?WHATSAPP_GATEWAY_TOKEN is required} WHATSAPP_DEFAULT_PROXY_URL: ${WHATSAPP_DEFAULT_PROXY_URL:-} LOG_LEVEL: ${WHATSAPP_LOG_LEVEL:-info} volumes: - lingxi_whatsapp_data:/data dns: - 1.1.1.1 - 8.8.8.8 restart: unless-stopped api: build: context: ./server environment: PORT: 3100 DATABASE_URL: postgresql://${LX_DB_USER:-lingxi}:${LX_DB_PASSWORD}@postgres:5432/${LX_DB_NAME:-lingxi_crossborder} JWT_SECRET: ${LX_JWT_SECRET:?LX_JWT_SECRET is required} DEEPSEEK_BASE_URL: https://api.deepseek.com/anthropic DEEPSEEK_MODEL: ${DEEPSEEK_MODEL:-deepseek-v4-flash} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:?DEEPSEEK_API_KEY is required} TELEGRAM_GATEWAY_URL: ${TELEGRAM_GATEWAY_URL:-http://host.docker.internal:3000/api} TELEGRAM_GATEWAY_TOKEN: ${TELEGRAM_GATEWAY_TOKEN:?TELEGRAM_GATEWAY_TOKEN is required} TELEGRAM_GATEWAY_TENANT_ID: ${TELEGRAM_GATEWAY_TENANT_ID:?TELEGRAM_GATEWAY_TENANT_ID is required} TELEGRAM_GATEWAY_SERVICE_EMAIL: ${TELEGRAM_GATEWAY_SERVICE_EMAIL:?TELEGRAM_GATEWAY_SERVICE_EMAIL is required} TELEGRAM_GATEWAY_SERVICE_PASSWORD: ${TELEGRAM_GATEWAY_SERVICE_PASSWORD:?TELEGRAM_GATEWAY_SERVICE_PASSWORD is required} TELEGRAM_GATEWAY_ACCOUNT_ID: ${TELEGRAM_GATEWAY_ACCOUNT_ID:-} TELEGRAM_WEBHOOK_SECRET: ${TELEGRAM_WEBHOOK_SECRET:?TELEGRAM_WEBHOOK_SECRET is required} WHATSAPP_GATEWAY_URL: http://whatsapp-gateway:3200 WHATSAPP_GATEWAY_TOKEN: ${WHATSAPP_GATEWAY_TOKEN:?WHATSAPP_GATEWAY_TOKEN is required} WHATSAPP_WEBHOOK_SECRET: ${WHATSAPP_WEBHOOK_SECRET:?WHATSAPP_WEBHOOK_SECRET is required} WHATSAPP_WEBHOOK_BASE_URL: ${WHATSAPP_WEBHOOK_BASE_URL:-http://api:3100} PUBLIC_WEBHOOK_BASE_URL: ${PUBLIC_WEBHOOK_BASE_URL:-http://host.docker.internal:8088} APP_PUBLIC_URL: ${APP_PUBLIC_URL:-http://127.0.0.1:8088} SMTP_HOST: ${SMTP_HOST:-} SMTP_PORT: ${SMTP_PORT:-587} SMTP_SECURE: ${SMTP_SECURE:-false} SMTP_USER: ${SMTP_USER:-} SMTP_PASSWORD: ${SMTP_PASSWORD:-} SMTP_FROM: ${SMTP_FROM:-} EMAIL_CREDENTIAL_KEY: ${EMAIL_CREDENTIAL_KEY:-} EMAIL_POLL_MS: ${EMAIL_POLL_MS:-30000} STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-} STRIPE_PRICE_LITE: ${STRIPE_PRICE_LITE:-} STRIPE_PRICE_STANDARD: ${STRIPE_PRICE_STANDARD:-} STRIPE_PRICE_PRO: ${STRIPE_PRICE_PRO:-} STRIPE_PRICE_GROWTH: ${STRIPE_PRICE_GROWTH:-} extra_hosts: - "host.docker.internal:host-gateway" dns: - 1.1.1.1 - 8.8.8.8 depends_on: postgres: condition: service_healthy whatsapp-gateway: condition: service_healthy healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3100/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"] interval: 10s timeout: 5s retries: 10 start_period: 10s restart: unless-stopped web: build: context: . dockerfile: Dockerfile args: FFMPEG_BINARIES_URL: ${FFMPEG_BINARIES_URL:-https://github.com/eugeneware/ffmpeg-static/releases/download} ports: - "${LX_WEB_PORT:-8088}:80" depends_on: api: condition: service_healthy restart: unless-stopped volumes: lingxi_pgdata: lingxi_whatsapp_data: