Перейти к основному содержимому
  1. Posts/
  2. Self-Hosting/

Trilium: установка и настройка системы для заметок

··1829 слов·9 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
Self-Hosting - This article is part of a series.
Part : This Article

Trilium - мощная система личных знаний под вашим контролем
#

Введение: зачем нужен Trilium - и зачем вообще нужны PKM-инструменты
#

В эпоху информационного перенасыщения мы страдаем не от нехватки знаний, а скорее от объема информации, которая сваливается на нас каждый день, и от хаоса, который этот объем порождает: разрозненные идеи, потерянные связи, забытые контексты и прочие ужасы цифровизации. Не считая попыток манипуляции тобой, рассказывая тебе, что твой мозг не создан для того, чтобы что-то держать в памяти. Прям как-будто ты какой-то компьютер с ограниченным объемом оперативной памяти. (Спойлер, спойлер, - это не так).  
Для решения этой проблемы существуют инструменты, которые с легкой руки сообщества называют Personal Knowledge Management (PKM) - личные базы знаний. 

Интерфейс Trilium: демо-дерево заметок с примерами форматирования

Такие системы позволяют:

  • собирать разрозненные заметки, идеи, ссылки, черновики в единое пространство;
  • интегрировать разные форматы (текст, изображения, диаграммы, таблицы, код) в одной базе;
  • находить связи между заметками через ссылки, граф, поиск, атрибуты;
  • развивать знания - не просто фиксировать факты, но связывать их, углублять, пересобирать;
  • делать экспорт / бэкап - чтобы вы не зависели от чьего-то облака.

В классических инструментах вроде Obsidian или Notion вы получаете либо «файловые» подходы (Markdown + плагины, как в случае с Obsidian) либо облачную экосистему с ограничениями. Причем с учетом всех известных событий - облачность - это тоже ограничение, а наверно уже и барьер. Obsidian, Notion или Joplin хороши, но Trilium идёт дальше, предлагая гибридный подход: мощную древовидную структуру, гибкость базы данных и приватность self-hosted-решения. При этом надо учитывать, что Obsidian и Notion не open-source решения, а Joplin, хоть и популярное решение, но тоже далеко от идеала.

Герой сегодняшней статьи Trilium - активно развиваемый сообществом преемник оригинального проекта, который начинал разработчик zadam. Некоторое время community-форк жил под именем TriliumNext, но в 2025 году получил от автора обратно оригинальный репозиторий и название - так что это снова просто Trilium, не форк.

При этом Trilium - это не просто «просто заметки», а система, в которой заметка - это объект данных с полями, шаблонами, связями, атрибутами и визуальными интерфейсами. Когда ваша база растёт до сотен, тысяч заметок, разница ощущается особенно ярко.

Что такое Trilium: краткий обзор версии 0.104.1 (актуальная версия на дату обновления настоящей статьи)
#

Основные характеристики Trilium:
#

Для получения дополнительной информации о Trilium можно еще почитать:

  • awesome-trilium для сторонних тем, скриптов, плагинов и многого другого.
  • TriliumRocks! - обучающие материалы, руководства и многое другое.
Карта связей (Note Map) демо-базы Trilium - визуализация связей между заметками

Trilium превращает заметки в объекты данных - каждая запись может иметь атрибуты, связи, шаблон, визуализацию. Это делает систему ближе к базе знаний, чем к простому набору файлов.

-–

Установка и настройка Trilium
#

Ниже приведен мой docker-compose файл с учетом, что я использую обратный прокси Traefik

