Alternatywy dla Dropbox: Nextcloud, Seafile czy Syncthing?
Porównanie Nextcloud, Seafile, Syncthing oraz object storage. Analiza kosztów utrzymania na VPS, różnice w topologii synchronizacji oraz wyjaśnienie, dlaczego sync to nie backup.
Którą alternatywę dla Dropbox do hostowania we własnym zakresie wybrać?
Cztery alternatywy dla Dropbox do hostowania we własnym zakresie zasługują na uwagę: Nextcloud, Seafile, Syncthing oraz pamięć obiektowa (object storage) z odpowiednim klientem. Nie są one zamienne. Nextcloud sprawdza się w gospodarstwie domowym lub małym zespole, gdzie inne osoby muszą otrzymywać pliki. Seafile jest odpowiedni dla osoby lub zespołu synchronizującego bardzo dużą liczbę małych plików, gdzie szybkość synchronizacji jest ważniejsza niż sposób przechowywania danych na dysku. Syncthing jest przeznaczony dla jednej osoby synchronizującej własne urządzenia, gdzie nikt z zewnątrz nie potrzebuje dostępu przez link. Pamięć obiektowa sprawdza się w archiwizacji: tanie bajty, do których zagląda się rzadko.
Przed porównaniem funkcji należy wybrać sposób działania synchronizacji. Listy funkcji wyglądają podobnie. Topologia, czyli określenie, która maszyna przechowuje kopię, z którą zgadzają się wszystkie pozostałe, decyduje o tym, czy po sześciu miesiącach użytkownik nadal będzie zadowolony z rozwiązania.
Topologia synchronizacji: serwer nadrzędny lub sieć równorzędna bez serwera
Dostępne są dwa modele projektowe, a dalsza część dokumentacji zależy od dokonanego wyboru.
Serwer nadrzędny. W ten sposób działają Nextcloud, Seafile oraz pamięć obiektowa. Jedna maszyna, zazwyczaj VPS (virtual private server), przechowuje kopię autorytatywną. Każde urządzenie komunikuje się z tą maszyną. Laptop może być wyłączony przez miesiąc, a po uruchomieniu samodzielnie zsynchronizuje dane. Telefon z 6 GB wolnego miejsca może przechowywać podzbiór danych, podczas gdy serwer przechowuje całość. Przeglądarka może uzyskać dostęp do plików, co umożliwia generowanie linków do udostępniania.
Sieć równorzędna bez serwera. W ten sposób działa Syncthing. Urządzenia odnajdują się nawzajem i wymieniają listy plików bezpośrednio przez szyfrowane połączenie. Żadna kopia nie jest autorytatywna: plik istnieje tylko na urządzeniach, które go posiadają. Aby zmiana została przeniesiona, dwa urządzenia muszą być w tym samym czasie online. Nie istnieje żaden URL, który można komukolwiek przekazać, ponieważ żadna maszyna nie serwuje strony.
Z powyższego wynikają cztery konsekwencje, z którymi użytkownicy często stykają się na późniejszym etapie:
- Przesłanie pliku osobie, która nie zainstaluje oprogramowania, wymaga serwera nadrzędnego. Link to URL, a URL wymaga procesu nasłuchującego na porcie.
- Dostęp do plików z maszyny, nad którą nie sprawuje się kontroli, na przykład z laptopa służbowego, wymaga serwera nadrzędnego.
- Urządzenie wyłączone przez wiele tygodni pobiera dane z serwera natychmiast po uruchomieniu. W architekturze równorzędnej synchronizacja następuje tylko wtedy, gdy inne urządzenie posiadające te dane jest również online. Dlatego wielu użytkowników Syncthing uruchamia jedną instancję na VPS jako węzeł działający w trybie ciągłym.
- Wykorzystanie pamięci masowej sumuje się inaczej. Serwer nadrzędny przechowuje jedną pełną kopię oraz dane, które każde urządzenie trzyma lokalnie. Cztery węzły współdzielące jeden folder przechowują cztery pełne kopie, ponieważ każdy węzeł utrzymuje cały folder.
Nextcloud: użytkownicy, grupy i linki publiczne
Nextcloud to aplikacja internetowa oparta na PHP. Przechowuje pliki jako zwykłe obiekty w katalogu danych, śledząc ich stan w bazie danych. Folder można udostępnić użytkownikowi, grupie lub poprzez link publiczny zabezpieczony hasłem i datą wygaśnięcia. Historia wersji jest domyślnie włączona, a usunięte pliki trafiają najpierw do kosza. Klienci desktopowi obsługują systemy Linux, macOS oraz Windows, dostępne są również oficjalne aplikacje na iOS i Androida. Jeśli powodem rezygnacji z Dropbox jest konieczność przesyłania plików innym osobom, jest to właściwe rozwiązanie.
Ceną za to są liczne komponenty. Standardowa instalacja wymaga serwera WWW, PHP-FPM (menedżera procesów PHP), bazy danych, takiej jak MariaDB lub PostgreSQL, oraz Redis do blokowania plików. Zadania w tle są uruchamiane co pięć minut przez cron lub timer systemd. Na serwerze VPS z 1 GB pamięci RAM aplikacja wystartuje, jednak duży przesył danych lub długotrwałe polecenie occ maintenance może zostać przerwane przez mechanizm out-of-memory killer. Należy przyjąć 2 GB jako minimum dla kilku użytkowników i spodziewać się potrzeby zwiększenia zasobów do 4 GB po włączeniu większej liczby aplikacji. Kolejnym wyzwaniem są aktualizacje: aplikacje z wbudowanego sklepu są tworzone pod konkretną wersję rdzenia, dlatego przed aktualizacją należy sprawdzić, czy używane rozszerzenia wspierają nową wersję główną.
Nextcloud zwalnia, gdy jedno konto przechowuje setki tysięcy małych plików, ponieważ każdy z nich stanowi wiersz w tabeli pamięci podręcznej plików oraz fizyczny plik na dysku, a klient desktopowy przetwarza je pojedynczo. W skali domowej problem ten nie występuje. Kwestie doboru zasobów, TLS (transport layer security) oraz kopii zapasowych zostały omówione w instalacji Nextcloud opartej na Dockerze z TLS i kopiami zapasowymi, co stanowi punkt wyjścia po podjęciu decyzji o wdrożeniu.
Ostrzeżenie dotyczące zakresu funkcjonalności. Nextcloud może również obsługiwać kalendarz, kontakty, notatki i bibliotekę zdjęć, jednak każda włączona aplikacja zwiększa obciążenie w tle i wprowadza kolejny element, który może zablokować aktualizację. Jeśli głównym celem jest zarządzanie zdjęciami, lepiej sprawdzi się dedykowane narzędzie: zobacz Immich jako samodzielny zamiennik Google Photos. W przypadku dokumentów i wiki warto rozważyć alternatywy dla Notion do samodzielnego hostowania zamiast rozbudowywania serwera plików o kolejne aplikacje. Edycja dokumentów w przeglądarce wymaga zazwyczaj osobnego serwera, a nie tylko aplikacji wewnątrz Nextcloud, dlatego przed założeniem, że limit 2 GB jest wystarczający, należy porównać OnlyOffice z Collabora.
Seafile: zaprojektowany do obsługi bardzo dużej liczby małych plików
Seafile dzieli każdy plik na bloki i przechowuje je w wewnętrznym magazynie obiektów, adresowanym za pomocą skrótu zawartości (hash), co jest koncepcją zbliżoną do sposobu przechowywania obiektów w git. Jednostką synchronizacji i udostępniania jest biblioteka, a nie drzewo katalogów. Ponieważ klient przesyła bloki oraz jeden commit zamiast wykonywać osobne żądanie dla każdego pliku, synchronizacja katalogu zawierającego 100 000 małych plików kończy się znacznie szybciej niż w przypadku protokołów operujących na pojedynczych plikach. Identyczne bloki są przechowywane tylko raz, więc utworzenie drugiej kopii dużego pliku nie zajmuje niemal żadnego dodatkowego miejsca.
Ceną tego rozwiązania jest fakt, że pliki na serwerze przestają być plikami w tradycyjnym sensie. Po otwarciu katalogu z danymi widoczne są pliki obiektów o szesnastkowych nazwach. Odzyskanie danych wymaga użycia klienta Seafile lub własnych narzędzi eksportu i fsck dostarczonych przez Seafile. Kopie zapasowe nadal działają, ponieważ obiekty te są zwykłymi plikami, jednak nie można przywrócić pojedynczego arkusza kalkulacyjnego za pomocą cp. Należy już teraz zdecydować, czy jest to akceptowalne, ponieważ jest to cecha, której użytkownicy często żałują w późniejszym czasie.
Seafile wydaje wersję community oraz płatną wersję professional, a podział funkcjonalności między nimi zmienia się wraz z kolejnymi wydaniami, dlatego przed zaplanowaniem wdrożenia zespołowego opartego na konkretnej funkcji należy zapoznać się z aktualnymi warunkami na stronie producenta. Dostępne są oficjalne klienty na systemy desktopowe i mobilne. Zaszyfrowane biblioteki są szyfrowane po stronie klienta, więc serwer przechowuje jedynie tekst zaszyfrowany, którego nie może odczytać. Utrata hasła oznacza, że biblioteka staje się nieczytelna, również dla właściciela. Otwarcie zaszyfrowanej biblioteki w przeglądarce oznacza przekazanie hasła do sesji internetowej, dlatego najsilniejsza wersja tej gwarancji dotyczy klientów desktopowych i mobilnych.
Zapotrzebowanie na zasoby jest zbliżone do Nextcloud. Uruchamiana jest baza danych, pamięć podręczna (cache) oraz dwa procesy aplikacji, dlatego 2 GB RAM stanowi ponownie rozsądne minimum.
Syncthing: brak konieczności logowania
Syncthing to pojedynczy plik binarny napisany w Go. Monitoruje foldery, odnajduje urządzenia partnerskie za pośrednictwem serwera discovery lub relay i synchronizuje dane bezpośrednio między urządzeniami. Nie istnieją tu konta użytkowników ani strona logowania dla osób, z którymi synchronizowane są dane. Urządzenia paruje się za pomocą identyfikatora ID i akceptuje folder po obu stronach. Jest to najmniej wymagające w utrzymaniu rozwiązanie z całego zestawienia, ponieważ wymaga uruchomienia minimalnej liczby komponentów.
Ceną za to jest brak funkcji udostępniania. Odpowiedni wpis w tabeli brzmi Device pairing only, no links. Nie można przekazać linku klientowi, księgowemu ani członkowi rodziny. Drugim ograniczeniem jest obsługa urządzeń mobilnych: Android app, no official iOS. FAQ projektu jasno określa stanowisko: „Obecny zespół Syncthing nie planuje oficjalnego wsparcia dla iOS w dającej się przewidzieć przyszłości”, ponieważ system iOS nakłada zbyt duże ograniczenia na procesy działające w tle, co utrudnia niezawodną synchronizację. Użytkownicy iOS muszą korzystać z aplikacji firm trzecich.
Zużycie zasobów jest niewielkie, przy czym warto wiedzieć o jednej kwestii. Syncthing przechowuje wpis indeksu dla każdego synchronizowanego pliku, więc zużycie pamięci oraz czas pierwszego skanowania rosną wraz z liczbą plików, a nie z ich łącznym rozmiarem. Obliczanie sum kontrolnych (hashing) dużego folderu przy pierwszym uruchomieniu obciąży procesor, ale po tym procesie zużycie zasobów spadnie. Narzędzie działa stabilnie nawet na najmniejszych planach VPS.
Konflikty rozwiązywane są poprzez zachowanie obu wersji pliku. Gdy dwa urządzenia zmodyfikują ten sam plik w czasie, gdy nie mają ze sobą połączenia, Syncthing zmienia nazwę jednej kopii i przechowuje ją obok drugiej, dzięki czemu użytkownik odnajduje pliki typu notes.sync-conflict-20260802-141530-K7MB3QT.md. Żadne dane nie są tracone. Nie następuje również automatyczne scalanie, a rozwiązanie konfliktu odbywa się ręcznie.
Magazyn obiektowy z klientem: tanie bajty, a nie folder synchronizacji
Magazyn obiektowy oznacza bucket zgodny z S3 (simple storage service), utrzymywany samodzielnie za pomocą MinIO lub wynajmowany od dostawcy. Dostęp do niego uzyskuje się za pomocą narzędzia: rclone z wiersza poleceń lub klienta desktopowego, który prezentuje bucket jako dysk. Jeśli zamiast powłoki preferowane jest przeglądanie bucketa przez stronę WWW, kilka narzędzi wymienionych w tym porównaniu samodzielnie hostowanych menedżerów plików obsługuje bucket S3 jako backend i dodaje własne linki do udostępniania. Udostępnianie odbywa się poprzez presigned URL, czyli wygenerowany link zawierający własny czas wygaśnięcia. Wersjonowanie jest ustawieniem bucketa: Bucket versioning, off by default, dlatego należy je włączyć podczas tworzenia bucketa, ponieważ nie dotyczy ono obiektów przesłanych wcześniej.
Traktowanie bucketa jako folderu synchronizacji jest błędem. Domyślnie nic nie monitoruje katalogu Documents. rclone bisync wykonuje synchronizację dwukierunkową, a dokumentacja rclone wprost wskazuje na wymaganą ostrożność. Magazyn obiektowy sprawdza się natomiast jako warstwa bazowa: cel kopii zapasowej lub warstwa przechowywania danych dla aplikacji. Samodzielnie hostowany magazyn obiektowy zgodny z S3 przy użyciu MinIO opisuje stronę serwerową.
Koszty zasobów są tutaj nietypowe. MinIO to jeden plik binarny, który w stanie spoczynku zużywa niewiele zasobów. Rzeczywisty koszt to przestrzeń dyskowa, a na VPS oznacza to wolumen blokowy wynajmowany za gigabajty, powiększony o przepustowość zużytą na przesyłanie obiektów. Żaden z tych elementów nie pojawia się w free -h, dlatego przed określeniem rozmiaru archiwum warto przeczytać ile faktycznie kosztuje VPS miesięcznie.
Porównanie udostępniania, klientów mobilnych i wersjonowania
The data behind this chart
[
{
"tool": "Nextcloud",
"sharing": "Public links, users and groups",
"mobile": "Official iOS and Android apps",
"versioning": "On by default, plus trash"
},
{
"tool": "Seafile",
"sharing": "Public links with password and expiry",
"mobile": "Official iOS and Android apps",
"versioning": "Library history and snapshots"
},
{
"tool": "Syncthing",
"sharing": "Device pairing only, no links",
"mobile": "Android app, no official iOS",
"versioning": "Optional per folder, off by default"
},
{
"tool": "Object storage",
"sharing": "Presigned URLs you generate",
"mobile": "Third party clients only",
"versioning": "Bucket versioning, off by default"
}
]Wszystkie 4 opcje zostały przedstawione w jednym wierszu. Trzy z nich umożliwiają przekazanie pliku osobie trzeciej, która dysponuje jedynie przeglądarką. Jedna z nich komunikuje się wyłącznie z urządzeniami należącymi do użytkownika. Wpis dotyczący wersjonowania w Seafile, Library history and snapshots, wymaga komentarza: historia jest przechowywana dla każdej biblioteki z osobna, więc usunięcie biblioteki powoduje utratę jej historii.
Odzyskiwanie danych
Koszty wyjścia są obecnie niskie, lecz mogą stać się wysokie w przyszłości, dlatego należy je zweryfikować przed podjęciem decyzji.
Nextcloud przechowuje rzeczywiste pliki w rzeczywistych katalogach, więc tar katalogu danych pozwala odzyskać dokumenty nawet w przypadku trwałej awarii aplikacji. Syncthing działa w ten sam sposób na każdym węźle, co stanowi najpewniejszą strategię wyjścia: pliki po prostu znajdują się na każdym urządzeniu. Magazyn obiektowy Seafile wymaga użycia oprogramowania Seafile lub narzędzi eksportujących, aby ponownie złożyć bloki w pliki. W przypadku magazynów obiektowych (object storage) wystarczy użyć rclone lub równoważnego narzędzia, co sprowadza się do wykonania jednego polecenia.
Synchronizacja to nie kopia zapasowa, a w tej luce ludzie tracą dane
Każde z opisanych narzędzi kopiuje zmiany między maszynami. Usunięcie pliku jest zmianą. Usunięcie folderu na laptopie powoduje, że klient wysyła informację do serwera, serwer ją przetwarza, a każde inne urządzenie również usuwa ten folder. Oprogramowanie typu ransomware wykorzystuje tę samą ścieżkę: szyfruje pliki lokalnie, klient wykrywa zmodyfikowane pliki i przesyła ich zaszyfrowane wersje. Synchronizacja zadziałała poprawnie. Dane mimo to przepadły.
Kosz oraz historia wersji łagodzą ten problem. Jednak elementy te wygasają, mogą zostać opróżnione przez to samo konto, które popełniło błąd, i znajdują się na tym samym dysku co bieżąca kopia. Awaria wolumenu niszczy pliki wraz z ich historią.
Kopia zapasowa to oddzielna kopia, na oddzielnym sprzęcie, wykonywana według harmonogramu, z której przynajmniej raz przeprowadzono przywracanie. Bazę danych należy kopiować w tym samym przebiegu co pliki. Przywrócenie katalogu danych Nextcloud bez jego bazy danych skutkuje instancją, która nie rozpoznaje istnienia tych plików, a późniejsze użycie occ files:scan odzyskuje pliki, ale powoduje utratę udostępnień oraz historii wersji zapisanej w tych tabelach. Zaplanowane kopie zapasowe restic z VPS opisują szyfrowaną i zdeduplikowaną wersję tego procesu, w tym sposób testowania przywracania danych zamiast zakładania, że zadziała.
Co wybrać
Dla większości czytelników będzie to Nextcloud. Użytkownicy rezygnujący z Dropboxa najczęściej odczuwają brak możliwości udostępnienia linku osobie, która nie chce niczego instalować, oraz łatwego otwierania plików na telefonie. Nextcloud realizuje obie te funkcje za pomocą oficjalnych klientów i nie posiada płatnych planów, a 2 GB pamięci RAM jest akceptowalnym kosztem. Stosuję dwa wyjątki od tej reguły. Jeśli folder jest przeznaczony wyłącznie do użytku własnego i znajduje się tylko na posiadanym sprzęcie, należy uruchomić Syncthing – pozwala to uniknąć konieczności aktualizacji serwera oraz zabezpieczania logowania przez przeglądarkę. Jeśli synchronizowany katalog roboczy zawiera setki tysięcy plików, należy wybrać Seafile i zaakceptować nieprzejrzysty format przechowywania danych w zamian za wysoką wydajność. Object storage powinien stanowić miejsce docelowe dla kopii zapasowych wybranego rozwiązania, a nie warstwę pośredniczącą w synchronizacji.
FAQ
Czy Syncthing to kopia zapasowa mojego laptopa?
Nie. Syncthing kopiuje zmiany między urządzeniami, a usunięcie pliku jest taką samą zmianą jak każda inna. Plik usunięty przypadkowo znika ze wszystkich sparowanych urządzeń w ciągu kilku sekund. Wersjonowanie plików dla poszczególnych folderów pomaga, ale jest domyślnie wyłączone, dopóki nie włączy się go dla każdego folderu z osobna. Należy przechowywać właściwą kopię zapasową na oddzielnym sprzęcie, wykonywaną zgodnie z harmonogramem, oraz przynajmniej raz przeprowadzić proces przywracania danych, aby upewnić się, że działa on poprawnie.
Czy mogę uruchomić Nextcloud i Syncthing na tym samym VPS?
Tak, nasłuchują one na różnych portach i nie wchodzą ze sobą w konflikt. Nie należy wskazywać folderu Syncthing jako katalogu danych Nextcloud. Nextcloud śledzi każdy plik w bazie danych, więc pliki, które pojawią się na dysku poza jego kontrolą, pozostaną niewidoczne do momentu uruchomienia occ files:scan, a pliki usunięte w ten sposób pozostawią w bazie danych rekordy wskazujące na nieistniejące obiekty. Należy przydzielić Syncthing osobny katalog lub podpiąć ten katalog do Nextcloud jako pamięć zewnętrzną (external storage), aby Nextcloud wiedział, że ma go monitorować.
Które rozwiązanie pozwala udostępnić link osobie nieposiadającej konta?
Nextcloud oraz Seafile umożliwiają tworzenie publicznych linków z opcjonalnym hasłem i datą wygaśnięcia. Pamięć obiektowa (object storage) oferuje wstępnie podpisane adresy URL (presigned URL), które przestają działać automatycznie po upływie ustawionego czasu. Syncthing nie posiada takiej funkcjonalności. Jego model udostępniania opiera się na parowaniu urządzeń, co oznacza, że druga osoba musi zainstalować Syncthing, podać identyfikator urządzenia (device ID) i zaakceptować folder.
Ile miejsca na dysku potrzebuje serwer?
W przypadku serwera pełniącego rolę głównego węzła należy zaplanować przestrzeń odpowiadającą pełnemu rozmiarowi udostępnianych danych, powiększoną o miejsce na historię wersji i kosz, a także o bufor na trwające przesyłanie plików. Historia wersji jest elementem często niedoszacowanym: przechowywanie każdej wersji pliku o rozmiarze 2 GB, który zmienia się codziennie, powoduje szybki przyrost zajętości, dlatego należy wcześnie ustalić politykę retencji. Umieszczenie danych na oddzielnym wolumenie chroni główny system plików przed zapełnieniem, co w przeciwnym razie mogłoby zatrzymać działanie całego serwera, zamiast ograniczyć się tylko do jednego nieudanego przesyłania.