Instalación de Trilium Notes: Base de Conocimiento Personal

Trilium Notes es una aplicación de toma de notas jerárquica y potente diseñada para construir bases de conocimiento personales complejas. Con soporte para notas en Markdown y HTML, scripting con JavaScript, sincronización entre dispositivos, clipping web y una estructura de árbol infinitamente anidable, Trilium es la herramienta definitiva para quienes necesitan más que un simple bloc de notas. Esta guía cubre el despliegue del servidor Trilium en Linux.

Requisitos Previos

  • Servidor con Ubuntu 20.04+, Debian 11+ o CentOS 8+
  • Node.js 18+ (para instalación del binario)
  • Docker para instalación containerizada
  • Mínimo 512 MB de RAM
  • Puerto 8080 disponible

Instalación con Docker

# Crear directorio para datos persistentes
mkdir -p ~/trilium/data

# Ejecutar Trilium con Docker
docker run -d \
  --name trilium \
  --restart unless-stopped \
  -p 8080:8080 \
  -v ~/trilium/data:/home/node/trilium-data \
  triliumnext/notes:latest

Con Docker Compose:

mkdir -p ~/trilium && cd ~/trilium

cat > docker-compose.yml << 'EOF'
version: '3'

services:
  trilium:
    image: triliumnext/notes:latest
    container_name: trilium
    restart: unless-stopped
    ports:
      - 8080:8080
    volumes:
      - ./data:/home/node/trilium-data
    environment:
      - TZ=Europe/Madrid
      - USER_UID=1000
      - USER_GID=1000
EOF

mkdir -p ~/trilium/data
docker compose up -d
docker compose logs -f trilium

Instalación del Binario del Servidor

Para instalación sin Docker en un VPS:

# Instalar Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Descargar Trilium Server
TRILIUM_VERSION="0.90.7"
wget "https://github.com/TriliumNext/Notes/releases/download/v${TRILIUM_VERSION}/TriliumNextNotes-Server-linux-x64-v${TRILIUM_VERSION}.tar.xz"

# Extraer
mkdir -p /opt/trilium
tar -xJf TriliumNextNotes-Server-linux-x64-v${TRILIUM_VERSION}.tar.xz -C /opt/trilium/

# Crear usuario dedicado
sudo useradd -r -s /bin/false -d /opt/trilium trilium
sudo chown -R trilium:trilium /opt/trilium/

# Crear directorio de datos
sudo mkdir -p /var/lib/trilium
sudo chown trilium:trilium /var/lib/trilium

Crear servicio systemd:

sudo tee /etc/systemd/system/trilium.service << 'EOF'
[Unit]
Description=Trilium Notes Server
After=network.target

[Service]
Type=simple
User=trilium
Group=trilium
Environment=TRILIUM_DATA_DIR=/var/lib/trilium
WorkingDirectory=/opt/trilium
ExecStart=/usr/bin/node /opt/trilium/src/www
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now trilium
sudo systemctl status trilium

Configuración Inicial

Acceder a http://TU-SERVIDOR:8080 para la configuración inicial:

  1. Elegir entre configuración nueva o sincronización desde otra instancia
  2. Establecer contraseña de la base de datos (cifrado de notas en reposo)
  3. La interfaz web de Trilium estará disponible tras el login
# El archivo de configuración de Trilium está en:
# ~/trilium/data/config.ini (Docker)
# /var/lib/trilium/config.ini (instalación nativa)

# Ver la configuración actual
cat ~/trilium/data/config.ini

La estructura básica del archivo de configuración:

[Network]
# Puerto de escucha (defecto: 8080)
port=8080

# Deshabilitar la autenticación por certificado del lado del cliente
# (útil cuando se usa detrás de proxy)
httpsEnabled=false

[Database]
# Ruta de la base de datos (auto-configurado)
# dbFileName=document.db

Sincronización del Cliente de Escritorio

Trilium tiene aplicaciones de escritorio para Linux, Windows y macOS que se sincronizan con el servidor:

# Descargar la aplicación de escritorio para Linux
TRILIUM_VERSION="0.90.7"
wget "https://github.com/TriliumNext/Notes/releases/download/v${TRILIUM_VERSION}/TriliumNextNotes-linux-x64-v${TRILIUM_VERSION}.AppImage"
chmod +x TriliumNextNotes-linux-x64-v${TRILIUM_VERSION}.AppImage
./TriliumNextNotes-linux-x64-v${TRILIUM_VERSION}.AppImage

Configurar la sincronización en la app de escritorio:

  1. Primera vez: seleccionar "Sincronizar con servidor existente"
  2. URL del servidor: https://notas.tu-dominio.com
  3. Contraseña del servidor
  4. La sincronización es bidireccional y en tiempo real
# Verificar el estado de sincronización desde los logs del servidor
docker logs trilium 2>&1 | grep -i "sync"

Markdown y Edición de Notas

Trilium soporta múltiples tipos de contenido:

  • Texto (HTML enriquecido con editor WYSIWYG)
  • Código (con resaltado de sintaxis para más de 100 lenguajes)
  • Markdown (con previsualización en tiempo real)
  • Imagen (galería y anotación)
  • Mapa mental (diagramas con flechas y conexiones)
  • Relaciones (notas enlazadas)