services:
  trilium:                                # Определяем сервис с именем "trilium"
    container_name: trilium               # Имя контейнера в Docker (для удобства)
    image: triliumnext/trilium:v0.104.1   # Официальный образ Trilium, фиксируем актуальную версию. latest брать не стоит - официальная документация прямо предупреждает, что тег может незаметно апгрейднуть minor-версию и сломать синхронизацию
    restart: always                       # Контейнер будет автоматически перезапускаться при сбое или перезагрузке Docker
    environment:                          # Переменные окружения, передаваемые внутрь контейнера
      TRILIUM_NETWORK_TRUSTEDREVERSEPROXY: 172.18.0.0/16 # Доверенная сеть для обратного прокси
      TRILIUM_DATA_DIR: /home/node/trilium-data   # Путь к директории, где Trilium хранит свои данные внутри контейнера
      TZ: ${TZ}                                   # Устанавливаем часовой пояс из переменной окружения (обычно задан в .env)
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL: "https://trilium.domain.ru"  
        # Базовый URL для обратных вызовов OIDC (Trilium должен знать свой публичный адрес)
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID: ${TRILIUM_CLIENT_ID}  
        # ID клиента OAuth (берётся из .env или секрета)
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET: ${TRILIUM_CLIENT_SECRET}  
        # Секрет клиента OAuth (также из .env)
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL: "https://auth.domain.ru/application/o/trilium"  
        # Адрес Identity Provider (в данном случае Authentik)
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME: "Authentik"  
        # Название провайдера аутентификации, отображаемое в интерфейсе Trilium
      TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON: "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/authentik.svg"  
        # Иконка провайдера аутентификации (красивая мелочь для UI)
    volumes:                              # Монтируем локальные каталоги в контейнер
      - /home/user/docker/trilium:/home/node/trilium-data  
        # Основной том для данных (заменяет встроенную директорию Trilium)
      # Если надо, чтобы контейнер наследовал системный часовой пояс, раскомментируй:
      # - /etc/localtime:/etc/localtime:ro
        # Монтирование локального времени системы внутрь контейнера (только для чтения)
    networks:
      proxy:                              # Подключаем контейнер к внешней сети "proxy" (используется Traefik)
    labels:                               # Метки для интеграции с Traefik (обратный прокси)
      - "traefik.enable=true"                                      # Включаем обработку контейнера Traefik
      - "traefik.http.routers.trilium.entrypoints=web"             # Определяем HTTP-вход (порт 80)
      - "traefik.http.routers.trilium.rule=Host(`trilium.domain.ru`)" # Трафик на этот домен будет направляться в данный контейнер
      - "traefik.http.middlewares.trilium-https-redirect.redirectscheme.scheme=https" # Middleware для редиректа с HTTP на HTTPS
      - "traefik.http.routers.trilium.middlewares=trilium-https-redirect" # Применяем middleware редиректа к HTTP-маршруту
      - "traefik.http.routers.trilium-secure.entrypoints=websecure" # Определяем HTTPS-вход (порт 443)
      - "traefik.http.routers.trilium-secure.rule=Host(`trilium.domain.ru`)" # HTTPS-маршрут для того же домена
      - "traefik.http.routers.trilium-secure.tls=true" # Включаем TLS (HTTPS)
      - "traefik.http.routers.trilium-secure.service=trilium" # Привязываем HTTPS-маршрут к сервису Trilium
      - "traefik.http.services.trilium.loadbalancer.server.port=8080" # Указываем внутренний порт, на котором Trilium слушает в контейнере
      - "traefik.docker.network=proxy" # Указываем, что Traefik должен искать контейнер в сети "proxy"

networks:
  proxy:                                  # Определение внешней сети для взаимодействия с Traefik
    external: true                        # Сеть уже создана ранее (не создавать заново)

а также файл с переменными

# Timezone
TZ=Europe/Moscow
# OAuth2 (Authentik)
TRILIUM_CLIENT_ID=client-id
TRILIUM_CLIENT_SECRET=client-secret
Note

Trilium также поддерживается в Kubernetes, через Cloudron, HomelabOS, NixOS-модуль и пр.

