Лучшие self-hosted альтернативы Dropbox: сравнение решений
Сравнение Nextcloud, Seafile и Syncthing для личного облака. Разбор топологии синхронизации, реальных затрат на VPS и объяснение, почему синхронизация не заменяет резервное копирование.
Какую альтернативу Dropbox для self-hosted размещения выбрать?
Существуют четыре альтернативы Dropbox для self-hosted размещения, заслуживающие внимания: Nextcloud, Seafile, Syncthing и объектное хранилище с клиентским приложением. Они не являются взаимозаменяемыми. Nextcloud подходит для семьи или небольшой команды, где другим пользователям необходимо передавать файлы. Seafile подходит для отдельного пользователя или команды, синхронизирующей огромное количество мелких файлов, где скорость синхронизации важнее того, как данные представлены на диске. Syncthing подходит для одного пользователя, синхронизирующего собственные устройства, когда никому извне не нужно предоставлять ссылки на файлы. Объектное хранилище подходит для архивов: это дешевое место для данных, к которым вы редко обращаетесь.
Выбирайте решение исходя из принципа работы синхронизации, прежде чем сравнивать функциональные возможности. Списки функций выглядят одинаково у всех решений. Топология, то есть понимание того, на какой машине хранится эталонная копия, с которой сверяются остальные устройства, определяет, будете ли вы довольны выбором через 6 месяцев.
Топология синхронизации: сервер-источник или равноправные узлы без сервера
На рассмотрении находятся две архитектуры, и большая часть дальнейших рекомендаций зависит от того, какую из них вы выберете.
Сервер-источник. Именно так работают Nextcloud, Seafile и объектные хранилища. Одна машина, обычно VPS (виртуальный выделенный сервер), содержит эталонную копию данных. Все устройства взаимодействуют с этой машиной. Ваш ноутбук может быть выключен месяц, затем подключиться и синхронизировать изменения. Телефон с 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 ГБ оперативной памяти приложение запустится, но при большой загрузке или выполнении длительной команды occ обслуживания сработает OOM-killer (out-of-memory killer). Считайте 2 ГБ минимальным порогом для нескольких пользователей и готовьтесь к 4 ГБ, если планируете включать дополнительные приложения. Еще одна сложность — обновления: приложения из магазина привязаны к конкретной версии ядра, поэтому перед обновлением убедитесь, что все критически важные для вас приложения поддерживают следующую мажорную версию.
Nextcloud замедляется, когда в одной учетной записи хранятся сотни тысяч мелких файлов, так как каждый файл — это строка в таблице кэша и реальный файл на диске, а настольный клиент обрабатывает их по одному. В масштабах домашнего использования это не является проблемой. Вопросы подбора ресурсов, TLS (transport layer security) и резервного копирования разобраны в установке Nextcloud на базе Docker с TLS и резервным копированием — переходите туда, когда примете решение.
Предупреждение об области применения. Nextcloud также может управлять вашим календарем, контактами, заметками и библиотекой фотографий, но каждое включенное приложение добавляет фоновую нагрузку и еще один потенциальный фактор, блокирующий обновление. Если ваша основная задача — фотографии, специализированный инструмент справится с этим лучше: см. Immich как self-hosted замену Google Photos. Если вам нужны документы и вики-системы, обратите внимание на self-hosted альтернативы Notion, вместо того чтобы перегружать файловый сервер. Редактирование документов в браузере требует отдельного сервера, а не просто приложения внутри Nextcloud, поэтому сравните OnlyOffice и Collabora, прежде чем рассчитывать, что лимита в 2 ГБ вам будет достаточно.
Seafile: разработано для огромного количества мелких файлов
Seafile разбивает каждый файл на блоки и сохраняет их во внутреннем объектном хранилище, адресуемом по хешу содержимого — по тому же принципу, который использует git для своих объектов. Единицей синхронизации и общего доступа является библиотека, а не дерево папок. Поскольку клиент загружает блоки и один коммит вместо выполнения отдельного запроса для каждого файла, синхронизация директории со 100,000 мелких файлов завершается значительно быстрее, чем при использовании протоколов, работающих с файлами по отдельности. Идентичные блоки сохраняются один раз, поэтому вторая копия большого файла практически не занимает дополнительного места.
Обратной стороной является то, что ваши файлы на сервере перестают быть файлами. Откройте директорию хранения, и вы увидите объектные файлы с шестнадцатеричными именами. Чтобы извлечь данные, потребуется клиент Seafile или собственные инструменты экспорта и fsck от Seafile. Резервное копирование по-прежнему работает, так как эти объекты являются обычными файлами, но вы не сможете восстановить одну электронную таблицу с помощью cp. Решите сейчас, приемлемо ли это, так как именно об этом люди чаще всего жалеют впоследствии.
Seafile выпускает Community Edition и платную Professional Edition, при этом границы функциональности между ними меняются от релиза к релизу, поэтому ознакомьтесь с текущими условиями на их сайте, прежде чем планировать использование конкретной функции в команде. Существуют официальные настольные и мобильные клиенты. Зашифрованные библиотеки шифруются на стороне клиента, поэтому сервер хранит зашифрованный текст, который он не может прочитать. Потеря парольной фразы делает библиотеку нечитаемой, в том числе и для вас. Открытие зашифрованной библиотеки в браузере означает передачу этой парольной фразы веб-сессии, поэтому наиболее надежная версия этой гарантии обеспечивается настольными и мобильными клиентами.
Потребление ресурсов близко к Nextcloud. Вы запускаете базу данных, кэш в оперативной памяти и два процесса приложения, поэтому 2 GB — это снова разумный минимум.
Syncthing: отсутствие необходимости входа в систему
Syncthing представляет собой единый бинарный файл на языке Go. Он отслеживает папки, находит узлы через сервер обнаружения или ретранслятор и синхронизирует данные напрямую между устройствами. Здесь нет учетных записей и страниц входа для пользователей, с которыми вы синхронизируетесь. Вы связываете два устройства по их 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), который можно развернуть самостоятельно с помощью MinIO или арендовать у провайдера. Доступ к нему осуществляется через инструменты: rclone из командной строки или десктопный клиент, который монтирует бакет как диск. Если вы предпочитаете просматривать содержимое бакета через веб-интерфейс, а не через оболочку, воспользуйтесь инструментами из этого сравнения файловых менеджеров для self-hosted решений: они используют S3-бакет в качестве бэкенда и добавляют поверх него собственные ссылки для общего доступа. Общий доступ реализуется через presigned URL — ссылку, которую вы генерируете с заданным временем жизни. Версионирование — это настройка бакета: Bucket versioning, off by default, поэтому включите его при создании бакета, так как на уже загруженные объекты оно не распространяется.
Ошибкой будет рассматривать бакет как папку для синхронизации. По умолчанию ничто не отслеживает вашу директорию Documents. rclone bisync выполняет двустороннюю синхронизацию, и документация rclone прямо указывает на необходимость осторожного обращения с этой функцией. Объектное хранилище лучше всего подходит для фоновых задач: в качестве цели для резервного копирования или уровня хранения данных для приложения. В статье Self-hosted S3-совместимое объектное хранилище на базе MinIO рассматривается серверная часть.
Ресурсные затраты здесь специфичны. MinIO представляет собой один бинарный файл и потребляет минимум ресурсов в простое. Основные расходы приходятся на дисковое пространство, а на VPS это означает аренду блочного тома с оплатой за гигабайт, плюс стоимость исходящего трафика при передаче объектов. Ни то, ни другое не учитывается в 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 позволяют создавать публичные ссылки с опциональной защитой паролем и сроком действия. Объектное хранилище предоставляет предварительно подписанный URL (presigned URL), который автоматически перестает работать по истечении заданного времени. У Syncthing нет решения для этой задачи. Его модель обмена данными основана на сопряжении устройств: другой человек должен установить Syncthing, предоставить вам ID устройства и принять папку.
Какой объем диска нужен серверу?
Для основного сервера планируйте объем, равный полному размеру общих данных, плюс место для истории версий и корзины, плюс рабочее пространство для текущих загрузок. Историю версий часто недооценивают: хранение каждой версии файла размером 2 GB, который меняется ежедневно, быстро занимает место, поэтому заранее настройте политику хранения. Размещение данных на отдельном томе защищает корневую файловую систему от переполнения, при котором заполнение диска останавливает работу всего сервера, а не только одной загрузки.