# Importar notas Markdown existentes:
# Panel > Botón derecho sobre la carpeta destino > Importar
# Soporta archivos .md individuales y ZIPs con estructura de carpetas

# Exportar notas en diferentes formatos:
# Botón derecho > Exportar > HTML, Markdown, Opml

# La estructura de árbol de Trilium permite organización profunda:
# Mi Base de Conocimiento
# ├── Trabajo
# │   ├── Proyectos
# │   │   ├── Proyecto A
# │   │   └── Proyecto B
# │   └── Reuniones
# ├── Personal
# │   ├── Libros leídos
# │   └── Ideas
# └── Referencia
#     ├── Linux
#     └── Recetas

Scripting con JavaScript

Trilium permite notas de tipo "código" que pueden ejecutarse como scripts:

// Ejemplo de script en Trilium para crear notas automáticamente
// Tipo de nota: Código > JavaScript frontend

// Obtener la fecha actual formateada
const hoy = new Date().toLocaleDateString('es-ES', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
});

// Crear una nota de diario automáticamente
const notaDiario = await api.createTextNote(
    api.currentNote.noteId,
    `Diario - ${hoy}`,
    `<h2>Resumen del día ${hoy}</h2><p></p>`
);

// Navegar a la nota recién creada
await api.activateNote(notaDiario.note.noteId);
// Script de tipo "Código - JavaScript backend" para automatización
// Se puede ejecutar con un botón o en un intervalo

// Buscar todas las notas con la etiqueta "TODO"
const notasTodo = await api.searchNotes('#todo #!done');

// Contar y mostrar estadísticas
const stats = {
    total: notasTodo.length,
    pendientes: notasTodo.filter(n => !n.hasLabel('done')).length
};

log(`Tareas pendientes: ${stats.pendientes} de ${stats.total}`);

Web Clipper

El web clipper de Trilium permite guardar páginas web directamente en la base de conocimiento:

# Instalar la extensión del navegador:
# Firefox: https://addons.mozilla.org/firefox/addon/trilium-web-clipper/
# Chrome: https://chrome.google.com/webstore/ (buscar "Trilium Web Clipper")

# Configurar la extensión:
# URL del servidor: https://notas.tu-dominio.com
# Contraseña: contraseña del servidor Trilium

Opciones de clipping disponibles:

  • Artículo de texto: Solo el contenido principal
  • Selección de texto: Solo el texto seleccionado
  • Captura de pantalla: Imagen de la página
  • Página completa: HTML completo de la página
  • Marcador: Solo la URL con metadatos

Backup y Exportación

# Trilium hace backups automáticos de la base de datos
# Ubicación por defecto: ~/trilium/data/backup/ (Docker)

# Ver los backups automáticos existentes
ls -la ~/trilium/data/backup/

# El backup incluye comprimidos ZIP de la base de datos cada X horas
# Configurar frecuencia en: Panel > Opciones > Backup

# Backup manual (Docker)
docker exec trilium cp /home/node/trilium-data/document.db /home/node/trilium-data/backup/manual-$(date +%Y%m%d).db

# Exportar toda la base de conocimiento como HTML
# Panel > Botón derecho en la raíz > Exportar > HTML/ZIP

# Exportar como Markdown (para migración a otros sistemas)
# Panel > Botón derecho en la raíz > Exportar > Markdown/ZIP

Proxy Inverso con Nginx

# Obtener certificado SSL
sudo certbot --nginx -d notas.tu-dominio.com

# Configuración de Nginx para Trilium
sudo tee /etc/nginx/sites-available/trilium << 'EOF'
server {
    listen 443 ssl http2;
    server_name notas.tu-dominio.com;

    ssl_certificate /etc/letsencrypt/live/notas.tu-dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notas.tu-dominio.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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 https;
        # WebSocket para sincronización en tiempo real
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 600s;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/trilium /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Solución de Problemas

Trilium no inicia:

# Ver logs del contenedor
docker logs trilium --tail 50

# Verificar permisos del directorio de datos
ls -la ~/trilium/data/
sudo chown -R 1000:1000 ~/trilium/data/

# Para instalación nativa, verificar que Node.js está instalado
node --version

No se puede conectar el cliente de escritorio:

# Verificar que el servidor está accesible
curl -I https://notas.tu-dominio.com

# Comprobar los logs del servidor durante el intento de sincronización
docker logs trilium -f

# Verificar que el WebSocket está funcionando
curl -I -H "Upgrade: websocket" -H "Connection: Upgrade" https://notas.tu-dominio.com

Base de datos corrupta o pérdida de notas:

# Restaurar desde backup automático
ls ~/trilium/data/backup/
docker stop trilium
cp ~/trilium/data/backup/backup-YYYYMMDD.db ~/trilium/data/document.db
docker start trilium

Conclusión

Trilium Notes es la herramienta más potente disponible para construir bases de conocimiento personales self-hosted. Su combinación de estructura jerárquica infinita, scripting integrado y sincronización multiplataforma lo distingue de simples aplicaciones de notas. Desplegado en tu propio servidor, garantiza que tu base de conocimiento permanece completamente privada y accesible desde cualquier dispositivo.