Construyendo mi Jarvis doméstico con una RTX 3060 y Docker

Llevo un tiempo dándole vueltas a la idea de armar un Second Brain o un tipo de «Jarvis» personal. Tengo un computador libre en casa que quiero dejar dedicado al cien por ciento como servidor local para esto.

Mi idea es automatizar varias tareas diarias: descargar correos, eventos del calendario y el historial de WhatsApp una vez al día, guardar todo indexado localmente para consultarlo después con Claude y Obsidian, y pasar la información por un LLM para generar un resumen ejecutivo del día.

Torre de PC con tarjeta gráfica RTX 3060 en un escritorio con monitores mostrando software de IA y contenedores Docker.
Mi servidor local con una RTX 3060 listo para procesar mis datos.

Quería preguntar a quienes ya han avanzado en este camino qué setup tienen corriendo. La duda inicial es si una Raspberry Pi 3 alcanza o si realmente se necesita algo más potente.

El hardware: RTX 3060 vs. Raspberry Pi

La respuesta corta es que la Raspberry Pi 3 queda muy corta para este propósito. Una PC con una RTX 3060 (idealmente de 12 GB) está justo en el punto dulce para un «Jarvis doméstico» serio.

Mientras que una Pi 3 se quedaría respirando por la herida al intentar meter embeddings, OCR o modelos locales, la 3060 permite correr modelos de 7B cómodamente, manejar pipelines automáticos y hasta algo multimodal si optimizas bien. Es el hardware ideal para este tipo de automatización.

El stack tecnológico: Docker Compose

Dado que los stacks tecnológicos cambian tan rápido, decidí ir con una arquitectura modular usando contenedores Docker. Esto evita el clásico infierno de dependencias incompatibles y mantiene todo encapsulado.

La arquitectura se divide en varias capas:

  • Ingestión de datos: Uso herramientas como n8n para automatizaciones, scripts Python + cron para tareas específicas, y APIs no oficiales tipo Baileys para WhatsApp (aunque Meta sigue rompiendo cosas).
  • Almacenamiento: PostgreSQL con la extensión pgvector para la memoria y búsqueda RAG, junto a archivos Markdown locales.
  • Embeddings y Búsqueda: Uso modelos pequeños como bge-small o nomic-embed que corren perfecto incluso en CPU, combinados con búsquedas híbridas de semántica y palabras clave.
  • El LLM: Para el resumen diario y la organización, he optado por Qwen 3 8B cuantizado (Q4_K_M), que es muy capaz para estas tareas sin ser un monstruo.

Aquí está el código base del docker-compose.yml que estoy usando actualmente:

version: "3.9"
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - OLLAMA_KEEP_ALIVE=24h
    volumes:
      - ./data/ollama:/root/.ollama
    ports:
      - "11434:11434"

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_SECRET_KEY=change_this
    volumes:
      - ./data/openwebui:/app/backend/data
    ports:
      - "3000:8080"

  postgres:
    image: pgvector/pgvector:pg16
    container_name: postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: ai
      POSTGRES_PASSWORD: ai_password
      POSTGRES_DB: secondbrain
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    image: redis:7-alpine
    container_name: redis
    restart: unless-stopped
    volumes:
      - ./data/redis:/data
    ports:
      - "6379:6379"

  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=secondbrain
      - DB_POSTGRESDB_USER=ai
      - DB_POSTGRESDB_PASSWORD=ai_password
    volumes:
      - ./data/n8n:/home/node/.n8n
    ports:
      - "5678:5678"

Con este stack, puedo abrir Open WebUI para interactuar con el sistema y usar n8n como mi centro de automatización. Lo más importante es que todo corre encapsulado en contenedores, lo cual cambia muchísimo la calidad de vida comparado con intentar mantener múltiples venvs incompatibles.

Esquema técnico mostrando cómo se conectan los contenedores Docker entre sí en una red doméstica.
Diagrama simplificado del stack tecnológico Docker para el servidor.

¿Por qué no hay un «Plex» para Second Brains?

A pesar de tener el stack técnico listo, me pregunto por qué parece que nadie ha lanzado un producto masivo como este todavía. No es por falta de tecnología.

La razón principal es que la integración real sigue siendo extremadamente difícil. Mientras que la parte del LLM se ha vuelto accesible y barata, conectar las APIs de Gmail, WhatsApp, los calendarios y los documentos PDF sigue siendo un infierno de permisos, autenticación y formatos inconsistentes.

Además, el mercado quedó atrapado entre dos mundos: las startups que prefirieron ir por la vía fácil del SaaS en la nube, y el mundo self-hosted, que atrae a usuarios muy técnicos con expectativas absurdas. Solo ahora, con el hardware local suficientemente bueno (como esta RTX 3060), estamos viendo el momento equivalente al lanzamiento de los primeros servidores multimedia como Plex.

En conclusión, aunque construir mi propio Jarvis doméstico sigue siendo un desafío técnico y de integración, la arquitectura modular que he armado me permite tener una memoria digital privada, local y escalable. Lo difícil ahora no es el código, sino hacer que alguien no técnico sienta que este sistema entiende su vida digital sin volverse una molestia.