Docker Services
All services are defined in docker-compose.yml and run on the app-network bridge network.
Backend Services
backend-streamsearch
| Item |
Value |
| Port |
7201 |
| Public URL |
streamsearch.zygy.com (IP-restricted) |
| Purpose |
Main search and RAG service. Handles natural language queries, intent detection, knowledge base search, chart generation, and SSE streaming responses |
| Stack |
Python, Flask, OpenAI API, Elasticsearch |
| Key file |
backend-streamsearch/app.py (~3470 lines) |
| Data mount |
/mnt/blockstorage/zygy-data → /app/data |
Critical environment variables: OPENAI_API_KEY, OPENAI_API_BASE, MODEL_NAME, EMBEDDING_SERVICE_URL, MONGO_URI, API_KEYS
backend-vectorindexing
| Item |
Value |
| Port |
7202 |
| Public URL |
vectorindexing.zygy.com (IP-restricted) |
| Purpose |
Document ingestion. Processes PDF, DOCX, XLSX files; generates vector embeddings; indexes to Elasticsearch |
| Stack |
Python, Flask, Elasticsearch, Redis |
| Key file |
backend-vectorindexing/app.py |
| Data mount |
/mnt/blockstorage/zygy-data → /app/data |
backend-generatereport
| Item |
Value |
| Port |
7203 |
| Public URL |
generatereport.zygy.com (IP-restricted) |
| Purpose |
Automated report generation from 10 built-in templates (meeting minutes, KPI, sales, financial, etc.) using LLM |
| Stack |
Python, Flask, OpenAI API |
| Key file |
backend-generatereport/reporttemplate.py |
| Data mount |
/mnt/blockstorage/zygy-data → /app/data |
Available templates: meeting report, staff HR KPI, sales account planning, product requirement, marketing plan, customer review, annual statement, invoice, budget proposal, financial management.
backend-ragevaluation
| Item |
Value |
| Port |
7204 (internal) → 80 (via Caddy) |
| Public URL |
eval.zygy.com |
| Purpose |
RAG system evaluation dashboard. Manage test sets, run evaluations, view performance metrics |
| Stack |
Python, FastAPI, SQLite (rag_evaluation.db) |
| Health check |
GET /health |
| Data mount |
/mnt/blockstorage/zygy-data → /app/data |
backend-dailysummary
| Item |
Value |
| Port |
7205 (internal) → 80 (via Caddy) |
| Public URL |
daily.zygy.com |
| Purpose |
Generates and emails daily summaries on a schedule |
| Schedule |
8 AM Asia/Kuala_Lumpur (SUMMARY_SCHEDULE_HOUR=8) |
| SMTP |
smtppro13.mschosting.com:465 (Exabytes) |
| Health check |
GET /health |
backend-workflow
| Item |
Value |
| Port |
7206 |
| Public URL |
workflow.zygy.com/api/* |
| Purpose |
Workflow orchestration engine. Handles workflow definitions, execution, and the builder API |
| Stack |
Python |
| Dependencies |
Redis, mongo-tunnel (MongoDB), backend-accounts, backend-agent |
| Health check |
curl /health |
| Metrics |
Prometheus scrapes /metrics endpoint |
backend-accounts
| Item |
Value |
| Port |
7207 |
| Purpose |
Account management and authentication |
| Health check |
wget /health |
backend-agent
| Item |
Value |
| Port |
7208 |
| Purpose |
Autonomous AI agent with web search capabilities |
| Health check |
curl /health |
backend-taxonomyanalyze
| Item |
Value |
| Port |
7209 |
| Public URL |
taxonomyanalyze.zygy.com |
| Purpose |
Taxonomy analysis service |
backend-pageindex
| Item |
Value |
| Port |
7210 |
| Public URL |
pageindex.zygy.com (IP-restricted) |
| Purpose |
Page and document indexing service |
| Health check |
GET /health |
backend-mcpserver
| Item |
Value |
| Port |
8000 |
| Purpose |
Model Context Protocol (MCP) server for SQL queries over the SQLite database. Used by backend-streamsearch for CSV/data queries |
| Stack |
Python, FastMCP, SQLite |
| Data mount |
/mnt/blockstorage/zygy-data → /app/data |
There is also a separate backend-mcpserver-generatereport instance for the report generation service.
Frontend Services
frontend-workflow
| Item |
Value |
| Port |
3001 (internal) → 80 (container) |
| Public URL |
workflow.zygy.com (non-API routes) |
| Purpose |
Main workflow builder UI |
| Stack |
Node.js, Vite |
| Build arg |
VITE_API_KEY — passed at build time from API_KEYS env var |
frontend-kanban
| Item |
Value |
| Port |
3003 |
| Purpose |
Kanban board UI |
Infrastructure Services
redis
| Item |
Value |
| Port |
6379 (internal only) |
| Image |
redis:7-alpine |
| Purpose |
Caching and session management |
| Config |
maxmemory 256mb, maxmemory-policy allkeys-lru |
| Auth |
Password from REDIS_PASSWORD env var |
| Health check |
redis-cli ping every 5 seconds |
mongo-tunnel
| Item |
Value |
| Port |
27017 (internal only) |
| Purpose |
SSH reverse tunnel that forwards mongo-tunnel:27017 → 103.3.62.250:9823 (MongoDB server) |
| SSH key |
/home/zygy/.ssh/id_ed25519 (mounted read-only into container) |
See Mongo Tunnel for full details.
Monitoring Stack
caddy
| Item |
Value |
| Ports |
80, 443 |
| Purpose |
TLS-terminating reverse proxy. Routes all public traffic. Auto-renews Let's Encrypt certificates |
| Config |
caddy/Caddyfile |
| Data volume |
caddy_data (holds TLS certificates — do not delete) |
prometheus
| Item |
Value |
| Port |
9090 (internal) |
| Purpose |
Metrics collection |
| Scrape targets |
cadvisor, node-exporter, backend-workflow |
| Retention |
7 days / 512 MB |
| Config |
monitoring/prometheus.yml |
grafana
| Item |
Value |
| Port |
3000 (internal) |
| Public URL |
grafana.zygy.com |
| Default creds |
admin / admin (change immediately) |
| Purpose |
Dashboards for metrics (Prometheus) and logs (Loki) |
loki
| Item |
Value |
| Port |
3100 (internal) |
| Purpose |
Log aggregation backend |
| Config |
monitoring/loki.yml |
promtail
| Item |
Value |
| Purpose |
Ships Docker container logs to Loki |
| Config |
monitoring/promtail.yml |
cadvisor
| Item |
Value |
| Purpose |
Exports per-container resource metrics to Prometheus |
node-exporter
| Item |
Value |
| Port |
9100 |
| Purpose |
Exports host-level system metrics (CPU, memory, disk) to Prometheus |
SQLite Backup Service
| Item |
Value |
| Image |
Custom (scripts/Dockerfile.backup) |
| Purpose |
Runs scheduled SQLite backups and uploads to Linode Object Storage |
| Schedule |
2 AM daily (Asia/Kuala_Lumpur) |
| Scripts |
scripts/backup-cron.sh → scripts/sqlite-backup.sh |
See Scheduled Tasks for full details.
Domain → Service Routing Summary
grafana.zygy.com → grafana:3000
eval.zygy.com → backend-ragevaluation:80
daily.zygy.com → backend-dailysummary:80
workflow.zygy.com /api/* → backend-workflow:7206
workflow.zygy.com /* → frontend-workflow:80
taxonomyanalyze.zygy.com → backend-taxonomyanalyze:7209
# IP-restricted (103.3.62.250 and 115.135.30.38 only):
streamsearch.zygy.com → backend-streamsearch:7201
vectorindexing.zygy.com → backend-vectorindexing:7202
generatereport.zygy.com → backend-generatereport:7203
pageindex.zygy.com → backend-pageindex:7210