Русский
Начать

← Все шаблоны · Заметки и вики

Задеплойте Trilium Notes в один клик

Иерархическая база знаний для больших коллекций личных заметок

Альтернатива Notion, Evernote и Obsidian на вашей машине.

Что такое Trilium Notes?

Trilium Notes — бесплатное приложение для заметок с открытым кодом, созданное для больших личных баз знаний, альтернатива Notion, Evernote и Obsidian для тех, кто хочет хранить заметки на своем сервере. Заметки складываются в дерево любой глубины, а одна заметка может находиться сразу в нескольких местах. Кроме форматированного текста с таблицами, картинками и формулами, заметка может быть кодом, холстом Excalidraw, ментальной картой, географической картой или картой связей, а атрибуты и скрипты превращают заметки в небольшие инструменты. Каждая заметка хранит историю версий, а полнотекстовый поиск поможет найти ее снова.

Сервер Trilium — почти то же приложение, только в браузере, с интерфейсом для телефонов, удобным для сенсорного экрана, а десктопные приложения для Windows, macOS и Linux синхронизируются с ним. Защищенные заметки шифруются вашим паролем, заметкой можно публично поделиться по ссылке, а веб-клиппер сохраняет страницы из браузера. Этот шаблон создает новую пустую базу знаний с заданным паролем еще до того, как Trilium ответит кому-либо. Подвох: Trilium рассчитан на одного человека, с одним паролем и без аккаунтов для других, и официального мобильного приложения у него нет.

Хостинг Trilium Notes на Pethost

  1. Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
  2. Окно «Новый проект» открывается на приложении Trilium Notes. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: Пароль.
  3. Через минуту-две Trilium Notes работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
  4. Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.

Вопросы про Trilium Notes

Trilium Notes бесплатный?

Да. Trilium распространяется с открытым кодом под лицензией AGPL-3.0, и платной версии у него нет: сервер, десктопные приложения и синхронизация бесплатны.

Что такое TriliumNext?

TriliumNext — проект сообщества, который продолжил развивать Trilium. Автор оригинального Trilium, Zadam, передал ему репозиторий Trilium, и теперь проект снова выпускает приложение под названием Trilium Notes. База данных из оригинального Trilium открывается в нем без дополнительных шагов.

Trilium или Obsidian: что выбрать?

Obsidian хранит файлы Markdown в папке на каждом устройстве, его код закрыт, а синхронизацию он продает. Trilium хранит заметки в базе данных на вашем сервере, его код открыт, а его десктопные приложения бесплатно синхронизируются с вашим сервером. Сильные стороны Obsidian — плагины и обычные файлы, у Trilium — дерево заметок, клонирование и множество типов заметок.

Есть ли приложение Trilium для телефона?

Официального приложения у Trilium нет. Его сервер отдает мобильный интерфейс для браузера на телефоне, а еще есть приложения от сообщества: TriliumDroid и Pocket Trilium для Android и Trinote для iOS.

Можно ли импортировать заметки в Trilium из Evernote или Markdown?

Да. Trilium импортирует экспорт Evernote в формате ENEX и файлы Markdown, а экспортирует заметки в Markdown или HTML, так что заметки уйдут из него так же легко, как пришли.

Сколько памяти и диска нужно Trilium Notes?

Trilium: небольшие требования — около 100 MB памяти; его база данных растет вместе с заметками и вложениями, а рядом с ней лежат его собственные ежедневные, еженедельные и ежемесячные бэкапы. На Pethost ему хватит тарифа Starter, и рядом останется место для других приложений.

Trilium Notes: файл Docker Compose

Шаблон — это этот compose.yaml и переменные, которые пишутся в .env проекта при его создании. Pethost запускает файл так, как он написан.

Контейнеры: trilium (triliumnext/trilium:v0.106.1).

Тома, в ночном бэкапе: data.

services:
  trilium:
    image: triliumnext/trilium:v0.106.1
    restart: unless-stopped
    environment:
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      # Requests come through the proxy: the client's own address is the one it forwards, so that
      # a stranger's wrong passwords do not lock everyone out of signing in.
      TRILIUM_NETWORK_TRUSTEDREVERSEPROXY: uniquelocal
    # A new Trilium offers its setup to whoever opens it first, then asks them for the password.
    # So while it has no password, it runs on port 8081, which nobody reaches: a new knowledge base
    # is made there with the password given, and only then does Trilium answer on 8080.
    command:
      - sh
      - -c
      - |
        set -e
        if ! node -e '
          const { DatabaseSync } = require("node:sqlite");
          const db = new DatabaseSync(process.env.TRILIUM_DATA_DIR + "/document.db", { readOnly: true });
          const row = db.prepare("select value from options where name = ?").get("passwordVerificationHash");
          process.exit(row?.value ? 0 : 1);
        ' 2>/dev/null; then
          TRILIUM_PORT=8081 node ./main.mjs &
          setup=$$!
          node -e '
            const base = "http://127.0.0.1:8081";
            const setUp = async () => {
              const status = await fetch(base + "/api/setup/status").then((r) => r.json());
              if (!status.isInitialized) {
                const made = await fetch(base + "/api/setup/new-document?skipDemoDb", {
                  method: "POST",
                  headers: { "content-type": "application/json" },
                  body: JSON.stringify({ locale: "en" })
                });
                if (!made.ok) throw new Error("new-document: " + made.status + " " + (await made.text()));
              }
              const password = process.env.ADMIN_PASSWORD;
              const set = await fetch(base + "/set-password", {
                method: "POST",
                body: new URLSearchParams({ password1: password, password2: password }),
                redirect: "manual"
              });
              if (set.status !== 302) throw new Error("set-password: " + set.status + " " + (await set.text()));
            };
            (async () => {
              let failure;
              for (let i = 0; i < 180; i++) {
                try {
                  return await setUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill $$setup
          wait $$setup || true
        fi
        chown -R node:node /home/node
        exec su -c "node ./main.mjs" node
    volumes:
      - data:/home/node/trilium-data

volumes:
  data:

Еще в категории «Заметки и вики»