Saltar a contenido

Odysseus

Workspace AI self-hosted. Chat con LLMs, agentes con herramientas, deep research, comparación de modelos, documentos, notas/tareas, calendario, email, memoria persistente. FastAPI + ChromaDB + SearXNG + ntfy. RAM ~1.5-2GB. http://localhost:7000

Rutas y configs

Qué Dónde
Compose /opt/docker/odyssey/compose.yaml
Variables de entorno /opt/docker/odyssey/.env
Datos (DB, uploads, memory) /opt/docker/odyssey/data
Cache de modelos HF /opt/docker/odyssey/data/huggingface
Paquetes Python (Cookbook) /opt/docker/odyssey/data/local
SSH keys (Cookbook remote) /opt/docker/odyssey/data/ssh
Logs /opt/docker/odyssey/logs
Config SearXNG /opt/docker/odyssey/config/searxng/settings.yml

Contenedores: odyssey-odysseus-1, odyssey-chromadb-1, odyssey-searxng-1, odyssey-ntfy-1 Puerto: 7000 (solo Odysseus UI expuesto al host) Subdominio: odyssey.matias7235.com.ar

Servicios bundled (red interna, sin port mapping al host)

Servicio Interno Uso
ChromaDB chromadb:8000 Vector store para memoria y embeddings
SearXNG searxng:8080 Web search para chat y deep research
ntfy ntfy:80 Push notifications para notas/tareas

Comandos útiles

# Ver logs
docker compose -f /opt/docker/odyssey/compose.yaml logs -f odysseus
docker compose -f /opt/docker/odyssey/compose.yaml logs -f chromadb

# Reiniciar
docker compose -f /opt/docker/odyssey/compose.yaml restart odysseus

# Recrear todo el stack
cd /opt/docker/odyssey && docker compose down && docker compose up -d

# Verificar containers activos
docker compose -f /opt/docker/odyssey/compose.yaml ps

# Contraseña temporal del admin (primer boot)
docker compose -f /opt/docker/odyssey/compose.yaml logs odysseus | grep -i password

# Pull + rebuild + up (actualizar)
cd /opt/docker/odyssey && docker compose pull && docker compose up -d --build

Primer setup

  1. Levantar el stack: docker compose up -d --build
  2. Ver la contraseña temporal: docker compose logs odysseus | grep -i password
  3. Entrar a odyssey.matias7235.com.ar, loguearse con admin y la contraseña temporal
  4. Cambiar contraseña en Settings dentro de la app
  5. Configurar modelos LLM en Settings (Ollama, OpenAI, OpenRouter, etc.)

Variables de entorno (.env)

APP_BIND=127.0.0.1
APP_PORT=7000
AUTH_ENABLED=true
PUID=1000
PGID=1000

Opcionales (agregar según necesidad):

OPENAI_API_KEY=sk-...
OLLAMA_BASE_URL=http://host.docker.internal:11434/v1
HF_TOKEN=hf_...

Features principales

  • Chat: conversar con cualquier modelo local o API (vLLM, llama.cpp, Ollama, OpenRouter, OpenAI)
  • Agent: hand tools y deja que resuelva solo (MCP, web, files, shell, skills, memoria)
  • Cookbook: escanea hardware, recomienda modelos, descarga y sirve con un click
  • Deep Research: recopila, lee y sintetiza fuentes en un reporte visual
  • Compare: comparar modelos lado a lado, blind test sin bias
  • Documents: editor multi-tab con asistencia de AI
  • Memory/Skills: memoria persistente con ChromaDB, el agente evoluciona
  • Email: IMAP/SMTP con triage de AI (urgencia, auto-tag, auto-reply)
  • Notes & Tasks: notas con reminders, todo list, cron tasks
  • Calendar: CalDAV sync (Radicale, Nextcloud, Apple)
  • Mobile: PWA, responsive, touch gestures

GPU

El compose viene configurado para CPU. Si se quiere GPU:

# NVIDIA
echo 'COMPOSE_FILE=docker-compose.yml:docker/gpu.nvidia.yml' >> /opt/docker/odyssey/.env

# AMD ROCm
echo 'COMPOSE_FILE=docker-compose.yml:docker/gpu.amd.yml' >> /opt/docker/odyssey/.env
echo 'RENDER_GID=992' >> /opt/docker/odyssey/.env

La Vega 7 del Ryzen 5 4600G no es compatible con CUDA. ROCm podría funcionar pero con limitaciones. Para uso local, Ollama con CPU es la opción más simple.

Notas de seguridad

  • AUTH_ENABLED=true siempre — Odysseus tiene shell access, file uploads, API tokens
  • Acceso solo vía Caddy HTTPS (no exponer directo a internet)
  • Revisar data/auth.json después del primer boot: deshabilitar signup abierto, solo admin propio
  • Usuarios non-admin no tienen shell/Python/file read/write por defecto
  • Si se habilitan API tokens o webhooks, crear tokens separados por integración