Синхронизируй меня полностью… моя прелесть, Syncthing

syncthing

Намучившись с Bittorrent Sync, наконец стал виден свет в конце туннеля. Свободный Syncthing! Уже сейчас, он объективно лучше своего проприетарного аналога. Поговорим о нем.

*запись дополнена 5.10.2016

Краткое предисловие. Зачем этот софт вообще нужен? Для построения своего облачного хранилища. У всех нас есть какие то ценные файлы, которые мы боимся прое*ать потерять. Все с ума сходят как могут, строят дома всевозможные RAID массивы, закупают под это дело кучу хардов, некоторые даже пишут на болванки.. но все это жесть и от лукавого. Неудобно непрактично. А удобно так — когда ты файл изменил/добавил/удалил на одном компе, а он автоматически изменился на всех сразу. К тому же: RAID`ы разваливаются, харды сыпятся, SSD отказывают, материнки сгорают.. в общем, есть такое негласное жизненное правило — не хранить все яйца в одной корзине. Так и тут, особенно с вашими любимыми файлами — не храните их только на одном компе, чем больше — тем лучше. Ручная синхронизация, раз в месяц, в конечном счете задолбала даже меня. А файлы важные есть, и потерять их очень не хотелось бы.. именно поэтому, я в свое время впервые узнал про Bittorrent Sync и начал использовать его.

Bittorrent Sync или Syncthing? Этот вопрос мучил меня долгое время, но начал я именно с Sync. Вверху есть ссылка, где уже описана часть моих изысканий на эту тему. Изначально в нем были косяки (и касались они синхронизации больших и толстых фото), в моем случае это была моя папка Foto. В версии 2.0 до 2.3 эта папка просто не индексировалась как надо.. например, она весит 58 гиг, а проиндексировалось только 41. И все, а остального будто и нет… из-за этого бага, я эту папку синхронизировать не стал. После, вернулся я к этом вопросу уже в версии 2.3, где все вроде как пофиксили. А вот нифига! Ну да, папка теперь индексируется, но не синхронизируется.. вообще, никак. Что я только не пробовал, и мучился с обновлением этой лабуды на всех компах, и ее переустановкой, и многочасовой тормознутой переиндексацией… нифига. Ну тогда мое терпение просто закончилось и Sync я публично казнил. Я давно слышал про Syncthing, знал что проект развивается. Основное опасение было в том, что (где то прочитал в отзывах) ноды друг друга не видят. Все это фигня, на практике все оказалось намного лучше. Итак, все же Syncthing.

Король умер, да здравствует король! Свое знакомство с Syncthing я начал с версии 0.12.20. Утилита кроссплатформенная, т.е. не будет проблем с ее установкой где-либо. Очень удобная, понятный и внятный веб-интерфейс (нас не считают за дебилов, как в случае с Bittorrent Sync), все очень гибко. И что самое приятное — это все же оупенсорс, только открытие технологии. А это означает что здесь нет никаких бекдоров и прочего говна, все очень секьюрно. Но самое главное — она работает!!! Никаких тебе ограничений на количество папок и их размер, можно свободно использовать в production! Все синхронизируется как надо, с моей мега-папкой Foto все зашибись) Также есть расширенные варианты версионирования удаленных файлов в специальной корзине, причем это индивидуально настраивается для каждой папки и устройства по отдельности… короче говоря, что либо потерять тут попросту нереально. Ну что, далее я опишу как ее поставить и что она из себя представляет визуально. Для Ubuntu приятная новость — разработчики сами собирают пакеты и выкладывают их в свой репозиторий (не нужно «левых» сборок и PPA). Для Windows утилита работает в виде portable версии не требующей установки + обновляется сама, незаметно, автоматически. Но об этом чуть позже. Куда не ставь — есть нечто общее, нужно немного подшаманить при первоначальной настройке. Расслабьтесь и наберитесь чуть-чуть терпения…

 

Ставим Syncthing в Ubuntu. Итак, поехали (добавляем репозиторий, импортируем ключ, устанавливаем):

curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb http://apt.syncthing.net/ syncthing release" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing

Далее, будет первый запуск Syncthing. Дайте ему штатно запустится:

syncthing

Он там много чего напишет, бла-бла-бла. Если вы установили его на десктопе, то у вас откроется браузер и панель управления (по-умолчанию, доступ в этот веб-интерфейс доступен только вам): http://127.0.0.1:8384

Там уже можно с ней работать. Но если вы установили его на сервер, а там GUI нет, то сами зайти в свой веб-интерфейс вы не сможете. Остановите его (ctrl+c). После, надо поправить конфиги и разрешить в них удаленное управление:

nano ~/.config/syncthing/config.xml

Найти секцию (с 127.0.0.1):

<gui enabled="true" tls="false">
    <address>127.0.0.1:8384</address>
</gui>

И заменить ее на (0.0.0.0):

<gui enabled="true" tls="false">
    <address>0.0.0.0:8384</address>
</gui>

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

Настроим автозапуск Syncthing и ее работу как системной службы.

 

=========== Ubuntu 14.04 (upstart) ===========

Создаем сам скрипт:

sudo nano /etc/init/syncthing.conf

Содержимое скрипта (demouser заменить на своего юзверя):

description "Syncthing P2P sync service"

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

env STNORESTART=yes
env HOME=/home/demouser
setuid "demouser"
setgid "demouser"

exec /usr/bin/syncthing

respawn

Текстовый файл: syncthing

Дальнейший запуск и остановку нужно теперь выполнять следующей командой (запускается как демон, в фоне):

sudo initctl start syncthing
sudo initctl stop syncthing

На этом все.

 

=========== Ubuntu 16.04 (systemd) ===========

Тут отличается, десктопный и серверный варианты. Десктопный — это значит, что сервис будет включатся и выключатся при логине/выходе из системы, серверный значит просто при запуске системы.. авторизация не требуется.

Серверный.. создаем сам скрипт:

sudo nano /etc/systemd/system/[email protected]

Содержимое скрипта:

[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target
[email protected]

[Service]
User=%i
ExecStart=/usr/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=multi-user.target

Текстовый файл: systemd-server

Дальнейший запуск и остановку нужно теперь выполнять следующей командой (запускается как демон, в фоне… darkfess заменить своим юзером), включим и запустим сервис:

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

Логи и статус:

sudo journalctl -e -u [email protected]
sudo systemctl status [email protected]

… или

 

Десктопный.. создаем сам скрипт (создайте папки эти в home):

nano ~/.config/systemd/user/syncthing.service

Содержимое скрипта:

[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
Documentation=man:syncthing(1)
Wants=syncthing-inotify.service

[Service]
ExecStart=/usr/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=default.target

Текстовый файл: systemd-desktop

Дальнейший запуск и остановку нужно теперь выполнять следующей командой (запускается как демон, в фоне… user менять не нужно), включим и запустим сервис:

systemctl --user enable syncthing.service
systemctl --user start syncthing.service

Логи и статус:

journalctl -e --user-unit=syncthing.service
systemctl --user status syncthing.service

Вот и все! Настройка автозапуска завершена.

 

=========== Windows (Task Manager) ===========

О нет! Неужели мы собрались использовать эту порочную ОС, погрязшую в ереси? А почему нет? Наверняка, в хозяйстве, где-нибудь такая да есть. Так почему бы не сделать из нее дополнительную ноду? Сделаем! Суть такова: скачайте с сайта и положите куда-нить Syncthing для Windows, это portable версия и ее можно сразу запускать, а после старта переходить в веб-интерфейс (все точно так же, как описано выше).

Нюанс в том, что она запускается как обычное приложение, а не как служба.. и болтается при этом в панели. Чтобы разрулить этот вопрос и настроить ее автозапуск, нужно использовать «Планировщик» (Task Scheduler). Просто настройке по аналогии, как показано на скриншотах ниже:

После создания, там же ее можно сразу и запустить из общего списка.

 

Веб-интерфейс Syncthing

Как видите, все довольно просто, наглядно и понятно. Почти все можно настроить.

 

Выводы

It just works! Я специально не стал перехешировать все эти 100 гиг (который уже были на моих нодах, после старого синхронизатора) и дал ему возможность проявить себя. И он справился. Никаких нареканий. Идеально!

Перечислю свои сокровища. Фотки.. весь мой архив фотографий. Сейвы.. все мои сейвы с игр, начиная с Diablo 2. Бекапы бекапов сайтов.. ну и конечно же, бекапы еженедельных бекапов ноута (папки /home), в зашифрованном виде.. ессесно. Нод еще планирую добавить. Если же будете включать Syncthing на «левых» компах (которые не 100% ваши), то рекомендую хранить файлы в специальных крипто-контейнерах, типа TrueCrypt/VeraCrypt… это позволит исключить несанкционированный к ним доступ.

А я уже фантазирую на тему применения этого инструмента в продакшне) Как минимум, со старта напрашиваются бекапы бекапов + синхронизация результатов работы камер между хранилищами в разных ЦОД. Но в целом, диапазон его применения намного шире… нужно просто немножечко пофантазировать.

Синхронизируй меня полностью… моя прелесть, Syncthing: 9 комментариев

    • Это значит, что эту папку можно изменить будет только на этом сервере.. остальным серверам она будет доступна только для чтения.

  1. Минус в ужастном и корявом клиенте под андроид, соплями прикостылили исполянемый бинарь к апк и выложили в продакшн. Спасает одно — работает, главное не трогать.
    Ну и лично не нравиться веб-2.0-интерфейс, даже на неслабых машинах подтормаживает и грузит проц. Причем грузит больше, чем сам демон :-/. простенький интерфейс упростил жизнь в разы. Нахуй мне трактор с гламурными фарами ??
    Ну и еще по мелочи — спишу все на молодость.
    А вообще отличное начинание.

    • Уважаемый Павел Жирнов, программу как сумели, так и сделали или «Дареному коню в зубы не смотрят.»

  2. Уж простите ламера, но ни черта я не смог разобраться в web-интерфейсе… мне надо, чтобы конкретная папка зеркалилась в NAS. Куда прописать адрес папки, а куда адрес NAS?

    • Нужно 2 Syncthing поставить, один в одной точке, другой — в другой. В варианте с NAS, лучше всего использовать докер-контейнер и монтирование NAS по NFS к хосту, с пробросом внутрь контейнера.

    • NAS у меня тупенький… нельзя на него ничего поставить. Следовательно, Syncthing не про меня. Надо искать другую софтину.

    • Ну можно еще примонтировать по samba-cifs, без разницы, Synthing же без разницы как будет примонтирована папка.

Добавить комментарий