MAATRIX / Блог / Как установить и настроить Trilium Notes на VPS

Как установить и настроить Trilium Notes на VPS

MAATRIX

Notion удобен, пока не начинаешь считать, сколько заметок утекло на чужие серверы, а Obsidian хорош локально, но синхронизация между устройствами быстро упирается в платную подписку или костыли через облако. Trilium Notes закрывает именно этот разрыв: иерархическое дерево заметок с клонированием, полнотекстовым поиском и шифрованием прямо на вашем VPS, с бесплатной синхронизацией между сервером и любым числом клиентов. Ниже — установка через Docker, реверс-прокси с SSL и настройка структуры базы знаний с нуля.

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

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

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

Что понадобится перед установкой

Trilium — приложение на Node.js с базой SQLite, поэтому по железу оно одно из самых нетребовательных в этом блоге. Даже при активном личном использовании с сотнями заметок и вложениями хватает минимального VPS.

РесурсМинимумКомфортно (команда, много вложений)
CPU1 vCPU2 vCPU
RAM512 МБ1-2 ГБ
Диск5 ГБ SSD20-30 ГБ SSD
ОСUbuntu 22.04/24.04, Debian 12Ubuntu 24.04 LTS

Дополнительно понадобится:

  • Docker и Docker Compose на сервере;
  • домен или поддомен с A-записью на IP VPS — без него не выпустить SSL, а Trilium через голый IP работать будет, но небезопасно и без нормального имени для клиентов;
  • доступ по SSH с правами sudo.

Важная развилка на старте: у оригинального проекта zadam/trilium разработка была заморожена, и сейчас активно поддерживается форк сообщества TriliumNext/Notes — именно его образ и стоит ставить, если нужны актуальные исправления и обновления. Ниже используется официальный Docker-образ этого форка.

Установка Trilium через Docker Compose

Если Docker ещё не стоит, поставьте его через официальный скрипт или пакеты дистрибутива, затем создайте каталог проекта:

mkdir -p /opt/trilium
cd /opt/trilium

Создайте docker-compose.yml:

services:
  trilium:
    image: triliumnext/notes:latest
    container_name: trilium
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./trilium-data:/home/node/trilium-data

Порт намеренно опубликован только на 127.0.0.1 — наружу Trilium будет отдавать Nginx с SSL, а не голый HTTP-порт контейнера. Каталог ./trilium-data хранит всё: базу document.db, конфиг config.ini, вложения и автоматические бэкапы — это единственное, что нужно резервировать.

Запустите:

docker compose up -d
docker compose logs -f trilium

В логах должно появиться сообщение о запуске сервера на порту 8080 и создании нового config.ini. Остановите просмотр логов (Ctrl+C) — контейнер продолжит работать в фоне.

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

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

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

Nginx как reverse-proxy и SSL

Ставим Nginx, если его ещё нет:

apt update && apt -y install nginx

Конфиг /etc/nginx/sites-available/trilium:

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

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
        client_max_body_size 50M;
    }
}

Заголовки Upgrade/Connection "upgrade" здесь не для галочки: Trilium держит с браузером WebSocket-соединение для live-синхронизации между открытыми вкладками и клиентами, и без них интерфейс будет работать, но обновления между устройствами станут приходить только после перезагрузки страницы. client_max_body_size увеличен под вложения — скриншоты и файлы в заметках легко превышают дефолтный 1 МБ.

Если нужна более сложная схема — несколько сайтов на одном сервере, балансировка или прокси перед несколькими VPS — общий подход разобран в статье про Nginx как реверс-прокси, сюда просто добавляются WebSocket-заголовки.

Активируйте сайт и получите сертификат:

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

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

Certbot сам пропишет редирект на https и настроит автопродление сертификата по таймеру systemd — вручную ничего продлевать не придётся.

Первый запуск, логин и защищённые заметки

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

Это два разных пароля с разным назначением:

  • Пароль входа защищает доступ к интерфейсу в целом.
  • Пароль защиты заметок шифрует содержимое отдельных заметок, которые вы явно пометите как protected — они хранятся в базе в зашифрованном виде и требуют повторного ввода пароля в рамках сессии («разблокировка» на ограниченное время), даже если вы уже вошли в систему.

Такое разделение удобно, если часть базы — рабочие заметки, а часть — пароли, ключи или личные записи, к которым не должен быть доступ при простом открытом сеансе браузера. Для дополнительной защиты входа Trilium поддерживает двухфакторную аутентификацию по TOTP — включается в Options → Authentication, работает с любым приложением-аутентификатором (Google Authenticator, Aegis, Authy).

Если сервер смотрит напрямую в интернет, TOTP стоит включить сразу — это единственная учётная запись, и её компрометация отдаёт весь архив заметок целиком.

