# Multi-Bot Docker Setup Summary ## ✅ Setup Complete ### Files Created 1. **Environment Files:** - `.env.shared` - Shared settings (providers, agents, tools, gateway) - `.env.user1` - Bot 1 specific settings (Telegram token, email credentials) - `.env.user2` - Bot 2 specific settings (placeholder) - `.env.user3` - Bot 3 specific settings (placeholder) 2. **Config Files:** - `~/.nanobot-user1/config.json` - Bot 1 channel config (allowFrom arrays) - `~/.nanobot-user2/config.json` - Bot 2 channel config (placeholder) - `~/.nanobot-user3/config.json` - Bot 3 channel config (placeholder) 3. **Docker Compose:** - `docker-compose.multi.env.yml` - Multi-bot Docker Compose configuration ## 🔍 How It Works ### Configuration Loading Order 1. **Docker Compose loads environment files:** - First: `.env.shared` (shared settings) - Second: `.env.user1` (bot-specific overrides) - Later files override earlier ones ✅ 2. **Container starts with volume mount:** - Host: `~/.nanobot-user1` - Container: `/root/.nanobot` - This maps your config directory into the container ✅ 3. **Nanobot loads configuration:** - **Environment variables**: Automatically loaded by Pydantic `BaseSettings` - Format: `NANOBOT_CHANNELS__TELEGRAM__TOKEN=...` - These come from Docker environment (loaded from `.env.shared` + `.env.user1`) - **Config file**: Loaded from `/root/.nanobot/config.json` - Inside container: `/root/.nanobot/config.json` - On host: `~/.nanobot-user1/config.json` (mounted) - Contains: `allowFrom` arrays (can't be in env vars) ### Important: Original Config is NOT Used **Your original config** (`~/.nanobot/config.json`) is **NOT** used by Docker containers. Each container uses: - Its own env files (`.env.shared` + `.env.userX`) - Its own config directory (`~/.nanobot-userX`) This means: - ✅ Original config stays untouched - ✅ Each bot has isolated configuration - ✅ No conflicts between bots ## 📋 Current Configuration ### Bot 1 (nanobot-user1) **Environment Variables** (from `.env.shared` + `.env.user1`): - Provider: Custom/Ollama (`http://localhost:11434/v1`) - Model: `llama3.1:8b` - Workspace: `/mnt/data/nanobot` - Telegram: Enabled with token - Email: Enabled with credentials **Config File** (`~/.nanobot-user1/config.json`): - Telegram `allowFrom`: `["TADec2023"]` - Email `allowFrom`: `["adayear2025@gmail.com"]` ## 🚀 Running the Bots ```bash # Build Docker image (first time) docker compose -f docker-compose.multi.env.yml build # Start all bots docker compose -f docker-compose.multi.env.yml up -d # View logs docker compose -f docker-compose.multi.env.yml logs -f # Stop all bots docker compose -f docker-compose.multi.env.yml down # Restart specific bot docker restart nanobot-user1 ``` ## ✅ Verification Checklist - [x] `.env.shared` created with shared settings - [x] `.env.user1` created with bot-specific settings - [x] `ALLOW_FROM` removed from env files (arrays belong in config.json) - [x] Config directories created (`~/.nanobot-user1`, etc.) - [x] Config files created with `allowFrom` arrays - [x] Docker Compose file configured correctly - [x] Volume mounts map host configs to container paths ## 🎯 Key Points 1. **Environment Variables** → For simple key-value settings (tokens, API keys, models) 2. **Config Files** → For complex settings (arrays like `allowFrom`) 3. **Docker Mounts** → Each container gets its own config directory 4. **Original Config** → Not used by Docker containers (stays safe) ## 📝 Next Steps 1. Update `.env.user2` and `.env.user3` with bot-specific settings 2. Update `~/.nanobot-user2/config.json` and `~/.nanobot-user3/config.json` with actual user IDs/emails 3. Run `docker compose -f docker-compose.multi.env.yml up -d` to start all bots 4. Check logs to verify each bot is using correct configuration