--- title: "Cómo instalar el servidor Trilium Notes en Ubuntu 24.04" description: "Despliega el servidor de Trilium Notes con Docker Compose en Ubuntu 24.04, publícalo con Nginx y HTTPS, sincroniza la app de escritorio y configura las copias." category: "Productividad Self-Hosted" language: es source: https://cubepath.com/es/docs/productividad-self-hosted/instalacion-de-trilium-notes updated: 2026-09-25 --- # Cómo instalar el servidor Trilium Notes en Ubuntu 24.04 Trilium Notes es una aplicación de notas jerárquica pensada para construir una base de conocimiento personal: organiza las notas en un árbol sin límite de profundidad, permite clonar una nota en varias ramas, incluye editor de texto enriquecido, notas de código, mapas mentales y scripts en JavaScript. El proyecto lo mantiene hoy la comunidad TriliumNext. En este tutorial desplegarás el servidor de Trilium con Docker Compose en Ubuntu 24.04, lo publicarás en tu dominio con Nginx y HTTPS, sincronizarás la aplicación de escritorio y revisarás cómo funcionan las copias de seguridad. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM. - Un usuario no root con privilegios `sudo`. - Docker Engine y el plugin Docker Compose instalados desde el repositorio oficial de Docker. - Un subdominio (en esta guía, `notas.tu_dominio`) con un registro DNS A que apunte a la IP pública del servidor. - UFW activo con SSH permitido. ## Paso 1: Crear el directorio del proyecto Crea un directorio para el archivo de Compose y otro para los datos. En `data` vivirán la base de datos SQLite (`document.db`), el archivo `config.ini`, los registros y las copias automáticas: ```bash mkdir -p ~/trilium/data cd ~/trilium ``` ## Paso 2: Escribir el archivo de Docker Compose Crea el archivo `compose.yaml`: ```bash nano ~/trilium/compose.yaml ``` ```yaml services: trilium: image: triliumnext/trilium:latest container_name: trilium restart: unless-stopped ports: - "127.0.0.1:8080:8080" volumes: - ./data:/home/node/trilium-data environment: - TZ=Europe/Madrid ``` Puntos a tener en cuenta: - `triliumnext/trilium` es la imagen actual del proyecto. Las guías antiguas usan `zadam/trilium` (el proyecto original, ya sin mantenimiento) o `triliumnext/notes`, el nombre anterior de la imagen de TriliumNext. - `/home/node/trilium-data` es el directorio de datos dentro del contenedor. - El puerto se publica solo en `127.0.0.1`. Docker se salta las reglas de UFW, así que publicar `8080:8080` dejaría Trilium accesible por HTTP sin cifrar desde Internet. El acceso externo irá por Nginx. > Nota: si tienes una base de datos de Trilium antigua, no la abras con una versión más reciente sin hacer antes una copia. Trilium migra el esquema al arrancar y no permite volver atrás. ## Paso 3: Arrancar el contenedor Inicia Trilium: ```bash docker compose up -d ``` Comprueba el estado del contenedor: ```bash docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}" ``` ```output NAME STATUS PORTS trilium Up 30 seconds 127.0.0.1:8080->8080/tcp ``` Verifica que responde en local: ```bash curl -sI http://127.0.0.1:8080 | head -n 1 ``` Deberías obtener una línea `HTTP/1.1 200 OK` o una redirección `302` hacia la página de configuración inicial. Si no hay respuesta, revisa los registros con `docker compose logs trilium`. ## Paso 4: Publicar Trilium con Nginx y HTTPS Instala Nginx y Certbot: ```bash sudo apt update sudo apt install nginx certbot python3-certbot-nginx ``` Crea el bloque de servidor: ```bash sudo nano /etc/nginx/sites-available/trilium ``` ```nginx server { listen 80; listen [::]:80; server_name notas.tu_dominio; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 300s; } } ``` Trilium usa WebSocket para enviar los cambios al navegador y a los clientes sincronizados, por eso son necesarias las cabeceras `Upgrade` y `Connection`. `client_max_body_size` permite subir adjuntos e importaciones grandes; el valor por defecto de Nginx (1 MB) haría fallar la importación de un ZIP de notas. Activa el sitio y recarga Nginx: ```bash sudo ln -s /etc/nginx/sites-available/trilium /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` Abre los puertos web y solicita el certificado. Certbot añade la configuración TLS y la redirección a HTTPS: ```bash sudo ufw allow 'Nginx Full' sudo certbot --nginx -d notas.tu_dominio ``` ```output Congratulations! You have successfully enabled HTTPS on https://notas.tu_dominio ``` ## Paso 5: Completar la configuración inicial Abre `https://notas.tu_dominio`. En el primer acceso Trilium pregunta cómo quieres empezar: 1. Elige la opción de nuevo usuario para crear un documento vacío. La opción de sincronizar desde otra instancia sirve para cuando ya tienes una base de datos en un escritorio o en otro servidor y quieres copiarla aquí. 2. Define la contraseña. Protege el acceso web, la sincronización y el cifrado de las notas protegidas, así que usa una contraseña robusta. 3. Inicia sesión. Trilium es de un solo usuario: una instancia equivale a una base de conocimiento. Si varias personas necesitan notas propias, despliega una instancia por persona con su propio directorio de datos y puerto. Los ajustes del servidor se guardan en `~/trilium/data/config.ini`. Consúltalo para ver el puerto y otras opciones de red: ```bash cat ~/trilium/data/config.ini ``` Si cambias este archivo, reinicia el contenedor con `docker compose restart` para aplicar los cambios. ## Paso 6: Sincronizar la aplicación de escritorio La aplicación de escritorio de Trilium (Linux, Windows y macOS) guarda una copia completa de las notas en local y se sincroniza con el servidor, así que puedes trabajar sin conexión. Descárgala desde la página de versiones del repositorio `TriliumNext/Trilium` en GitHub y usa la misma versión que el servidor: servidor y cliente deben coincidir en la versión de sincronización. Hay dos formas de configurar la sincronización: - **Escritorio nuevo, servidor con datos**: en el primer arranque de la app, elige la opción de sincronizar con un servidor existente, introduce `https://notas.tu_dominio` y la contraseña. La app descargará todas las notas. - **Escritorio con notas, servidor recién instalado**: en el servidor, elige en el paso 5 la opción de sincronizar desde otra instancia. Después, en la app de escritorio, abre **Opciones > Sincronizar**, escribe la dirección del servidor, guarda y pulsa el botón de probar la sincronización. Trilium enviará las notas al servidor. El icono de sincronización de la barra superior indica el estado. Para comprobarlo desde el servidor, busca actividad de sincronización en los registros: ```bash docker compose logs trilium | grep -i sync ``` ## Paso 7: Instalar el web clipper y usar ETAPI El **Trilium Web Clipper** es una extensión para Firefox y Chrome que guarda en Trilium la página actual, una selección de texto o una captura de pantalla. En sus opciones, indica la URL del servidor (`https://notas.tu_dominio`) y la contraseña; la extensión obtiene un token y deja de pedirla. Para automatizaciones externas, Trilium ofrece ETAPI, una API REST. Crea un token en **Opciones > ETAPI** y compruébalo con el endpoint de información de la aplicación: ```bash curl -s https://notas.tu_dominio/etapi/app-info -H "Authorization: your_etapi_token" ``` ```output {"appVersion":"0.97.2","dbVersion":232,"syncVersion":36,...} ``` La respuesta muestra la versión del servidor, útil para saber qué versión de la app de escritorio descargar. Trilium también ejecuta scripts internos: una nota de tipo código con lenguaje «JS frontend» o «JS backend» se puede lanzar desde la interfaz o asociar a eventos mediante atributos. Por ejemplo, este script de frontend muestra un aviso al ejecutarlo: ```javascript api.showMessage("Hola desde un script de Trilium"); ``` ## Paso 8: Copias de seguridad y actualizaciones Trilium crea copias automáticas de la base de datos en `~/trilium/data/backup/`: una diaria, una semanal y una mensual, que se sobrescriben en cada ciclo. Compruébalo tras el primer día de funcionamiento: ```bash ls -lh ~/trilium/data/backup/ ``` ```output -rw-r--r-- 1 1000 1000 4.2M Sep 25 03:10 backup-daily.db -rw-r--r-- 1 1000 1000 4.2M Sep 25 03:10 backup-weekly.db -rw-r--r-- 1 1000 1000 4.2M Sep 25 03:10 backup-monthly.db ``` Desde **Opciones > Copia de seguridad** puedes activar o desactivar cada una y crear una copia manual en cualquier momento. Esas copias están en el mismo disco que el original, así que no protegen ante la pérdida del servidor. Para una copia completa, detén el contenedor, empaqueta el directorio y guarda el archivo fuera del servidor: ```bash cd ~/trilium docker compose stop sudo tar -czf ~/trilium-backup-$(date +%F).tar.gz -C ~ trilium docker compose start ``` Para actualizar, haz antes esa copia y después descarga la imagen nueva y recrea el contenedor. Actualiza también la app de escritorio a la misma versión: ```bash cd ~/trilium docker compose pull docker compose up -d ``` ## Solución de problemas **La app de escritorio no sincroniza y muestra un error de versión.** Servidor y cliente usan versiones de sincronización distintas. Consulta `syncVersion` con ETAPI (paso 7) o en **Ayuda > Acerca de**, e instala la misma versión en ambos lados. **La importación de un ZIP falla con `413 Request Entity Too Large`.** Falta o es pequeño `client_max_body_size` en el bloque de Nginx. Auméntalo y recarga Nginx. **Errores de permisos en los registros al arrancar.** El proceso del contenedor no puede escribir en `./data`. Comprueba el propietario del directorio con `ls -ln ~/trilium` y ajústalo al UID con el que corre el contenedor, que aparece en los registros de arranque. **Las notas no se actualizan en tiempo real en el navegador.** La conexión WebSocket no llega al servidor. Revisa que el bloque `location` incluye `proxy_http_version 1.1` y las cabeceras `Upgrade` y `Connection`. ## Conclusión Tienes un servidor de Trilium Notes accesible por HTTPS, sincronizado con la aplicación de escritorio y con copias automáticas de la base de datos. Como siguientes pasos puedes programar la copia externa del directorio `data` con un temporizador de systemd, importar tus notas en Markdown con clic derecho sobre una nota y la opción de importar, o explorar las plantillas y los atributos para automatizar tu base de conocimiento.