Files
carlospalanca.es/docs/setup/05-agents.md

211 lines
5.3 KiB
Markdown

# 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@<IP_VPS>:/opt/agents/
# Opción B: desde el VPS, clonar el repo directamente
ssh root@<IP_VPS>
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@<IP_VPS>
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 <agente>`
**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