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

5.3 KiB

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:

# 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

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í:

# 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

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

# 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

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:

# 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:

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