Cloud Boxi

Syncthing: папки на телефоне и ноутбуке без чужого облака

Syncthing связывает устройства напрямую и не хранит файлы на чужом сервере. За полгода он заменил мне облачную папку на всех устройствах, но пара настроек оказалась важной.

Syncthing сравнивает папки на устройствах и передаёт изменения напрямую между ними. Соединение зашифровано, а устройства опознают друг друга по идентификаторам, которые нужно один раз подтвердить с обеих сторон. Сервера как такового нет, поэтому домашняя коробка для него просто ещё одно устройство, которое всегда в сети.

Установка на сервер

sudo apt install syncthing
sudo systemctl enable --now syncthing@box

Здесь box это имя пользователя, от которого работает служба. Веб-интерфейс слушает только локальный адрес, поэтому с ноутбука открываю его через SSH:

ssh -L 8384:127.0.0.1:8384 box@home-server

После этого он доступен на http://127.0.0.1:8384. Первым делом задайте там логин и пароль.

Устройства

На ноутбуках ставится обычный пакет. На Android официальное приложение больше не развивается, я пользуюсь Syncthing-Fork из F-Droid. На iPhone есть платное приложение Möbius Sync, но из-за ограничений системы оно синхронизирует только в открытом виде или по расписанию.

Устройства добавляются по QR-коду или идентификатору, а общие папки подтверждаются с обеих сторон.

Схема папок

ПапкаТелефонСервер
КамераТолько отправкаТолько приём
ДокументыОтправка и приёмОтправка и приём
МузыкаТолько приёмТолько отправка

Тип папки важен. Камера у меня настроена на отправку: фото, удалённое с телефона ради места, остаётся на сервере. Если бы папка была двусторонней, удаление дошло бы и до сервера.

Версии файлов

По умолчанию перезаписанный файл просто исчезает. В настройках папки на сервере включаю «Поэтапное хранение версий» со сроком 30 дней. Старые версии копятся в служебной папке .stversions, и случайно испорченный на телефоне документ можно достать обратно.

Что исключить

В корне папки создаётся файл .stignore. Он не передаётся между устройствами, так что на каждом устройстве он свой:

// Служебные файлы систем
(?d).DS_Store
(?d)Thumbs.db
(?d)desktop.ini

// Временные файлы редакторов
~$*
*.tmp

Префикс (?d) разрешает Syncthing удалить такой файл, если он мешает удалить папку.

Вне дома

Устройства находят друг друга через публичные серверы обнаружения. Если прямого пути нет, трафик идёт через ретрансляторы волонтёров. Содержимое они не видят, но скорость падает. Я оставил только прямые соединения и открыл порт 22000 на роутере: телефон вне дома синхронизируется через мобильный интернет напрямую с коробкой.

Синхронизация не бэкап. Удаление или шифровальщик разойдутся по всем устройствам за секунды. Поэтому серверная копия папок дополнительно попадает в снимки и в restic.