Українська
Почати

← Усі шаблони · Нотатки й вікі

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

Ієрархічна база знань для великих колекцій особистих нотаток

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

Що таке Trilium Notes?

Trilium Notes — безкоштовний застосунок для нотаток із відкритим кодом, створений для великих особистих баз знань, альтернатива Notion, Evernote та Obsidian для тих, хто хоче тримати нотатки на власному сервері. Нотатки утворюють дерево будь-якої глибини, а одна нотатка може бути в кількох місцях одночасно. Окрім форматованого тексту з таблицями, зображеннями й математичними формулами, нотатка може бути кодом, полотном Excalidraw, картою думок, географічною картою або картою зв’язків, а атрибути й скрипти перетворюють нотатки на невеликі інструменти. Кожна нотатка зберігає історію своїх версій, а повнотекстовий пошук допоможе знову її знайти.

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

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

  1. Ви входите в Pethost — з ключем доступу, через 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:

Ще в категорії «Нотатки й вікі»