211 lines
5.3 KiB
Markdown
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
|