Darmowy self-hosted serwer synchronizacji Obsidiana i aplikacja web
InventTasks pozostaje rozwiązaniem local-first również po włączeniu synchronizacji: urządzenia przechowują zwykłe pliki i mogą pracować offline, natomiast Twój samodzielnie hostowany serwer przekazuje zmiany, przechowuje ograniczoną historię wersji, tworzy kopie zapasowe i udostępnia aplikację Web. Serwer jest przeznaczony dla urządzeń jednej osoby albo dla kilku odizolowanych kont użytkowników — nie służy do jednoczesnej, zespołowej edycji tego samego zadania.
Wdrożenie serwera#
Pobierz gotowy pakiet serwera z https://inventtasks.solidinvent.pl/download/inventtasks-server.zip. Zawiera plik Docker Compose, konfigurację Caddy, skrypty administracyjne i szczegółową instrukcję wdrożenia. Pakiet pobiera opublikowany, wieloarchitekturowy obraz ghcr.io/solidinvent-dev/inventtasks-server:latest; jeśli zależy Ci na przewidywalnych aktualizacjach, przypnij konkretny tag wydania. Kontener nasłuchuje na porcie 8480, a bazę SQLite i dane plików przechowuje w /data.
- Utwórz trwały wolumen dla
/data. - Przy pierwszym uruchomieniu ustaw
ADMIN_USERorazADMIN_PASSWORDo długości co najmniej ośmiu znaków. Te wartości tworzą pierwsze konto wyłącznie wtedy, gdy baza nie zawiera jeszcze żadnych kont. - Umieść przed kontenerem Caddy, Traefik, Nginx lub inne odwrotne proxy. Używaj HTTPS zawsze, gdy ruch wychodzi poza komputer lokalny lub zaufaną sieć prywatną — tokeny workspace'ów są tokenami dostępowymi typu bearer.
- Otwórz adres serwera, zaloguj się i utwórz obiekt Task manager albo Vault. Jego token synchronizacji jest wyświetlany tylko raz, więc zapisz go w menedżerze haseł. Rotacja unieważnia poprzedni token.
Awaryjna opcja ADMIN_RESET=1 przy kolejnym uruchomieniu ustawia dla konta ADMIN_USER hasło z ADMIN_PASSWORD; natychmiast potem usuń tę opcję i ponownie uruchom serwer. Ustaw ENABLE_VAULT_SYNC=0, jeśli chcesz uniemożliwić tworzenie nowych obiektów Vault. Przydatne ustawienia limitów to MAX_FILE_MB (domyślnie 50 MB) i MAX_WORKSPACE_MB (domyślnie bez limitu).
Panel umożliwia eksport pliku ZIP z bieżącymi plikami albo z pełną historią, import ZIP w trybie scalania lub zastąpienia, przywracanie usuniętych plików oraz ręczne i zaplanowane wykonywanie kopii zapasowych. Zaplanowane backupy mogą być uruchamiane codziennie o ustalonej godzinie albo co określoną liczbę godzin i zachowywać wybraną liczbę kopii w BACKUP_DIR. Pakiet wdrożeniowy zawiera także narzędzie czytelnego eksportu, które przekształca /data lub kopię zapasową serwera w zwykły vault Obsidian — opcjonalnie z historią, wyłącznie z treścią, z linkami względnymi, godziną terminu w nazwie pliku oraz nagłówkami po angielsku lub polsku.
Aby niezawodnie zabezpieczyć dane serwera, korzystaj z tych eksportów i kopii zapasowych albo wykonaj spójny snapshot /data po zatrzymaniu usługi. Nie polegaj na zwykłym kopiowaniu katalogu działającej bazy SQLite, ponieważ taka kopia może być niespójna. Po wdrożeniu i każdej aktualizacji sprawdź endpoint /healthz.
Synchronizacja workspace'u InventTasks#
Utwórz na serwerze obiekt typu Task manager, a następnie otwórz dla lokalnego workspace'u Settings → InventTasks → File sync (self-hosted):
| Pole | Znaczenie |
|---|---|
| Enable sync | Uruchamia w tle synchronizację plików znajdujących się w głównym katalogu tego workspace'u InventTasks i jego podkatalogach |
| Server URL | Na przykład https://sync.example.com |
| API token | Jednorazowy token synchronizacji z panelu serwera; nie jest to klucz External API |
| Server workspace ID | ID obiektu Task manager; użyj tego samego ID na każdym urządzeniu, które ma go współdzielić |
| Full check interval | Okresowy pełny skan (co 1–120 minut); lokalne zmiany trafiają do kolejki wcześniej |
| Live updates | Utrzymuje połączenie WebSocket, aby szybciej wykrywać zmiany z innych urządzeń |
| Keep conflict copies | Zapisuje przegraną lokalną wersję obok pliku po konflikcie |
Użyj Test connection, a następnie Sync now. Przy pierwszym połączeniu, gdy zarówno lokalny workspace, jak i obiekt na serwerze zawierają dane, InventTasks zapyta, czy scalić zawartość, nadpisać serwer, nadpisać pliki lokalne, czy anulować operację. Zwykle najbezpieczniejszym wyborem jest Merge. Nowy, pusty obiekt serwera przyjmuje pierwszy lokalny upload bez tego pytania.
Gdy dwa urządzenia zmienią ten sam plik, wygrywa wersja z nowszym czasem modyfikacji, a przegrana treść trafia do historii wersji na serwerze. Historia jest ograniczona — domyślnie obejmuje 30 dni i maksymalnie 20 wersji dla każdej ścieżki — a operator serwera może zmienić te wartości. Ochrona przed masowym usuwaniem wstrzymuje podejrzane pobieranie zmian i pozwala przywrócić pliki na serwerze, zaakceptować ich lokalne usunięcie albo odłożyć decyzję. Opcjonalne kopie konfliktów stanowią dodatkowe zabezpieczenie lokalne, lecz nie zastępują kopii zapasowych.
Wcześniejsze wersje możesz przeglądać i przywracać w Settings → File sync → Version history albo za pomocą polecenia z palety. Podczas przywracania bieżąca, zastępowana treść jest najpierw zapisywana w historii, o ile pozwalają na to ustawienia retencji.
Darmowa synchronizacja self-hosted całego vaulta Obsidian#
Vault sync działa niezależnie od workspace'u z zadaniami i można go używać nawet wtedy, gdy nie skonfigurowano żadnego workspace'u InventTasks. Zapewnia darmową, samodzielnie hostowaną alternatywę dla Obsidian Sync dla pozostałej zawartości vaulta: notatek, załączników, obrazów i innych plików. Główne katalogi workspace'ów InventTasks, .git, kosz oraz pliki stanu wykonawczego InventTasks są wykluczone, aby zadania nie były przesyłane dwukrotnie.
- Utwórz na serwerze obiekt typu Vault i skopiuj jego jednorazowy token.
- Otwórz Settings → InventTasks → Vault sync (self-hosted) i wpisz adres serwera, token oraz ID obiektu Vault na każdym uczestniczącym urządzeniu.
- Przejrzyj opcjonalne ustawienia dołączania i wykluczania:
| Opcja | Znaczenie |
|---|---|
Sync Obsidian settings (.obsidian) |
Dołącza motywy, snippets i obsługiwane ustawienia aplikacji; układ workspace'u i pliki cache zależne od urządzenia nadal są wykluczone. Domyślnie wyłączone |
Sync community plugins (.obsidian/plugins) |
Dołącza kod i dane innych wtyczek; własne ustawienia urządzenia i poświadczenia InventTasks pozostają wykluczone. Domyślnie wyłączone |
| Skip new files larger than (MB) | Lokalny limit uploadu dla plików, których serwer wcześniej nie widział; 0 oznacza brak limitu po stronie wtyczki, lecz nadal obowiązuje limit serwera |
| Excluded paths | Jeden wzorzec w wierszu: Folder/ pomija poddrzewo, *.mp4 dopasowuje to rozszerzenie, a # rozpoczyna komentarz |
Vault sync korzysta z tych samych opcji pierwszego połączenia, aktualizacji na żywo, rozstrzygania konfliktów na korzyść ostatniego zapisu, ograniczonej historii wersji, narzędzi przywracania i ochrony przed masowym usuwaniem co synchronizacja workspace'u z zadaniami. Nie synchronizuj tych samych plików jednocześnie przez InventTasks Vault sync oraz inną dwukierunkową usługę, na przykład Obsidian Sync.
Aplikacja Web i przeglądarka Vault#
Ten sam kontener udostępnia aplikację Web pod ścieżką /. Zaloguj się nazwą użytkownika i hasłem konta; sesyjne pliki cookie mają flagę HttpOnly. Konta są od siebie odizolowane, a każde z nich może posiadać wiele obiektów Task manager i Vault.
Obiekt Task manager otwiera interfejs InventTasks z widokami List, Board, Calendar, Table, Gantt, Timeline i Docs, a także wyszukiwaniem oraz edycją danych zapisanych na serwerze. Aktualizacje na żywo pokazują zmiany wprowadzone przez inne połączone klienty. Aplikacja Web nie obsługuje obecnie powiadomień zewnętrznych, synchronizacji kalendarza, przyrostowych kopii zapasowych wtyczki ani linków obsidian://. Nie udostępnia też surowego edytora plików .md dla zasobów menedżera zadań.
Obiekt Vault otwiera przeglądarkę plików. Umożliwia wyświetlanie podglądu Markdown, obrazów, plików audio i wideo oraz PDF; tworzenie notatek i folderów; edycję Markdown oraz zwykłego tekstu; wysyłanie, pobieranie, zmianę nazw, przenoszenie i usuwanie plików; przechodzenie przez wikilinki; a także przeglądanie i przywracanie wersji plików. Operacje te modyfikują kopię na serwerze, a następnie synchronizują się ze skonfigurowanymi urządzeniami.
Zewnętrzne API#
Na potrzeby automatyzacji włącz External API osobno dla wybranego obiektu serwera, w trybie Off, Read-only albo Full. API używa dedykowanego klucza ITX.…, a nie tokenu synchronizacji. Klucz jest wyświetlany tylko raz i przechowywany na serwerze w postaci hashu. Konsola API znajduje się pod /api-console, specyfikacja OpenAPI 3.1 pod /api/ext/v2/openapi.json, a pełny przewodnik w dokumentacji API. Pozostaw API wyłączone, jeśli go nie potrzebujesz, wybieraj tryb o najwęższym zakresie uprawnień i zmień klucz, jeśli mógł zostać ujawniony.