Несколько лет я пытался организовать удобную систему заметок в Obsidian.
Сначала всё нравилось: markdown, плагины, локальные файлы. Но со временем появилась другая проблема — я начал тратить больше времени на настройку системы, чем на сами заметки.

Плагины конфликтовали между собой, структура постоянно менялась, а вопрос синхронизации между устройствами так и не удалось решить «идеально».
Официальный Obsidian Sync платный, а варианты через Git, Syncthing или облака всё равно требовали дополнительных костылей.

В какой‑то момент я решил посмотреть в сторону self‑hosted решений и наткнулся на Trilium Notes.

Почему именно Trilium

Trilium Notes — это self‑hosted система заметок с древовидной структурой, встроенным сервером и веб‑интерфейсом.

Что мне в нём понравилось:

  • древовидная структура заметок;

  • работа через браузер;

  • быстрый поиск;

  • relations / attributes;

  • локальное хранение данных;

  • возможность полностью держать всё у себя;

  • нормальная работа с большими базами заметок.

Главный минус — на Android нет полноценного официального мобильного решения.

В итоге уже около года я использую Trilium Server прямо внутри Termux на телефоне.

Что понадобится

Для установки потребуется:

  • Android‑смартфон;

  • Termux;

  • стабильный интернет;

  • около 3–5 ГБ свободного места;

  • немного терпения.

У меня установка работает на Android 15 и ARM64-процессоре.

Подключение по SSH

Для удобства я подключаюсь к телефону по SSH с компьютера.

Сначала устанавливаем openssh внутри Termux:

pkg install openssh

Запускаем SSH-сервер:

sshd

После этого можно подключиться с ПК:

ssh u0_a349@192.168.1.73 -p 8022

Порт настроен у меня на 8022, в вашем же случает это будет стандартный 22

Также у меня установлен fish shell.
Если будет интересно — позже отдельно напишу про настройку удобного окружения внутри Termux.

Обновляем Termux

Первое, с чем я столкнулся — проблемы при обновлении пакетов.

apt update

В какой-то момент apt начал ловить таймауты: 

❯ apt update
Get:1 https://mirrors.ravidwivedi.in/termux/termux-main stable InRelease [14.0 kB]
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [547 kB]
Ign:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [547 kB]
Ign:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [547 kB]
Ign:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [547 kB]
Err:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
  Connection timed out [IP: 82.180.144.238 443]
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [681 kB]
Err:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
  Connection timed out [IP: 82.180.144.238 443]
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [1749 kB]
Err:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages
  Connection timed out [IP: 82.180.144.238 443]
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
W: Failed to fetch https://mirrors.ravidwivedi.in/termux/termux-main/dists/stable/main/binary-aarch64/Packages  Connection timed out [IP: 82.180.144.238 443]
W: Some index files failed to download. They have been ignored, or old ones used instead.
u0_a349@localhost ~

По понятным некоторым причинам обновление не удалось, но после шаманской магии со сменой ip, обновление всё же прошло нормально.
 

❯ apt update
Get:1 https://mirrors.ravidwivedi.in/termux/termux-main stable InRelease [14.0 kB]
Get:2 https://mirrors.ravidwivedi.in/termux/termux-main stable/main aarch64 Packages [548 kB]
Fetched 562 kB in 18s (30.6 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
87 packages can be upgraded. Run 'apt list --upgradable' to see them.

Дальше просто обновим систему:

apt upgrade

Автозапуск сервисов в Termux

Во время обновления Termux предлагает установить termux-services.

Это полезно, если вы хотите автоматически запускать:

  • sshd;

  • ssh-agent;

  • другие сервисы.

Установка:

pkg install termux-services

Автозапуск SSH:

sv-enable sshd

Устанавливаем Linux внутри Android

Для запуска Trilium удобнее использовать полноценное Linux‑окружение через proot-distro.

Устанавливаем:

apt install proot-distro

Список доступных дистрибутивов:

proot-distro list

Я тестировал Ubuntu и Debian.

Но периодически сталкивался с проблемами и нестабильной работой.
Лучше всего у меня заработал Manjaro.

Установка:

proot-distro install manjaro

Вход в систему:

proot-distro login manjaro

Проверяем сертификаты Первым делом проверяем сертификаты.

Без этого могут не работать:

  • curl;

  • GitHub;

  • установка пакетов;

  • HTTPS‑запросы.

Устанавливаем пакет:

pacman -S ca-certificates

Проверяем наличие сертификатов:

ls -la /etc/ssl/certs/ca-certificates.crt

Если возникают ошибки — переустанавливаем пакет:

pacman -S ca-certificates --overwrite '*'

Иногда команда может зависнуть без вывода — это нормально.

После этого обновляем trust store:

update-ca-trust

Проверяем работу HTTPS:

curl -I https://github.com

Устанавливаем зависимости

Для сборки некоторых нативных модулей потребуется:

pacman -S git base-devel

Установка Node.js через NVM

Устанавливаем nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash

После установки нам любезно указывают что нужно добавить переменные окружения:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Проверяем:

nvm -v

Устанавливаем Node.js:

nvm install 22

После установки проверяем версию:

node -v

Устанавливаем pnpm

Trilium использует pnpm.

Устанавливаем:

npm install -g pnpm

Установка Trilium Server

Нам нужна ARM64-сборка TriliumNotes-Server.

Находим её тут.

Скачиваем:

curl -OL https://github.com/TriliumNext/Trilium/releases/download/v0.103.0/TriliumNotes-Server-v0.103.0-linux-arm64.tar.xz

Распаковываем:

tar -xf TriliumNotes-Server-v0.103.0-linux-arm64.tar.xz

Переходим в папку:

cd TriliumNotes-Server-0.103.0-linux-arm64/

Запускаем сервер:

./trilium.sh

Первый запуск

После запуска Trilium начинает поднимать локальный сервер.

Обычно интерфейс доступен по адресу:

http://127.0.0.1:8080

Если открывать с другого устройства в локальной сети:

http://IP\_ТЕЛЕФОНА:8080

Синхронизация с другим сервером такая же как и на других клиентах.

Где хранятся данные

Все заметки хранятся локально внутри контейнера.

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

Подводные камни

Android может выгружать Termux

Если система агрессивно экономит батарею — сервер будет останавливаться в фоне.

Нужно:

  • отключить оптимизацию батареи;

  • разрешить работу в фоне;

  • исключить Termux из энергосбережения.

ARM64 обязателен

Нужна именно ARM64-сборка Trilium.

Обычная x64-версия работать не будет.

Первый запуск может быть долгим

Особенно на слабых устройствах.

Итоги

Честно говоря, пока нет официального и нативного приложение для android, это лучшее что я пробовал.

Полностью готовый , синхронизированный сервер:

Синхронизированный клиент trilium
Синхронизированный клиент trilium
Интерфейс редактирования trilium
Интерфейс редактирования trilium

Плюсы:

  • сервер всегда под рукой;

  • всё хранится локально;

  • удобно для личной базы знаний.

Минусы:

  • Android всё ещё не лучшая серверная платформа;

  • систему приходится периодически «подкручивать»;

  • нет полноценного мобильного клиента.

Стоит ли так делать?

Как домашний self‑hosting эксперимент — однозначно да.

Если у вас уже есть сервер, просто включите синхронизацию и тогда, даже когда у вас по какой‑то причине нет интернета, вы можете делать заметки.

Как production‑решение для критически важных данных — скорее нет.

Но как способ получить полностью свой сервер заметок буквально в кармане — опыт получился очень интересный. 

Это мой первый опыт написания на Habr, ожидаю конструктивной критики и предложений.