MAATRIX / Блог / Trilium Notes на Ubuntu 24.04: пошаговая установка

Trilium Notes на Ubuntu 24.04: пошаговая установка

MAATRIX

Если заметки разбросаны по десятку блокнотов, чатов с самим собой и вкладок в браузере — рано или поздно захочется единой системы, где всё лежит деревом, ищется за секунду и не утекает третьим сервисам. Trilium Notes — как раз такой инструмент: иерархические заметки, мощный полнотекстовый поиск, шифрование отдельных страниц и синхронизация между устройствами через собственный сервер. Ниже — рабочая установка серверной версии на чистый VPS с Ubuntu 24.04, systemd и Nginx поверх.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Trilium Notes и зачем он вам

Trilium — это не блокнот в привычном смысле, а скорее личная база знаний с деревом заметок произвольной вложенности. Ключевые вещи, которые отличают его от Obsidian, Notion или связки Google Keep:

  • Дерево заметок с клонированием — одна и та же заметка может быть одновременно в нескольких ветках дерева (это не копия, а именно одна сущность с несколькими родителями), удобно для перекрёстной категоризации.
  • Мощный поиск с синтаксисом запросов — можно искать не только по тексту, но и по атрибутам, датам, типу заметки, сохранять запросы как «умные» папки.
  • Атрибуты и связи (labels/relations) — метаданные на заметках, на которых можно строить собственную логику: например, автоматически подсвечивать просроченные задачи.
  • Шифрование отдельных заметок — «protected notes» закрываются паролем и не читаются без разблокировки сессии, даже если у кого-то есть доступ к базе.
  • Версионирование — автоматические ревизии при редактировании, можно откатиться к прошлой версии текста.
  • Скриптинг на JS — для тех, кому мало готовых функций: можно писать кастомные кнопки, автоматизации, виджеты.
  • Day notes / журнал — встроенный календарь с заметкой на каждый день, удобно для дневников и рабочих логов.

Важный нюанс, который стоит знать до установки: оригинальный репозиторий zadam/trilium архивирован автором в 2024 году — активная разработка продолжается в форке сообщества TriliumNext Notes (github.com/TriliumNext/Notes). Именно его и стоит ставить сейчас — он совместим по формату данных с оригиналом, но получает обновления и исправления безопасности. В статье используется именно TriliumNext.

По ресурсам Trilium нетребователен: 1 vCPU и 1 ГБ RAM хватает для личного использования и небольшой команды, SQLite в качестве хранилища не требует отдельной СУБД. Для активной работы нескольких пользователей с большими вложениями комфортнее 2 vCPU / 2 ГБ.

Подготовка сервера

Начинаем с чистого сервера на Ubuntu 24.04, обновляем систему:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget jq tar

Если SSH-доступ ещё не переведён на ключи, а firewall не настроен — сделайте это до установки сервисов, это база гигиены для продакшен-сервера. Есть отдельный разбор про firewall на UFW с полным списком портов и команд.

Для Trilium понадобятся порты 22 (SSH), 80 и 443 (HTTP/HTTPS через Nginx). Сам сервис Trilium слушает порт 8080 только на localhost — наружу его открывать не нужно:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Создаём отдельного системного пользователя, от которого будет работать процесс — так утечка в приложении не даст доступ к остальной системе:

sudo useradd -r -m -s /bin/false -d /opt/trilium trilium

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Trilium Notes (server-пакет)

TriliumNext распространяет готовый серверный пакет с уже встроенным рантаймом Node.js — ставить Node.js отдельно не нужно, достаточно распаковать архив. Так как имя файла релиза меняется от версии к версии, безопаснее не хардкодить конкретную ссылку, а брать её через GitHub API:

sudo mkdir -p /opt/trilium
cd /tmp

DOWNLOAD_URL=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest \
  | grep "browser_download_url.*[Ss]erver.*linux-x64.*tar.xz" \
  | cut -d '"' -f 4 | head -n1)

echo "Скачиваю: $DOWNLOAD_URL"
wget "$DOWNLOAD_URL" -O trilium-server.tar.xz

Если переменная DOWNLOAD_URL оказалась пустой — значит проект переименовал ассет в очередном релизе, зайдите на страницу github.com/TriliumNext/Notes/releases и скачайте нужный .tar.xz вручную по прямой ссылке, дальше шаги те же.

Распаковываем в рабочий каталог и передаём права нашему системному пользователю:

sudo tar xf trilium-server.tar.xz -C /opt/trilium --strip-components=1
sudo chown -R trilium:trilium /opt/trilium
rm trilium-server.tar.xz

После распаковки в /opt/trilium должен появиться скрипт запуска trilium.sh (если структура архива в вашей версии отличается — посмотрите содержимое ls -la /opt/trilium, файл README внутри архива описывает точную команду запуска для конкретного релиза).

Каталог с данными (база SQLite, вложения, конфиг) по умолчанию создаётся в ~/.local/share/trilium-data пользователя, от которого запущен процесс. Для предсказуемости зададим его явно через переменную окружения — это пригодится в systemd-юните ниже.

Настройка systemd-сервиса

Официального unit-файла проект не поставляет, но собрать его несложно. Создаём каталог под данные и unit:

sudo mkdir -p /opt/trilium/data
sudo chown -R trilium:trilium /opt/trilium/data

sudo nano /etc/systemd/system/trilium.service

Содержимое:

[Unit]
Description=Trilium Notes (server)
After=network.target

