# Setup 05 — Despliegue de Agentes Este es el último paso. Asegúrate de haber completado los setups 01-04 antes de continuar. ## Prerequisitos Antes de empezar, debes tener: - ✅ GitHub PAT creado (`GITHUB_TOKEN` y `GITHUB_REPO`) - ✅ OpenWebUI funcionando (`OPENWEBUI_URL` y `OPENWEBUI_API_KEY`) - ✅ 9 Discord bot tokens (`DISCORD_TOKEN_*`) - ✅ 9 Discord channel IDs (`DISCORD_CHANNEL_*`) ## 1. Subir el código de agentes al VPS Desde tu máquina local: ```bash # Opción A: rsync (recomendado) rsync -avz --exclude '.env' agents/ root@:/opt/agents/ # Opción B: desde el VPS, clonar el repo directamente ssh root@ git clone https://github.com/TU_USUARIO/carlospalanca.es.git /tmp/repo cp -r /tmp/repo/agents /opt/agents ``` ## 2. Crear el archivo `.env` en el VPS ```bash ssh root@ cp /opt/agents/.env.example /opt/agents/.env nano /opt/agents/.env ``` Rellena TODOS los valores. El archivo debe quedar así: ```bash # OpenWebUI OPENWEBUI_URL=https://ai.carlospalanca.es OPENWEBUI_API_KEY=sk-... # Del paso 03 OPENWEBUI_MODEL=gpt-4o # O: claude-3-5-sonnet-20241022 # GitHub GITHUB_TOKEN=github_pat_... # Del paso 01 GITHUB_REPO=TU_USUARIO/carlospalanca.es # Discord bot tokens (del paso 04) DISCORD_TOKEN_TYRION=... DISCORD_TOKEN_VARYS=... DISCORD_TOKEN_SAMWELL=... DISCORD_TOKEN_BRONN=... DISCORD_TOKEN_BRAN=... DISCORD_TOKEN_DAVOS=... DISCORD_TOKEN_ARYA=... DISCORD_TOKEN_DAENERYS=... DISCORD_TOKEN_JON=... # Discord channel IDs (del paso 04) DISCORD_CHANNEL_TRONO=... DISCORD_CHANNEL_VARYS=... DISCORD_CHANNEL_SAMWELL=... DISCORD_CHANNEL_BRONN=... DISCORD_CHANNEL_BRAN=... DISCORD_CHANNEL_DAVOS=... DISCORD_CHANNEL_ARYA=... DISCORD_CHANNEL_DAENERYS=... DISCORD_CHANNEL_JON=... ``` ## 3. Construir y levantar los agentes ```bash cd /opt/agents # Construir las imágenes (la primera vez tarda 2-5 minutos) docker compose build # Levantar todos los bots docker compose up -d # Verificar que todos están corriendo docker compose ps ``` Deberías ver los 9 servicios con estado `running`. ## 4. Verificar logs de cada agente ```bash # Ver logs de Tyrion docker compose logs -f tyrion # Ver logs de todos docker compose logs -f ``` Deberías ver para cada bot: ``` [TYRION] Conectado como Tyrion Lannister#1234 [SAMWELL] Conectado como Samwell Tarly#5678 ... ``` ## 5. Verificar en Discord En tu servidor Discord, los 9 bots deberían aparecer ahora como **online** (punto verde). ## 6. Test del flujo completo ### Test 1: Tyrion responde Escribe en `#el-trono-de-hierro`: ``` Tyrion, ¿estás ahí? ``` Tyrion debería responder en el canal. ### Test 2: Enrutamiento a Varys Escribe en `#el-trono-de-hierro`: ``` Tyrion, necesito los mejores títulos para un vídeo sobre Docker Compose ``` Deberías ver: 1. Tyrion responde en `#el-trono-de-hierro` confirmando que delega a Varys 2. En `#el-pajarillo` aparece el mensaje con la tarea 3. Varys procesa y responde con los títulos ### Test 3: Samwell crea un PR Escribe en `#el-trono-de-hierro`: ``` Tyrion, pide a Samwell que cree un artículo de blog corto sobre qué es un contenedor Docker ``` Deberías ver: 1. Tyrion delega a Samwell 2. Samwell genera el artículo y crea un PR en GitHub 3. Samwell responde en `#la-ciudadela` con la URL del PR 4. En GitHub aparece el PR con etiquetas `agent-created` y `needs-review` 5. El workflow CI comenta en el PR si el build pasa ## 7. Comandos útiles de mantenimiento ```bash cd /opt/agents # Reiniciar un agente específico docker compose restart tyrion # Reiniciar todos docker compose restart # Ver logs en tiempo real de un agente docker compose logs -f samwell # Parar todos los agentes docker compose stop # Actualizar después de cambios en el código git pull # En el repo clonado, o rsync de nuevo docker compose build docker compose up -d # Ver uso de recursos docker stats ``` ## 8. Actualizar los system prompts sin rebuilder Los `prompt.txt` se leen en el arranque del bot. Para actualizar un prompt: ```bash # Editar el prompt nano /opt/agents/samwell/prompt.txt # Reiniciar solo ese bot (sin rebuild) docker compose restart samwell ``` ## Troubleshooting **El bot no responde en Discord:** ```bash docker compose logs tyrion # Busca errores de autenticación Discord (token incorrecto) # o errores de conexión a OpenWebUI ``` **Error "Message Content Intent not enabled":** → Ve a Discord Developer Portal → la app del bot → Bot → activa "Message Content Intent" → Reinicia: `docker compose restart ` **Error "401 Unauthorized" al llamar OpenWebUI:** → Verifica que `OPENWEBUI_API_KEY` en `.env` es correcto → Verifica que `OPENWEBUI_URL` no tiene barra al final **Samwell no crea el PR:** → Verifica `GITHUB_TOKEN` y `GITHUB_REPO` en `.env` → Verifica que el token tiene permisos `Contents: Write` y `Pull requests: Write` → Verifica que el repositorio existe y tiene rama `main` ## Checklist - [ ] Código de agentes subido a `/opt/agents/` en el VPS - [ ] `.env` creado con todos los tokens y channel IDs - [ ] `docker compose build` completado sin errores - [ ] `docker compose up -d` ejecutado - [ ] Los 9 servicios aparecen como `running` en `docker compose ps` - [ ] Los 9 bots aparecen online en Discord - [ ] Test 1: Tyrion responde en `#el-trono-de-hierro` - [ ] Test 2: Tyrion enruta a Varys - [ ] Test 3: Samwell crea un PR en GitHub - [ ] CI workflow comenta en el PR