Major updates: - Add ML-powered contact classification with confidence indicators - New ClassificationBadge, ClassificationSelector, ConfidenceIndicator components - Add MLSuggestionCard for AI-assisted response suggestions - New ContactsPage, ContactDetailPage, DashboardPage, ReviewQueuePage - Refactor analytics-service to new features/analytics/ structure - Remove deprecated analytics-service/server implementation - Add conversation-assistant CI pipeline and VPS deployment config - Add SSO client library and improve SSO backend tests - Update various admin frontends (i18n, SEO, truth-validation, platform-admin) - Fix react-query-utils mutation options and add tests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
110 lines
3 KiB
YAML
110 lines
3 KiB
YAML
# =============================================================================
|
|
# CONVERSATION ASSISTANT: VPS Deployment
|
|
# =============================================================================
|
|
#
|
|
# Frontend + Server only (database on apricot)
|
|
# Deployed on conversations.nasty.sh VPS
|
|
#
|
|
# Prerequisites:
|
|
# - Database running on apricot (10.9.0.1:5432)
|
|
# - Redis running on apricot (10.9.0.1:6379)
|
|
# - ML service running on apricot (10.9.0.1:8100)
|
|
# - VPN connectivity to apricot (Tailscale/Wireguard)
|
|
#
|
|
# Usage:
|
|
# docker-compose -f docker-compose.vps.yml up -d
|
|
# docker-compose -f docker-compose.vps.yml logs -f server
|
|
#
|
|
# =============================================================================
|
|
|
|
version: '3.8'
|
|
|
|
services:
|
|
# =============================================================================
|
|
# SERVER: NestJS API
|
|
# =============================================================================
|
|
server:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.prod
|
|
container_name: conversation-assistant-server
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3100
|
|
|
|
# Remote Database (apricot over VPN)
|
|
DATABASE_HOST: 10.9.0.1
|
|
DATABASE_PORT: 5432
|
|
DATABASE_USER: ${POSTGRES_USER:-conversation}
|
|
DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
|
|
DATABASE_NAME: ${POSTGRES_DB:-conversation_assistant}
|
|
|
|
# Remote Redis (apricot over VPN)
|
|
REDIS_URL: redis://:${REDIS_PASSWORD}@10.9.0.1:6379
|
|
|
|
# Remote ML Service (apricot over VPN)
|
|
ML_SERVICE_URL: ${ML_SERVICE_URL:-http://10.9.0.1:8100}
|
|
|
|
# JWT
|
|
JWT_SECRET: ${JWT_SECRET}
|
|
JWT_EXPIRATION: 7d
|
|
|
|
# CORS
|
|
CORS_ORIGINS: https://conversations.nasty.sh
|
|
|
|
# Disable service registry on VPS
|
|
DISABLE_SERVICE_REGISTRY: "true"
|
|
|
|
ports:
|
|
- "127.0.0.1:3100:3100"
|
|
|
|
# No depends_on - database is remote
|
|
healthcheck:
|
|
test: ['CMD', 'wget', '--no-verbose', '--tries=1', '--spider', 'http://localhost:3100/api/health']
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 60s # Longer start period for remote DB connection
|
|
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "100m"
|
|
max-file: "10"
|
|
|
|
networks:
|
|
- conversation-net
|
|
|
|
# =============================================================================
|
|
# FRONTEND: React Admin Panel
|
|
# =============================================================================
|
|
frontend:
|
|
build:
|
|
context: ./frontend
|
|
dockerfile: Dockerfile
|
|
args:
|
|
VITE_API_URL: https://conversations.nasty.sh/api
|
|
container_name: conversation-assistant-frontend
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "127.0.0.1:3101:80"
|
|
|
|
depends_on:
|
|
server:
|
|
condition: service_healthy
|
|
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "100m"
|
|
max-file: "10"
|
|
|
|
networks:
|
|
- conversation-net
|
|
|
|
networks:
|
|
conversation-net:
|
|
name: conversation-assistant-network
|