Необходимо учитывать, что Traefik версии 3.6.4 и выше были небольшие breaking changes. В случае если вы используете Traefik как обратный прокси, то вам надо добавить в файл статической конфигурации следующий блок

  websecure:                              # Точка входа для HTTPS (порт 443)
    address: ":443"                       # Слушать порт 443
    http:                                 # HTTP-настройки для HTTPS
      encodedCharacters:                  # Разрешённые закодированные символы (важно для Trilium)
        allowEncodedSlash: true           # Разрешить %2F
        allowEncodedPercent: true         # Разрешить %25
        allowEncodedHash: true            # Разрешить %23

Расположение конфигурации
#

По умолчанию config.ini, база данных и другие важные файлы Trilium хранятся в директории данных. Если вы хотите использовать другое местоположение, можно задать переменную окружения TRILIUM_DATA_DIR, например:

export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data

Отключение / изменение лимита загрузки
#

Если вы сталкиваетесь с ограничением загрузки в 250 МБ по умолчанию и хотите увеличить этот лимит, вы можете установить переменную окружения TRILIUM_NO_UPLOAD_LIMIT=true, чтобы полностью отключить лимит:  
 

export TRILIUM_NO_UPLOAD_LIMIT=true

Или же, если хотите просто увеличить лимит до значения больше, чем 250 МБ, можно использовать переменную MAX_ALLOWED_FILE_SIZE_MB, например:

export MAX_ALLOWED_FILE_SIZE_MB=450

Синхронизация
#

Приложение Trilium - «offline-first» решение для заметок: оно хранит все данные локально на клиенте-десктопе или так называемой серверной установке, как указано выше. Однако Trilium также предлагает возможность настроить синхронизацию с серверной инстанцией, позволяя нескольким десктоп-клиентам синхронизироваться с центральным сервером и, кстати, наоборот. Это создаёт топологию «звезда». Подробнее - в документации по синхронизации

Схема топологии синхронизации Trilium типа «звезда»: сервер синхронизации и несколько клиентов

В этой конфигурации центральный сервер (называемый сервером синхронизации) и несколько клиентских (или настольных) экземпляров синхронизируются с сервером синхронизации. После настройки синхронизация становится автоматической и непрерывной, не требуя ручного вмешательства.

Note! Obsidian? Нет, не слышал

Настройка синхронизации 
#

Вопросы безопасности 
#

Безопасная настройка сервера критически важна и может сначала показаться сложной. Для обеспечения безопасности и предотвращения потенциальных уязвимостей важно использовать действительный ssl сертификат (HTTPS), а не незашифрованное HTTP-соединение.

Синхронизация экземпляра рабочего стола с сервером синхронизации
#

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

  1. Развертывание сервера : убедитесь, что экземпляр сервера развернут, но не инициализирован.
  2. Конфигурация рабочего стола : откройте экземпляр рабочего стола, перейдите в раздел «Параметры» -> вкладка «Синхронизация» -> «Конфигурация синхронизации» и укажите в поле «Адрес экземпляра сервера» адрес вашего сервера синхронизации. Нажмите «Сохранить».
Вкладка Sync в настройках Trilium - указание адреса сервера синхронизации

3. Тестирование синхронизации : нажмите кнопку «Тест синхронизации», чтобы проверить подключение к серверу синхронизации. В случае успеха клиент начнёт передачу всех данных на сервер. Этот процесс может занять некоторое время, но вы можете продолжать использовать Trilium. Периодически проверяйте сервер, чтобы убедиться в завершении синхронизации. После завершения вы увидите экран входа на сервер.

Синхронизация сервера синхронизации с десктопным экземпляром приложения 
#

Этот метод используется, когда у вас уже есть сервер синхронизации (наш экземпляр, уставленный в нашей homelab) и вы хотите настроить новый экземпляр рабочего стола для синхронизации с ним.

  1. Настройка рабочего стола : следуйте инструкциям на странице установки рабочего стола .
  2. Первоначальная конфигурация : при появлении запроса выберите вариант настройки синхронизации с сервером синхронизации.
Экран первоначальной настройки десктопного Trilium: синхронизация с сервером
  1. Сведения о сервере : настройте адрес сервера Trilium и введите правильное имя пользователя и пароль для аутентификации.
  2. Завершить настройку : нажмите кнопку «Завершить настройку». В случае успеха вы увидите следующий экран:
Экран запуска синхронизации после завершения настройки сервера

Мобильный фронтенд
#

Trilium ( серверная версия ) имеет мобильный веб-интерфейс, оптимизированный для сенсорных устройств - смартфонов и планшетов. Он активируется автоматически при входе в систему на основе определения браузера.

Мобильный интерфейс имеет ограниченный функционал по сравнению с полнофункциональным десктопным интерфейсом. 

Обратите внимание, что это не приложение для Android/iOS, а просто удобная для мобильных устройств веб-страница, размещенная на сервере .

Ограничения 
#

Мобильный интерфейс предоставляет лишь некоторые функции полного десктопного интерфейса:

  • можно просматривать все дерево заметок, читать и редактировать все типы заметок, но создавать можно только текстовые заметки
  • чтение и редактирование защищенных заметок возможно, но их создание не поддерживается
  • параметры редактирования не поддерживаются
  • клонирование заметок не поддерживается
  • загрузка вложенных файлов не поддерживается

Веб-клиппер
#

Всплывающее окно расширения Trilium Web Clipper в браузере

Trilium Web Clipper - это расширение для веб-браузера, которое позволяет пользователю вырезать текст, снимки экрана, целые страницы и короткие заметки и сохранять их непосредственно в Trilium Notes.

Проект размещен здесь.

Поддерживаются браузеры Firefox и Chrome, но сборка Chrome должна работать и в других браузерах на базе Chromium.

Я использую эту версию

Функциональность
#

  • выберите текст и вырежьте его с помощью контекстного меню, вызываемого правой кнопкой мыши
  • нажмите на изображение или ссылку и сохраните его через контекстное меню
  • сохранить всю страницу из всплывающего или контекстного меню
  • сохранить снимок экрана (с инструментом обрезки) из всплывающего или контекстного меню
  • создать короткую текстовую заметку из всплывающего окна

Trilium сохранит эти вырезки как новую дочернюю заметку в заметке «Входящие Clipper».

По умолчанию это дневная заметка, но вы можете переопределить это.

Если имеется несколько вырезок с одной и той же страницы (и в один и тот же день), то они будут добавлены в одну и ту же заметку.

Конфигурация
#

Расширение должно подключаться к работающему экземпляру Trilium. По умолчанию оно сканирует диапазон портов на локальном компьютере, чтобы найти экземпляр Trilium на рабочем столе.

Также можно настроить адрес сервера , если вы не запускаете настольное приложение или хотите, чтобы он работал без запуска настольного приложения.

Так как статья получилась уже достаточно длинной, то наверно об особенностях работы приложения я продолжу уже в другой статье.

Self-Hosting - This article is part of a series.
Part : This Article

Related

Obsidian vs TriliumNext: сравнение систем управления знаниями

··749 слов·4 минут· loading · loading
Подробное сравнение Obsidian и TriliumNext: две мощные системы для организации заметок и личной базы знаний. Что выбрать для своего рабочего процесса?

Плагины Obsidian, которыми я пользуюсь

··2227 слов·11 минут· loading · loading
Разбираю 36 плагинов Obsidian, которые заменили встроенный функционал Trilium Notes после переезда - от Templater и Bases до Excalidraw и Kanban. Сравниваю философию двух систем и объясняю, почему решающим фактором стала поддержка YAML Front Matter для публикации статей через Hugo.

Memos: установка self-hosted заметок для быстрых мыслей

··501 слово·3 минут· loading · loading
Разбираем установку и настройку Memos - минималистичного self-hosted приложения для быстрых заметок и личного дневника. Покажу запуск в Docker, основные возможности, организацию заметок и сценарии использования в homelab.