Deployment
Quick Start
See README.md for the 3-tier installation overview. The interactive wizard (pnpm wizard) handles all configuration — API keys, interfaces, storage paths, and scheduler. It writes a chmod 0600 .env file and creates the required data directories.
Prerequisites
- Node.js 20+, pnpm 9+
- Docker and Docker Compose (for Docker deployments)
.envfile — generated bypnpm wizardor manually from.env.example
Docker Compose
- redis: Redis 7 for BullMQ job queue (optional — only started if EchOS depends on it)
- echos: The EchOS application (healthcheck: GET /health)
echos service has required: false on Redis, so EchOS starts cleanly when ENABLE_SCHEDULER=false.
Data is persisted via volume mounts to ./data/.
With nginx + Let’s Encrypt (HTTPS)
Manual Deployment
Troubleshooting
Module Not Found Errors
If you seeCannot find package '@echos/shared' or '@echos/plugin-youtube' or similar:
LanceDB Native Module Errors
If you seeCannot find module '@lancedb/lancedb-darwin-x64' or similar:
- Intel Macs: The project uses LanceDB 0.22.3 (configured in
packages/core/package.json) - ARM Macs/Linux: LanceDB should install the correct native binding automatically
- Force reinstall:
pnpm install --force
Telegram Bot Conflicts
Error:Conflict: terminated by other getUpdates request
This means another instance of your bot is already running. Only one instance can poll Telegram.
Solution:
VPS Deployment (Ubuntu/Debian)
One-liner install
systemd service (production)
SSH / VPS CLI Access
The daemon runs via systemd or Docker as normal. When you SSH in, run queries directly against the live data without interrupting the daemon:Oracle Cloud Deployment
- Syncs project files via rsync
- Installs dependencies on remote
- Builds the project
- Restarts via docker-compose
Important: Dev vs Production
Before starting locally, ensure your production deployment is stopped:Backup
Environment Variables
See.env.example for the full list. Required:
TELEGRAM_BOT_TOKEN- Get from @BotFather on TelegramALLOWED_USER_IDS- Comma-separated Telegram user IDs (get from @userinfobot)ANTHROPIC_API_KEY- Get from https://console.anthropic.com/
OPENAI_API_KEY- Required for embeddings and Whisper transcription
ENABLE_SCHEDULER- Set totrueto enable background jobs (default:false)DIGEST_SCHEDULE- Cron expression for AI daily digest (e.g.0 8 * * *for 8am daily)REMINDER_CHECK_SCHEDULE- Cron expression for due reminder checks (e.g.*/15 * * * *for every 15min)