Self-hosted альтернативи Dropbox: порівняння
Порівняння Nextcloud, Seafile, Syncthing та object storage: топологія синхронізації, реальна ціна на малому VPS і чому sync не є backup.
Яку self-hosted альтернативу Dropbox варто використовувати?
Чотири self-hosted альтернативи Dropbox варті уваги: Nextcloud, Seafile, Syncthing і об’єктне сховище з клієнтом поверх нього. Вони не взаємозамінні. Nextcloud підходить для родини або невеликої команди, де іншим людям потрібно отримувати файли. Seafile підходить для користувача або команди, які синхронізують дуже велику кількість невеликих файлів і для яких швидкість синхронізації важливіша за спосіб зберігання даних на диску. Syncthing підходить одній людині для синхронізації власних пристроїв, якщо нікому за межами цієї групи не потрібно надсилати посилання. Об’єктне сховище підходить для архіву: це дешеві байти, які ви рідко відкриваєте.
Перш ніж порівнювати функції, визначтеся зі способом синхронізації. Списки функцій завжди виглядають однаково. Важливою є топологія, тобто те, яка машина зберігає копію, з якою узгоджуються всі інші машини. Саме це визначає, чи будете ви задоволені через шість місяців.
Топологія синхронізації: головний сервер або однорангові вузли без сервера
Є два варіанти архітектури, і більшість наведеного далі залежить від того, який із них ви оберете.
Головний сервер. Так працюють Nextcloud, Seafile і об’єктне сховище. Одна машина, зазвичай VPS (virtual private server), зберігає еталонну копію даних. Кожен пристрій підключається до цієї машини. Ноутбук може бути вимкнений протягом місяця, а після підключення самостійно синхронізувати зміни. Телефон із 6 GB вільного місця може зберігати лише частину даних, тоді як сервер зберігатиме все. Браузер може отримувати доступ до файлів, тому взагалі можливі посилання для спільного доступу.
Однорангові вузли без сервера. Так працює Syncthing. Пристрої знаходять один одного й безпосередньо обмінюються списками файлів через зашифроване з’єднання. Еталонної копії немає: файл існує лише на пристроях, які його зберігають. Два пристрої мають бути підключені одночасно, щоб зміна передалася між ними. URL, який можна комусь надіслати, немає, оскільки жодна машина не розміщує веб-сторінку.
З цього випливають чотири наслідки, з якими користувачі стикаються не одразу.
- Надсилання файлу людині, яка не встановлюватиме програмне забезпечення, потребує головного сервера. Посилання — це URL, а для URL потрібен процес, який прослуховує порт.
- Доступ до файлів із машини, якою ви не керуєте, наприклад робочого ноутбука, потребує головного сервера.
- Пристрій, який був вимкнений кілька тижнів, після ввімкнення синхронізує дані із сервера. У одноранговій схемі він синхронізує дані лише тоді, коли інший пристрій із цими даними також підключений. Тому багато користувачів Syncthing запускають один екземпляр на VPS як постійно підключений одноранговий вузол.
- Обсяг сховища розраховується по-різному. Головний сервер зберігає одну повну копію, а кожен пристрій — додатково ті дані, які він зберігає локально. Чотири однорангові вузли, які спільно використовують одну папку, зберігають чотири повні копії, оскільки кожен вузол зберігає всю папку.
Nextcloud: користувачі, групи та публічні посилання
Nextcloud — це вебзастосунок на PHP. Він зберігає ваші файли як звичайні файли в каталозі даних і відстежує їх у базі даних. Папкою можна поділитися з користувачем, групою або через публічне посилання із паролем і датою завершення дії. Історія версій увімкнена за замовчуванням, а видалені файли спочатку потрапляють до кошика. Клієнти для настільних систем підтримують Linux, macOS і Windows, а застосунки для iOS та Android є офіційними. Якщо ви відмовляєтеся від Dropbox, тому що іншим людям потрібно отримувати ваші файли, це чесна відповідь.
Ціна — складність компонентів. Звичайне встановлення використовує вебсервер, PHP-FPM (менеджер процесів PHP), базу даних на кшталт MariaDB або PostgreSQL і Redis для блокування файлів. Фонове завдання запускається кожні п’ять хвилин через cron або таймер systemd. На VPS із 1 GB пам’яті Nextcloud запуститься, але під час великого завантаження або тривалої команди обслуговування occ спрацює засіб завершення процесів через нестачу пам’яті. Вважайте 2 GB мінімальним обсягом для кількох користувачів і розраховуйте, що після ввімкнення додаткових застосунків вам, імовірно, знадобиться 4 GB. Інша ціна — оновлення: застосунки з магазину створюються для конкретного випуску ядра, тому перед оновленням перевірте, чи підтримують потрібні вам застосунки наступну основну версію.
Nextcloud сповільнюється, коли один обліковий запис містить сотні тисяч малих файлів, оскільки кожен файл є рядком у таблиці кешу файлів і окремим реальним файлом на диску, а клієнт для настільної системи обробляє їх по одному. У домашньому масштабі ця проблема не виникає. Розмір системи, TLS (безпека транспортного рівня) і резервне копіювання розглянуто в матеріалі встановлення Nextcloud у Docker із TLS і резервним копіюванням, до якого варто перейти після ухвалення рішення.
Є важливе обмеження щодо призначення. Nextcloud також може працювати з календарем, контактами, нотатками та фототекою, але кожен увімкнений застосунок додає фонову роботу й ще один компонент, який може заблокувати оновлення. Якщо насправді проблема полягає у фотографіях, спеціалізований інструмент впорається з ними краще: див. Immich як self-hosted заміна Google Photos. Якщо проблема полягає в документах і вікі, розгляньте self-hosted альтернативи Notion, а не додавайте застосунки до файлового сервера. Редагування цих документів у браузері потребує окремого сервера, а не ще одного застосунку Nextcloud, тому передбачте OnlyOffice чи Collabora, перш ніж вважати, що мінімального обсягу 2 GB буде достатньо.
Seafile: створено для роботи з дуже великою кількістю малих файлів
Seafile розділяє кожен файл на блоки та зберігає їх у внутрішньому object store, адресованому за хешем вмісту. Це той самий принцип, який git використовує для своїх об’єктів. Одиницею синхронізації та спільного доступу є library, а не дерево каталогів. Оскільки клієнт завантажує блоки й один commit замість окремого запиту для кожного файла, синхронізація каталогу зі 100,000 малих файлів завершується значно швидше, ніж за протоколом, який працює з файлами по одному. Ідентичні блоки зберігаються лише один раз, тому друга копія великого файла майже не збільшує витрати на зберігання.
Недоліком є те, що файли на сервері перестають бути звичайними файлами. Відкривши каталог сховища, ви побачите object files із шістнадцятковими іменами. Для отримання даних потрібен клієнт Seafile або власні інструменти Seafile для export і fsck. Резервне копіювання все одно працює, оскільки ці об’єкти є звичайними файлами, але відновити одну електронну таблицю за допомогою cp не можна. Вирішіть заздалегідь, чи прийнятно це, оскільки саме про цю властивість користувачі часто шкодують згодом.
Seafile має community edition і платну professional edition. Розподіл функцій між ними змінюється від release до release, тому перед плануванням командної роботи на основі певної функції ознайомтеся з актуальними умовами на їхньому сайті. Існують офіційні desktop- і mobile-клієнти. Encrypted libraries шифруються на клієнті, тому сервер зберігає ciphertext, який не може прочитати. Якщо втратити passphrase, library стане непридатною для читання, зокрема й для вас. Відкриття encrypted library у браузері означає передавання цього passphrase web-сесії, тому найсильніша версія цієї гарантії стосується desktop- і mobile-клієнтів.
Витрати на ресурси близькі до Nextcloud. Ви запускаєте database, memory cache і два application processes, тому 2 GB знову є розумним мінімумом.
Syncthing: не потрібно входити в обліковий запис
Syncthing — це один бінарний файл Go. Він відстежує папки, знаходить вузли через сервер виявлення або relay і синхронізує дані безпосередньо між пристроями. Облікових записів і сторінки входу для користувачів, з якими ви синхронізуєте дані, немає. Ви об’єднуєте два пристрої за їхніми ID і приймаєте папку з кожного боку. Серед усіх описаних варіантів цей сервіс потребує найменше обслуговування, оскільки для його роботи потрібно дуже мало компонентів.
Натомість ви повністю втрачаєте можливість ділитися файлами. У відповідному полі зазначено Device pairing only, no links. Ви не зможете надіслати посилання клієнту, бухгалтеру або родичу. Мобільні пристрої — ще один недолік: Android app, no official iOS. Власний FAQ проєкту прямо повідомляє: «Поточна команда Syncthing не планує офіційно підтримувати iOS у доступному для огляду майбутньому», оскільки iOS надто обмежує фонову обробку, через що надійна синхронізація ускладнюється. Користувачам iOS залишаються сторонні застосунки.
Ресурсів споживається мало, але є один важливий нюанс. Syncthing зберігає індексний запис для кожного синхронізованого файла, тому використання пам’яті та тривалість першого сканування залежать від кількості файлів, а не від їхнього загального розміру. Під час першого хешування великої папки процесор деякий час буде завантажений, після чого навантаження стабілізується. На найдешевшому тарифі VPS сервіс працює без проблем.
Конфлікти обробляються зі збереженням обох версій. Якщо два пристрої змінюють один файл, коли вони не можуть бачити один одного, Syncthing перейменовує одну копію та зберігає її поруч з іншою, тому ви побачите файли на кшталт notes.sync-conflict-20260802-141530-K7MB3QT.md. Дані не втрачаються. Але автоматичного об’єднання також немає, тому конфлікт потрібно вирішити вручну.
Об’єктне сховище з клієнтом: дешеве зберігання даних, а не папка синхронізації
Об’єктне сховище — це сумісний із S3 (simple storage service) bucket, розгорнутий самостійно за допомогою MinIO або орендований у провайдера. Доступ до нього здійснюється через інструмент: rclone у командному рядку або desktop-клієнт, який відображає bucket як диск. Спільний доступ надається через presigned URL — посилання, яке ви генеруєте та яке містить власний час завершення дії. Versioning — це параметр bucket: Bucket versioning, off by default. Увімкніть його під час створення bucket, оскільки він не поширюється на об’єкти, завантажені раніше.
Проблеми починаються, коли bucket використовують як папку синхронізації. За замовчуванням жоден процес не відстежує каталог Documents. rclone bisync виконує двосторонню синхронізацію, а в документації rclone прямо зазначено, що ця функція потребує обережного налаштування. Найкраще object storage працює як нижній рівень: сховище для резервних копій або storage layer для застосунку. У статті Self-hosted S3-сумісне об’єктне сховище з MinIO описано серверну частину.
Витрати на ресурси тут нетипові. MinIO складається з одного binary-файлу й у режимі простою споживає мало ресурсів. Фактичні витрати — це диск, а на VPS це block volume, орендований за обсягом у гігабайтах, а також bandwidth, який витрачається на передавання об’єктів у сховище та зі сховища. Жодна з цих статей витрат не відображається в free -h, тому перед визначенням розміру архіву прочитайте скільки насправді коштує VPS на місяць.
Порівняння спільного доступу, мобільних клієнтів і керування версіями
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"
}
]Усі 4 варіантів розподіляються за одним критерієм. Три з них дають змогу передати файл сторонній особі, якій достатньо браузера. Один із них взаємодіє лише з пристроями, якими ви вже володієте. Для пункту Seafile щодо керування версіями, Library history and snapshots, є важливе уточнення: історія зберігається окремо для кожної бібліотеки, тому видалення бібліотеки також видаляє її історію.
Забір даних назад
Вартість виходу легко перевірити зараз, але дорого виявити згодом, тому перевірте її до того, як зафіксуєте свій вибір.
Nextcloud зберігає справжні файли у звичайних каталогах, тому tar каталогу даних дає вам документи, навіть якщо застосунок більше ніколи не запуститься. Syncthing робить те саме на кожному вузлі, і це найкращий варіант для виходу з-під залежності: файли просто зберігаються на кожному пристрої. Об’єктне сховище Seafile потребує Seafile або його інструментів експорту, щоб зібрати блоки назад у файли. Для об’єктного сховища потрібен rclone або еквівалентний інструмент, який можна запустити однією командою.
Синхронізація — це не резервне копіювання, і саме через цю різницю люди втрачають дані
Кожен інструмент у цьому розділі копіює зміни між комп’ютерами. Видалення — це зміна. Видаліть папку на ноутбуці, і клієнт повідомить про це сервер. Сервер застосує зміну, а всі інші пристрої також видалять папку. Програми-вимагачі використовують той самий механізм: вони шифрують файли локально, клієнт бачить змінені файли та завантажує зашифровані версії. Синхронізація працює правильно. Але дані все одно втрачено.
Кошики та історія версій частково захищають від цього. Але термін їх зберігання спливає, їх може очистити той самий обліковий запис, через який сталася помилка, і вони зберігаються на тому самому диску, що й поточна копія. Пошкодження тому призводить до одночасної втрати файлів та їхньої історії.
Резервна копія — це окрема копія на окремому обладнанні, створена за розкладом і відновлена вами щонайменше один раз. Створюйте резервну копію бази даних під час того самого запуску, що й резервну копію файлів. Відновлення каталогу даних Nextcloud без бази даних дасть вам екземпляр, який не знає про існування цих файлів. А occ files:scan після цього відновить файли, але ви втратите спільний доступ і історію версій, що зберігалися в цих таблицях. У матеріалі Заплановане резервне копіювання за допомогою restic із VPS описано зашифрований варіант із дедуплікацією, зокрема спосіб перевірити відновлення, а не просто припускати, що воно працює.
Що я б обрав
Для більшості читачів — Nextcloud. Після Dropbox найчастіше бракує можливості надіслати посилання людині, яка ніколи нічого не встановлюватиме, і відкрити файл на телефоні. Nextcloud дає змогу робити і те, і інше за допомогою офіційних клієнтів, без платного тарифу, а 2 GB RAM — прийнятна ціна за це. Є два винятки, яких я дотримуюся. Якщо папка завжди буде лише вашою і зберігатиметься тільки на обладнанні, яким ви керуєте, використовуйте Syncthing. Тоді не потрібно виправляти вразливості сервера або захищати вебвхід. Якщо ви синхронізуєте робочий каталог із сотнями тисяч файлів, використовуйте Seafile і погодьтеся на непрозоре сховище заради швидкості. Object storage має бути під обраним рішенням як ціль для резервних копій, а не перед ним як інструмент синхронізації.
FAQ
Syncthing — це резервне копіювання мого ноутбука?
Ні. Syncthing копіює зміни між пристроями, а видалення — це така сама зміна, як і будь-яка інша. Тому файл, який ви випадково видалили, зникне з усіх спарених пристроїв протягом кількох секунд. Версіювання файлів для кожної папки допомагає відновити дані, але за замовчуванням воно вимкнене, доки ви не ввімкнете його для кожної папки. Зберігайте повноцінну резервну копію на окремому обладнанні та створюйте її за розкладом. Один раз відновіть дані з цієї копії, щоб переконатися, що відновлення працює.
Чи можна запускати Nextcloud і Syncthing на одному VPS?
Так, вони прослуховують різні порти й не конфліктують. Не вказуйте папку Syncthing на каталог даних Nextcloud. Nextcloud відстежує кожен файл у базі даних, тому файли, які з’являються на диску безпосередньо в цьому каталозі, залишаються невидимими, доки ви не виконаєте occ files:scan. Файли, видалені безпосередньо з цього каталогу, залишають у базі даних записи, що вказують на неіснуючі об’єкти. Виділіть для Syncthing окремий каталог або підключіть цей каталог до Nextcloud як зовнішнє сховище, щоб Nextcloud знав, що його потрібно перевіряти.
Який із цих сервісів дає змогу поділитися посиланням із людиною без облікового запису?
Nextcloud і Seafile створюють публічні посилання з необов’язковим паролем і датою завершення дії. Об’єктне сховище надає presigned URL, який автоматично припиняє працювати після встановленого вами часу. Syncthing не підтримує такий сценарій. Його модель спільного доступу ґрунтується на спарюванні пристроїв. Тому інша людина має встановити Syncthing, передати вам ідентифікатор пристрою та прийняти папку.
Скільки дискового простору потрібно серверу?
Для основного сервера даних закладіть повний обсяг спільних даних, додатковий простір для історії версій і кошика, а також робочий простір для завантажень, які ще тривають. Історія версій — це частина, яку часто недооцінюють. Якщо зберігати кожну версію файла розміром 2 GB, який змінюється щодня, обсяг швидко зростає, тому політику зберігання потрібно визначити заздалегідь. Розміщення даних на окремому томі не дає цьому обсягу заповнити кореневу файлову систему. Якщо диск заповниться, це зупинить роботу всього сервера, а не лише одного завантаження.