Polski
Zacznij

← Wszystkie szablony · Notatki i wiki

Wdróż Trilium Notes jednym kliknięciem

Hierarchiczna baza wiedzy na duże zbiory osobistych notatek

Alternatywa dla Notion, Evernote i Obsidian, hostowana u siebie.

Czym jest Trilium Notes?

Trilium Notes to darmowa aplikacja open source do notatek, stworzona z myślą o dużych osobistych bazach wiedzy, alternatywa dla Notion, Evernote i Obsidiana dla tych, którzy chcą mieć notatki na własnym serwerze. Notatki tworzą drzewo o dowolnej głębokości, a jedna notatka może być w kilku miejscach naraz. Poza tekstem sformatowanym z tabelami, obrazami i wzorami matematycznymi notatka może być kodem, kanwą Excalidraw, mapą myśli, mapą geograficzną albo mapą relacji, a atrybuty i skrypty zmieniają notatki w małe narzędzia. Każda notatka ma historię wersji, a wyszukiwanie pełnotekstowe pozwala ją znowu znaleźć.

Serwer to niemal ta sama aplikacja w przeglądarce, z widokiem przystosowanym do dotyku na telefony, a aplikacje desktopowe na Windows, macOS i Linuksa synchronizują się z nim. Chronione notatki są szyfrowane twoim hasłem, notatkę można udostępnić publicznie przez link, a web clipper zapisuje strony z przeglądarki. Ten szablon tworzy nową, pustą bazę wiedzy z podanym hasłem, zanim Trilium odpowie komukolwiek. Haczyk: Trilium jest dla jednej osoby, z jednym hasłem i bez kont dla innych, i nie ma oficjalnej aplikacji mobilnej.

Hosting Trilium Notes na Pethost

  1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
  2. Okno „Nowy projekt” otwiera się na aplikacji Trilium Notes. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: Hasło.
  3. Za minutę czy dwie aplikacja Trilium Notes działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
  4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

Pytania o Trilium Notes

Czy Trilium Notes jest darmowy?

Tak. Trilium to open source na licencji AGPL-3.0 bez płatnej wersji: serwer, aplikacje desktopowe i synchronizacja są w całości darmowe.

Czym jest TriliumNext?

To projekt społeczności, który przejął rozwój Trilium. Pierwotny autor Trilium, Zadam, przekazał mu repozytorium Trilium, a projekt znów wydaje aplikację pod nazwą Trilium Notes. Baza danych z oryginalnego Trilium otwiera się w nim bez dodatkowych kroków.

Trilium czy Obsidian: co wybrać?

Obsidian trzyma pliki Markdown w katalogu na każdym urządzeniu, ma zamknięty kod i sprzedaje synchronizację. Trilium trzyma notatki w bazie danych na twoim serwerze, jest open source i za darmo synchronizuje z nim aplikacje desktopowe. Mocne strony Obsidiana to pluginy i zwykłe pliki, a Trilium – drzewo notatek, klonowanie i wiele typów notatek.

Czy jest aplikacja Trilium na telefon?

Oficjalnej nie ma. Serwer ma interfejs mobilny dla przeglądarek w telefonach, są też aplikacje społeczności: TriliumDroid i Pocket Trilium na Androida oraz Trinote na iOS.

Czy mogę zaimportować notatki z Evernote albo plików Markdown?

Tak. Trilium importuje eksporty ENEX z Evernote i pliki Markdown, a eksportuje notatki jako Markdown albo HTML, więc twoje notatki wyjdą z niego równie łatwo, jak do niego trafiły.

Ile pamięci i miejsca na dysku potrzebuje Trilium Notes?

Trilium ma małe wymagania: około 100 MB pamięci; jego baza danych rośnie razem z notatkami i załącznikami, a obok niej leżą jego własne backupy: dzienne, tygodniowe i miesięczne. Na Pethost wystarczy mu plan Starter, z miejscem na inne aplikacje obok.

Trilium Notes: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

Kontenery: trilium (triliumnext/trilium:v0.106.1).

Wolumeny, w nocnym backupie: 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:

Więcej w kategorii Notatki i wiki