[Service]
Type=simple
User=trilium
Group=trilium
WorkingDirectory=/opt/trilium
ExecStart=/opt/trilium/trilium.sh
Environment=TRILIUM_DATA_DIR=/opt/trilium/data
Environment=TRILIUM_PORT=8080
Environment=TRILIUM_HOST=127.0.0.1
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Применяем и запускаем:

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

Первый запуск создаёт базу данных и файл config.ini внутри TRILIUM_DATA_DIR — если параметры сети (TRILIUM_PORT, TRILIUM_HOST) в вашей версии не подхватываются через переменные окружения, откройте config.ini и пропишите порт и хост в секции [Network] напрямую, затем перезапустите сервис.

Если статус active (running) — процесс поднялся и слушает 127.0.0.1:8080. Смотреть лог при проблемах:

journalctl -u trilium -n 100 --no-pager

Nginx как reverse proxy и HTTPS

Открывать Node.js-процесс напрямую в интернет не стоит — нет нормальной обработки TLS и логов на уровне веб-сервера. Ставим Nginx перед Trilium. Общая логика reverse proxy подробно разобрана в отдельной статье про Nginx, здесь — конфиг под конкретно Trilium:

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/notes.example.com

Конфиг:

server {
    listen 80;
    server_name notes.example.com;

    client_max_body_size 100M;

    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 $scheme;
        proxy_read_timeout 90s;
        proxy_buffering off;
    }
}

Директива client_max_body_size увеличена не случайно — в заметки Trilium можно прикреплять файлы и изображения, и дефолтный лимит Nginx в 1 МБ будет обрезать загрузку вложений. Подберите значение под свои нужды.

Активируем и проверяем:

sudo ln -s /etc/nginx/sites-available/notes.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Прежде чем выпускать сертификат, убедитесь, что A-запись домена notes.example.com уже указывает на IP сервера. Дальше — выпуск бесплатного SSL через Let's Encrypt:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d notes.example.com

Certbot сам пропишет редирект на HTTPS и настроит автопродление через systemd-таймер.

Первичная настройка, шифрование и бэкапы

Открываем https://notes.example.com — Trilium покажет мастер первого запуска, где нужно задать пароль. У этого пароля двойная роль: он одновременно логин-пароль в веб-интерфейс и ключ шифрования для «защищённых» (protected) заметок. Это важный нюанс — если пароль потерян и вы не сохранили резервную копию базы, зашифрованные заметки восстановить не получится, это архитектурная особенность приложения, а не баг.

После входа стоит сразу настроить несколько вещей:

  • Двухфакторная аутентификация (TOTP) — включается в Options → Security, разумный шаг для сервера, доступного из интернета.
  • Автоматические бэкапы — в том же разделе настроек можно включить ежедневные/еженедельные/ежемесячные снапшоты базы, которые сохраняются в подкаталог backup внутри TRILIUM_DATA_DIR. Это снапшоты SQLite-файла, а не полноценная защита от потери сервера — их стоит регулярно копировать за пределы VPS. Если нужна более системная схема — пригодится материал про автоматизацию резервного копирования баз данных, принцип применим и к SQLite-файлу Trilium.
  • Синхронизация с desktop-клиентом — если параллельно используете десктопное приложение Trilium на ноутбуке, в его Options → Sync укажите адрес вашего сервера (https://notes.example.com) и учётные данные — заметки будут синхронизироваться в обе стороны при каждом сохранении.

Мобильного нативного приложения у Trilium нет, но веб-интерфейс сервера адаптирован под мобильные экраны — можно открыть сайт в браузере на телефоне и добавить на домашний экран как веб-приложение, этого достаточно для чтения и быстрых заметок на ходу.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Обязательно ли использовать TriliumNext, а не оригинальный zadam/trilium?

Формально старые релизы zadam/trilium продолжают работать, но репозиторий архивирован, обновлений безопасности и новых функций там больше не будет. Для нового сервера в 2026 году разумно ставить именно форк TriliumNext — он развивается активно и совместим по формату данных.

Можно ли поставить Trilium через Docker вместо ручной установки?

Да, TriliumNext публикует и Docker-образ — если на сервере уже есть Docker-инфраструктура, вариант с контейнером часто проще в сопровождении, чем systemd-юнит поверх распакованного архива. Ручная установка из этой статьи даёт немного больше контроля над версией и не тянет за собой демон Docker ради одного сервиса.

Что будет, если я забуду пароль от protected notes?

Обычные (не защищённые) заметки останутся доступны — можно сбросить пароль входа через инструменты администрирования. А вот содержимое заметок, помеченных как protected, шифруется этим паролем на уровне данных и без него не восстанавливается никак, даже разработчиками проекта. Это осознанный компромисс в пользу приватности, а не недоработка.

Trilium не запускается после обновления — с чего начать?

Сначала проверьте лог: journalctl -u trilium -n 100. Чаще всего причина — несовместимая версия архива данных (миграция БД не завершилась) или занятый порт. Перед любым обновлением делайте бэкап каталога TRILIUM_DATA_DIR целиком, а не только через встроенный снапшот — это самый надёжный путь отката.

Сколько заметок и вложений выдержит такая установка?

SQLite спокойно работает с базами на десятки и сотни тысяч заметок для одного-нескольких пользователей — узкое место обычно не движок БД, а дисковое пространство под вложения (изображения, файлы, PDF). Следите за свободным местом на диске отдельно от размера самой базы.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →