Cómo alojar Open Notebook: Docker, configuración de modelos y seguridad de datos

Aloja Open Notebook con Docker Compose, protege la clave de cifrado y las credenciales de la base de datos, configura modelos locales o en la nube y valida el despliegue con estados, registros y fuentes de prueba.

Open Notebook es una aplicación de código abierto para investigar y aprender a partir de fuentes. Puede importar PDF, páginas web, audio, vídeo y documentos de Office, y después ofrecer búsqueda, chat, organización de notas y generación de pódcast alrededor de esos materiales. A diferencia de un chat general, conserva las fuentes, citas, configuraciones de modelos y notas en tu propio espacio de trabajo.

El alojamiento propio no implica automáticamente un funcionamiento sin conexión. Si eliges OpenAI, Anthropic, Google u otro modelo en la nube, el contexto enviado al modelo sale de tu servidor. Para mantener el procesamiento local, tanto la aplicación como los modelos deben funcionar localmente.

Requisitos previos

El inicio rápido oficial requiere Docker Desktop. En un servidor Linux puedes usar Docker Engine y el complemento Compose. Comprueba primero:

1
2
docker --version
docker compose version

También debes preparar:

  • Un directorio persistente para la base de datos y los datos de la aplicación.
  • Un valor aleatorio para OPEN_NOTEBOOK_ENCRYPTION_KEY.
  • Dominio, HTTPS y control de acceso si se expondrá el servicio.
  • Credenciales para un modelo en la nube o un servicio Ollama/LM Studio accesible.

Descargar el Compose oficial

Utiliza un directorio independiente para no mezclar datos con otro proyecto:

1
2
3
mkdir open-notebook
cd open-notebook
curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

Evita copiar un Compose antiguo desde un blog. Las imágenes, los puertos y la configuración de la base de datos pueden cambiar; utiliza el archivo actual del repositorio oficial.

Ajustes obligatorios antes de arrancar

Configura la clave de cifrado en docker-compose.yml o en el .env asociado:

1
OPEN_NOTEBOOK_ENCRYPTION_KEY=sustituye-esto-por-una-cadena-aleatoria-larga

Esta clave protege las API Key almacenadas en la base de datos. No la cambies sin un plan después del despliegue, porque las credenciales guardadas podrían dejar de descifrarse.

El ejemplo local oficial permite usar root:root en SurrealDB, pero solo es apropiado para pruebas enlazadas a localhost. Para una instalación en red local o pública, define usuario y contraseña:

1
2
SURREAL_USER=open_notebook_user
SURREAL_PASSWORD=sustituye-esto-por-una-contrasena-aleatoria-larga

Mantén el puerto de depuración de la base de datos enlazado a 127.0.0.1:8000. No lo cambies a 0.0.0.0:8000 solo por comodidad.

Iniciar e inspeccionar los contenedores

1
2
docker compose up -d
docker compose ps

Cuando los contenedores estén listos, abre:

1
http://localhost:8502

El puerto 8502 corresponde a la interfaz web, 5055 a la API REST y 8000 a la depuración local de SurrealDB. docker compose ps debe mostrar en ejecución tanto la aplicación como la base de datos.

Si la página no abre, revisa primero los registros:

1
2
docker compose logs --tail=100 open_notebook
docker compose logs --tail=100 surrealdb

Configurar el primer modelo

En la interfaz web:

  1. Abre Models.
  2. Selecciona OpenAI, Anthropic, Google, Ollama, LM Studio u otro Provider compatible.
  3. Añade la API Key o la dirección del servicio local.
  4. Pulsa Test para verificar la conexión.
  5. Pulsa Sync Models y selecciona los modelos que utilizarás.
  6. En Default Model Assignments, asigna los modelos predeterminados automática o manualmente.

No todos los proveedores ofrecen a la vez LLM, embeddings, reconocimiento y síntesis de voz. Si el chat funciona pero falla la recuperación de fuentes, revisa el modelo de embeddings en lugar de cambiar repetidamente el modelo de chat.

Validar con un conjunto pequeño de fuentes

No importes todo tu archivo de inmediato. Crea un notebook de prueba y añade solo:

  1. Un PDF corto con texto seleccionable.
  2. Una página web pública.
  3. Una nota de prueba escrita manualmente.

Después verifica:

  • Las fuentes terminan de procesarse.
  • La búsqueda encuentra una frase distintiva del PDF.
  • Las respuestas muestran una fuente o cita.
  • Una nota nueva puede volver a abrirse.
  • Los materiales permanecen tras reiniciar los contenedores.

La última prueba confirma que directorios persistentes como surreal_data y notebook_data funcionan.

Problemas habituales

El puerto 8502 ya está ocupado

Cambia el puerto del host en Compose, por ejemplo:

1
2
ports:
  - "18502:8502"

Después abre http://localhost:18502. El puerto interno del contenedor sigue siendo 8502.

La base de datos se reinicia continuamente

Revisa primero los registros de SurrealDB. En Linux, las causas habituales son un directorio montado sin permiso de escritura o archivos de base de datos creados por una versión de imagen incompatible. Haz una copia del directorio antes de cambiar permisos y no elimines los datos persistentes como primera medida.

El test del modelo funciona, pero las preguntas fallan

Comprueba, en este orden, el LLM predeterminado, el modelo de embeddings y el estado de procesamiento de las fuentes. Para un servidor de modelos privado, confirma que el contenedor puede llegar al host. localhost dentro del contenedor hace referencia al propio contenedor, no necesariamente al equipo con Ollama o LM Studio.

Actualizaciones y copias de seguridad

Antes de actualizar, guarda una copia de Compose, .env, la base de datos y los datos de la aplicación. Después ejecuta:

1
2
3
docker compose pull
docker compose up -d
docker compose ps

No basta con copiar docker-compose.yml. Una recuperación necesita los datos persistentes, la clave de cifrado y las credenciales de la base de datos.

¿Open Notebook o NotebookLM?

NotebookLM es más sencillo si quieres un servicio alojado, no deseas mantener un servidor y aceptas el alojamiento de Google. Open Notebook encaja mejor si necesitas alojamiento propio, varios proveedores, una API REST, flujos personalizados o modelos locales. A cambio, debes gestionar actualizaciones, copias, acceso y coste de los modelos.

Referencias