![syncthing cloud bittorrentsync dropbox arudmin](https://habrastorage.org/getpro/habr/post_images/fa3/a08/bd8/fa3a08bd88dfb0af307d5df59185f099.png)
В этой статье речь пойдет про Syncthing — новое открытое кроссплатформенное приложение, работающее по модели клиент-сервер и предназначенное для синхронизации файлов между участниками (P2P). Приложение написано на языке Go и по функциональности похоже на BitTorrent Sync.
После обзора нового сервиса мы с вами попробуем установить его на Raspberry Pi и синхронизировать с ноутбуком.
Обзор системы
Для синхронизации файлов между узлами в P2P-сети был написан простой, эффективный и безопасный протокол обмена блоками Block Exchange Protocol (BEP). Программа Syncthing реализует возможности данного протокола, хотя его можно использовать в любом программном обеспечении. Разработка идёт полностью открыто, весь исходный код публикуют на Github. Протокол тоже открыт, так что любые баги можно сразу обнаружить и исправить. Программа выпускается под Mac OS X, Windows, Linux, FreeBSD и Solaris, легко настраивается через удобный веб-интерфейс, работает в локальной сети или через интернет.
вот так выглядит интерфейс административной панели:
![](https://habrastorage.org/getpro/habr/post_images/bce/fc3/a67/bcefc3a67c923aadf55567b9ab17245a.jpg)
Готовые сборки доступны на Гитхабе под все основные платформы, также на сайте имеется документация (англ.) и руководство по быстрому запуску (англ.).
Возможности программы:
- Открытый исходный код приложения и открытый протокол.
- Каждый узел в сети идентифицируется по стойкому сертификату.
- Поддержка синхронизации на уровне блоков. При маленьком изменении в большом файле будет синхронизироваться лишь изменившаяся часть.
- Отсутствие искусственного лимитирования канала
- Возможность явно указать, каким узлам будет доступна синхронизируемая директория.
- Синхронизация директорий и файлов по дате последнего изменения (пока без поддержки версионности).
- Опция «master-slave», благодаря которой другие узлы будут лишь синхронизироваться с данной директорией, но не смогут изменять её содержимое.
- Управление через удобный адаптируемый веб-интерфейс.
- Кроссплатформенность. Поддерживаются операционные системы Windows, Linux, Mac OS X, FreeBSD и Solaris. Существует неофициальный клиент для Android.
- Безопасность и приватность. Данные хранятся на клиентских машинах, не требуется взаимодействие со сторонним сервером. Поддерживается TLS.
Установка и настройка
Теперь после краткого обзора перейдем непосредственно к установке и настройке приложения. Я буду использовать домашний макбук в качестве основного хоста с веб-интерфейсом, а клиент будет установлен на Raspberry PI model B.
На макбуке
Перейдем на страницу загрузки актуального релиза и скачаем необходимый архив, для Mac OS необходимо загрузить syncthing-darwin-amd64-v0.8.13.tar.gz
список поддерживаемых на данный момент платформ:
![](https://habrastorage.org/getpro/habr/post_images/8ed/5c8/406/8ed5c84060b5022984732f43420a7d8e.jpg)
Распаковываем скачанный архив и в папке с программой запускаем файл syncthing.
![](https://habrastorage.org/getpro/habr/post_images/467/2da/ecd/4672daecd90ff7f181a221b7459e54c6.jpg)
Дожидаемся завершения программы и находим в консоли строку вида:
My ID: WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS
Это — идентификатор системы, запомните его, он пригодится нам чуть поз днее. Теперь займемся клиентом.
На Raspberry Pi
Зайдем в консоль Raspberry Pi и скачаем пакет для этой платформы:
wget https://github.com/calmh/syncthing/releases/download/v0.8.13/syncthing-linux-armv5-v0.8.13.tar.gz
Теперь распакуем и запустим сервис
tar xvzf synct*
cd synct*
./syncthing
Необходимо подождать некоторое время, пока сгенерируется уникальный ключ-идентификатор и также запомнить (записать) его.
После этого нужно добавить первый сгенерированный на ноутбуке ключ в конфигурационный файл config.xml.
nano /home/pi/.config/syncthing/config.xml
и добавить ID «ноутбука» в ветку repository, а также новый узел:
<repository id=«default» directory="/home/pi/Sync" ro=«false»>
<node id=«raspberry-pi-ID»></node>
<node id=«ваш-ID-компьютера»></node>
</repository>
<node id=«ваш-ID-компьютера» name=«Имя хоста»> <address>dynamic</address>
</node>
У меня получилось вот так
<repository id=«default» directory="/home/pi/Sync" ro=«false» ignorePerms=«false»>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D»></node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS»></node>
<versioning></versioning>
</repository>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D» name=«raspberrypi»>
<address>dynamic</address>
</node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS» name=«macbook«>
<address>dynamic</address>
</node>
Вообще, конфигурационный файл достаточно хорошо читается и в нем есть параметры, которые можно, а за дополнительной информацией можно обратиться к документации.
Настройка клиента на Raspberry Pi завершена, осталось заново запустить сервис командой
./syncthing &
Или же добавить его в автозагрузку в файле /etc/rc.local.
Проверка работы
Открываем в браузере ноутбука снова адрес http://127.0.0.1:8080 и в верхнем правом углу выбираем Edit→Add Node
![](https://habrastorage.org/getpro/habr/post_images/fdf/ced/c9d/fdfcedc9d759d5c69926b846a4dc0139.jpg)
В появившемся окне заполняем поля, указав полученный ранее ID Raspberry Pi, имя хоста. Поле Address оставляем “dynamic”.
![](https://habrastorage.org/getpro/habr/post_images/a93/a43/e7d/a93a43e7df4c2999af70ba4e59b0076f.jpg)
Попробуем синхронизировать каталоги. По умолчанию создается папка синхронизации в ~/Sync/ на каждой ноде.
Кладем файл и через некоторое время он будет синхронизирован с остальными узлами.
Теперь можно синхронизировать данные между машинами, с помощью быстрого протокола. Для обмена файлами нужно всего лишь сообщить ID своего компьютера тому человеку, с которым хотите организовать совместное хранилище.
Статистика
Нагрузка на Raspberry Pi
Из админки Syncthing:
RAM Utilization: ~ 10МБ
CPU Utilisation: ~ 1% в режиме покоя и до 60% в процессе синхронизации.
Вывод статистики подтребления памяти и процессора в момент синхронизации (htop)
![](https://habrastorage.org/getpro/habr/post_images/c79/90f/188/c7990f1889fa4f253fac0885205f0eb2.jpg)
Нагрузка Macbook Pro'13
Из админки Syncthing:
RAM Utilization: ~ 20МБ
CPU Utilisation: ~ 12 – 30 %
Скрин статистики из системной утилиты Activity Monitor
![](https://habrastorage.org/getpro/habr/post_images/ad4/1d4/b95/ad41d4b95d8390541fb0abbb1908636c.jpg)
В процессе сбора статистики обнаружил, что если админка открыта в браузере, использование процессорного времени многократно возрастает (от 5 до 40%)![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/942/91b/72a/94291b72a056c5241407a92e841729e9.jpg)
![](https://habrastorage.org/getpro/habr/post_images/942/91b/72a/94291b72a056c5241407a92e841729e9.jpg)
В то время как фоновый процесс (без админки) потребляет всего 2−4%![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/ffb/b87/0b6/ffbb870b6d01e106638c9c3d4fa15cb1.jpg)
![](https://habrastorage.org/getpro/habr/post_images/ffb/b87/0b6/ffbb870b6d01e106638c9c3d4fa15cb1.jpg)
К примеру, Bittorrent Sync потребляет 5−9%. Данные, конечно, относительные и зависят от железа других факторов, но некоторые выводы сделать все же позволяют.
Основой вывод – не оставляйте без надобности админку открытой в браузере, даже в фоновой вкладке.
Заключение
Насколько это приложение удобнее и эффективнее того же Bittorrent Sync – к которому я уже привык – покажет время. Пост написан по «горячим следам» спустя всего пару часов после обнаружения информации о Syncthing.
Пишите в комментарии свои вопросы, я планирую протестировать сервис и, постараюсь дополнить пост информацией о скорости синхронизации, нагрузке и др., если это будет интересно.
Ссылки по теме
![](https://habrastorage.org/getpro/habr/post_images/998/d00/6eb/998d006eb0dec4cdf253db4ef5d0db83.png)
![](https://habrastorage.org/getpro/habr/post_images/998/d00/6eb/998d006eb0dec4cdf253db4ef5d0db83.png)
![image](https://habrastorage.org/getpro/habr/post_images/ac2/60c/6b4/ac260c6b4b683a38a76035e30080ea57.gif)
![image](https://habrastorage.org/getpro/habr/post_images/ac2/60c/6b4/ac260c6b4b683a38a76035e30080ea57.gif)
![](https://habrastorage.org/getpro/habr/post_images/998/d00/6eb/998d006eb0dec4cdf253db4ef5d0db83.png)