Дерево заметок: клонирование, атрибуты, поиск и публикация

Базовая единица в Trilium — заметка (note) в дереве. Отличие от плоских Markdown-вики вроде DokuWiki или BookStack в том, что дерево здесь не просто навигация, а рабочий инструмент:

  • Клонирование (cloning) — одна и та же заметка может быть «пришита» в несколько мест дерева одновременно. Меняете содержимое в одном месте — изменение видно везде, где заметка приклонирована. Удобно для заметок, которые логически относятся сразу к нескольким разделам (например, отдельный сервер упоминается и в разделе «Инфраструктура», и в разделе «Клиент X»).
  • Атрибуты (labels и relations) — метаданные на заметке в формате ключ-значение (#tag, #priority=high) или связи между заметками (~parent, ~template). На атрибутах строятся сохранённые поиски, шаблоны заметок и скрипты.
  • Шаблоны — заметка может наследовать структуру от другой через атрибут ~template, что удобно для повторяющихся форматов (карточка проекта, встреча, чек-лист).
  • Полнотекстовый поиск — ищет не только по заголовкам, но и по содержимому заметок, включая атрибуты; поисковый запрос можно сохранить как «умную» заметку, которая всегда показывает актуальную выборку.

Отдельная полезная функция — Share: любую ветку дерева можно опубликовать как обычную веб-страницу по прямой ссылке, без входа в систему, что закрывает частый сценарий «выложить один раздел базы знаний наружу, не открывая доступ ко всему остальному».

Для быстрого добавления заметок с других сайтов есть официальное расширение Web Clipper для Chrome и Firefox — вырезает страницу или выделение прямо в дерево на сервере.

Синхронизация, бэкапы и обновление

Сервер на VPS — это не единственный способ пользоваться Trilium, а точка синхронизации. Desktop-клиент (Windows/macOS/Linux) и мобильные приложения подключаются к вашему серверу через настройку Sync (Options → Sync), указывая URL сервера и учётные данные — дальше изменения на любом устройстве уходят на сервер и подтягиваются на остальные автоматически.

Бэкапы. Всё состояние — в каталоге trilium-data, поэтому для полного бэкапа достаточно копировать его целиком, но с оговоркой: document.db — это активно используемая SQLite-база, копировать её «на живую» простым cp небезопасно. Правильнее так:

docker exec trilium sqlite3 /home/node/trilium-data/document.db ".backup /home/node/trilium-data/backup/manual-$(date +%F).db"

Или воспользоваться встроенным пунктом меню Options → Backup → Backup now, который делает то же самое консистентно средствами самого приложения. Готовые файлы бэкапа затем стоит вынести за пределы сервера — на объектное хранилище или другой VPS; общий подход к автоматизации с шифрованием разобран в статье про бэкап с шифрованием, а если предпочитаете снимать не файл базы, а весь Docker-том целиком — пригодится бэкап Docker volume.

Обновление до новой версии — обычный цикл Docker Compose:

cd /opt/trilium
docker compose pull
docker compose up -d

Миграции базы Trilium применяет сам при старте контейнера. Перед обновлением на мажорную версию всё же сделайте свежий ручной бэкап — откат миграции без копии базы вручную не делается.

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

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

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

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

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

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

Чем Trilium отличается от Obsidian или Notion?

Obsidian хранит заметки как локальные файлы без встроенного серверного бэкенда — синхронизация между устройствами либо платная, либо через сторонний sync-инструмент. Notion — облачный SaaS без self-hosting. Trilium с самого начала спроектирован как клиент-серверное приложение: сервер на VPS, официальная синхронизация без подписок, при этом дерево заметок и клонирование гибче плоской файловой структуры.

zadam/trilium или TriliumNext/Notes — что ставить в 2026 году?

Оригинальный репозиторий zadam/trilium практически не развивается, активная разработка и релизы идут в форке сообщества TriliumNext/Notes — его образ и стоит использовать для новой установки.

Можно ли работать без сервера, только в десктоп-приложении?

Да, Trilium умеет работать локально без какого-либо сервера. Но тогда синхронизация между устройствами и мобильный доступ отпадают — сервер на VPS нужен именно для этого сценария.

Что будет, если забыть пароль защищённых заметок?

Расшифровать protected-заметки без пароля невозможно — это по-настоящему сквозное шифрование на уровне контента, а не UI-заглушка. Записывайте пароль в отдельный менеджер паролей отдельно от базы Trilium.

Насколько тяжело вложениям в базе?

Файлы и изображения хранятся внутри той же SQLite-базы как blob-данные, поэтому при большом объёме вложений (сотни мегабайт скриншотов) файл document.db соответственно растёт — закладывайте запас по диску и не забывайте про периодические бэкапы этого файла.

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

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

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