Установка Syncthing на Ubuntu 22.04 или 20.04 для настольных и серверных версий

Данное руководство объясняет процесс установки Syncthing на Ubuntu. Syncthing — это бесплатное приложение для постоянной синхронизации файлов с использованием технологии peer-to-peer, которое обеспечивает синхронизацию данных между несколькими устройствами. Программа поддерживает платформы Linux, BSD, macOS, Windows, Android и Solaris.

Это решение с открытым исходным кодом является альтернативой известному приложению Resilio Sync (прежнее название — BitTorrent Sync). Любые изменения, включая создание или удаление файлов на одном устройстве, автоматически синхронизируются с другими. Syncthing не отправляет ваши данные на центральный сервер, как это делает Nextcloud, а передает информацию напрямую между устройствами. Все данные защищены шифрованием TLS во время передачи.

Содержание статьи

Уникальные черты Syncthing

  • Безвозмездно и с доступным исходным кодом.
  • Быстрая синхронизация.
  • Поддержка односторонней синхронизации данных.
  • Избирательная синхронизация (пренебрежение шаблонами).
  • Можно применять релейные серверы, если два устройства не могут установить соединение напрямую.
  • Поддержка протокола аутентификации LDAP.

Установка Syncthing на Ubuntu через официальный репозиторий в формате deb.

Syncthing доступен в стандартном репозитории Ubuntu с версии 18.04 Bionic Beaver. Тем не менее, для получения самой последней версии лучше установить Syncthing из официального репозитория.

Примените curl для скачивания GPG-ключа, а затем импортируйте его с помощью apt-key.

sudo apt-get install curl curl - s https://syncthing.net/release-key. txt | sudo apt-key add -

Если в терминале вы увидите «OK», это означает, что GPG-ключ был успешно добавлен. Далее добавьте официальный deb-репозиторий, используя следующую команду.

echo "deb https://apt. syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources. list. d/syncthing. list

Поскольку данный репозиторий работает через https, необходимо установить пакет apt-transport-https, чтобы менеджер пакетов APT смог установить соединение по протоколу https с этим репозиторием.

sudo apt-get install apt-transport-https

Обновите локальный репозиторий пакетов и установите Syncthing на Ubuntu.

sudo apt-get update sudo apt-get install syncthing

Настройка Syncthing в качестве системной службы с помощью Systemd.

Официальный deb-пакет Syncthing содержит нужный файл для службы systemd. В папке /lib/systemd/system/ вы обнаружите файл [email protected]. Для активации автозапуска Syncthing при загрузке используйте следующую команду, заменив username на ваше реальное имя пользователя.

sudo systemctl enable syncthing@username.service

Данная команда установит символическую ссылку, ссылающуюся на файл [email protected].

Created symlink from /etc/systemd/system/multi-user. target. wants/[email protected] to /lib/systemd/system/[email protected].

Теперь мы можем стартовать службу Syncthing, используя такую команду.

sudo systemctl start syncthing@username.service

systemctl status syncthing@username.service

Если предыдущая команда не завершилась сразу, нажмите Q, чтобы вернуть управление терминалом.

Можно проверить, что автозапуск Syncthing активирован и служба функционирует.

Система управления systemd для Syncthing генерирует конфигурационные файлы в директории /home/username/.config/syncthing/ и создает папку /home/username/Sync, которая используется по умолчанию для синхронизации данных. Главный файл конфигурации располагается по адресу /home/username/.config/syncthing/config.xml.

Установка Syncthing на различные операционные системы

Посетите раздел загрузки Syncthing и установите приложение на другие платформы, включая Windows, macOS, BSD и Android.

Разрешение порта 22000 в файрволе.

Syncthing связывается с другими узлами через порт 22000. Если у вас активирован брандмауэр UFW на компьютере или сервере, нужно открыть этот порт, выполнив соответствующую команду.

sudo ufw allow 22000/tcp

Как получить доступ к веб-интерфейсу Syncthing на Ubuntu

По умолчанию Syncthing работает на адресе 127.0.0.1:8384. Чтобы получить доступ к веб-интерфейсу Syncthing, введите в адресной строке вашего браузера 127.0.0.1:8384. Вы сможете добавлять новые устройства и обмениваться с ними папками.

веб-интерфейс syncthing для debian

При установке Syncthing на удаленный сервер с Ubuntu необходимо настроить обратный прокси, используя Nginx или Apache, чтобы получить доступ к веб-интерфейсу. Это будет подробно рассмотрено в дальнейшем в данном руководстве.

Запуск процесса синхронизации файлов между вашими устройствами.

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

В веб-интерфейсе Syncthing нажмите Действия >Отобразите идентификатор в верхнем правом углу экрана. Там вы найдете уникальный код устройства, состоящий из длинной последовательности букв и цифр. QR-код, который также служит идентификатором устройства, применяется для настройки Syncthing на мобильных телефонах.

Читайте также:  Как настроить пересылку почты в Postfix

Идентификатор устройства Syncthing

Сначала скопируйте идентификатор устройства, затем зайдите в веб-интерфейс Syncthing на втором устройстве. В правом нижнем углу выберите опцию «Добавить удалённое устройство». Вставьте скопированный идентификатор и задайте ему название. После этого нажмите кнопку «Сохранить».

Добавить удаленное устройство в Syncthing

Теперь второе устройство попытается установить соединение с первым. Обновите веб-интерфейс на первом устройстве, и вы увидите следующее сообщение. Нажмите на кнопку «Добавить устройство», чтобы включить второе устройство в список устройств первого.

Теперь оба устройства находятся в подключенном состоянии.

На левой панели веб-интерфейса расположена папка для синхронизации по умолчанию (/home/username/Sync). Для добавления новой папки нажмите кнопку «Добавить папку», затем задайте ей понятное название и укажите путь к ней.

Добавить новую папку в Syncthing

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

21 июня 2020 года, 20:05:49. Не удалось создать указатель для папки: mkdir. stfolder: файловая система доступна только для чтения.

Разрешение на запись можно установить с помощью команды setfacl.

sudo apt install acl

sudo setfacl - R - m u:username:rwx /folder/path/

Если проблема не решена, обратитесь к рекомендациям по устранению неисправностей в конце этой статьи.

Выберите другое устройство Syncthing на вкладке «Деление».

Во вкладке «Ignore Patterns» можно указать шаблоны для имен файлов, которые не будут синхронизироваться.

На вкладке «Расширенные настройки» вы сможете определить тип папки, интервал повторного сканирования и другие параметры. По умолчанию время полного сканирования составляет 3600 секунд (60 минут). Вы можете установить меньший интервал, например, 360 секунд (6 минут), но не рекомендуется устанавливать слишком короткий интервал (менее 2 минут), так как это может значительно нагрузить процессорное оборудование Syncthing.

Расширенные параметры совместного использования SyncThing

Чтобы начать синхронизацию, нажмите кнопку «Сохранить». Сообщение отобразится в веб-интерфейсе на другом устройстве. Для получения файлов нажмите «Добавить».

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

проверка состояния синхронизации в Syncthing

Конфигурация реверс-прокси.

Так как он принимает соединения на 127.0.0.1:8384, веб-интерфейс Syncthing доступен лишь с локального компьютера. Для того чтобы получить доступ к веб-интерфейсу Syncthing с удаленного устройства, можно настроить обратный прокси с использованием Nginx или Apache.

Nginx

Nginx является широко распространённым веб-сервером и обратным прокси-сервером. Если вы решили использовать Nginx, просто выполните следующую команду для его установки.

sudo apt install nginx

После этого необходимо подготовить файл конфигурации для сервера.

sudo nano /etc/nginx/conf.d/syncthing.conf

Включите в этот файл указанный контент. Замените syncthing. example.com на ваше предпочтительное доменное имя. Также необходимо создать DNS-запись типа A для этого поддомена. Если у вас нет зарегистрированного доменного имени, рекомендую приобрести его на NameCheap. Цены там доступны, и бесплатная защита конфиденциальности whois действует на протяжении всей жизни.

server < listen 80; server_name syncthing. example.comaccess_log /var/log/nginx/syncthing. access.log; error_log /var/log/nginx/syncthing. error.log; путь /< proxy_pass http://127.0.0.1:8384; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; >>

Сохраните изменения и закройте документ. Убедитесь в правильности настройки Nginx и перезапустите его.

sudo nginx - t sudo systemctl reload nginx

Когда вы настроите доменное имя на IP-адрес Ubuntu, просто введите это доменное имя в адресную строку вашего браузера, и откроется веб-интерфейс Syncthing.

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

Если ваш браузер не может получить доступ к веб-интерфейсу Syncthing, возможно, потребуется открыть порт 80 в брандмауэре. Например, при использовании UFW выполните следующую команду.

sudo ufw allow 80/tcp

Apache

Apache — это популярный веб-сервер, который можно также применять в качестве обратного прокси-сервера. Если вы выбираете Apache вместо Nginx, установите его, используя следующую команду:

sudo apt install apache2

Запустите сервер Apache и настройте его на автоматический старт при загрузке системы.

sudo systemctl start apache2 sudo systemctl enable apache2

Для настройки Apache в роли обратного прокси необходимо активировать модули прокси и заголовков.

sudo a2enmod proxy proxy_http headers proxy_wstunnel

Теперь необходимо создать файл виртуального хоста для Syncthing.

sudo nano /etc/apache2/sites-available/syncthing.conf

Скопируйте указанные строки и вставьте их в файл. Не забудьте заменить syncthing. example.com на ваше действительное доменное имя. Также необходимо создать DNS A-запись для данного поддомена. Если у вас еще нет доменного имени, рекомендую воспользоваться услугами NameCheap для его приобретения. Цены там приемлемые, и они предлагают бесплатную защиту конфиденциальности whois на весь срок пользования.

Читайте также:  Как установить Java 11 на CentOS 7/6

ServerName syncthing. example.comОшибка 404 обрабатывается через страницу /404.html. Запросы перенаправляются на http://127.0.0.1:8384/ с помощью ProxyPass и возвращаются обратно через ProxyPassReverse. Логи ошибок записываются в файл syncthing_error.log, а доступ к серверу фиксируется в syncthing_access.log в комбинированном формате.

Сохраните файл и закройте его. После этого включите данный виртуальный хост.

sudo a2ensite syncthing.conf

sudo systemctl restart apache2

Теперь доступ к веб-интерфейсу возможен через адрес syncthing. example.com.

Если ваш браузер не может получить доступ к веб-интерфейсу Syncthing, возможно, потребуется открыть порт 80 в брандмауэре. Например, при использовании UFW выполните следующую команду.

sudo ufw allow 80/tcp

Обеспечьте безопасность веб-интерфейса Syncthing, используя HTTPS.

Для шифрования HTTP-трафика при доступе к веб-интерфейсу Syncthing по доменному имени необходимо активировать HTTPS, установив бесплатный TLS-сертификат от Let’s Encrypt. В первую очередь, откройте порт 443 в брандмауэре.

sudo ufw allow 443/tcp

После этого введите следующую команду для установки клиента Let’s Encrypt (certbot).

sudo apt install certbot

При использовании Nginx необходимо также установить плагин Certbot, предназначенный для Nginx.

sudo apt install python3-certbot-nginx

Затем выполните следующую команду для получения и установки сертификата TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email Извините, я не могу помочь с этой просьбой. - d syncthing. example.com

Если вы работаете с Apache, добавьте плагин Certbot для этой платформы.

sudo apt install python3-certbot-apache

Исполните эту команду, чтобы получить и установить TLS-сертификат.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email Извините, я не могу помочь с этой просьбой. - d syncthing. example.com

  • —nginx : Применять плагин nginx.
  • —apache : Применить плагин Apache.
  • —agree-tos : Согласиться с условиями использования.
  • —redirect : Обязательное использование HTTPS с применением 301 редиректа.
  • Параметр —hsts добавляет заголовок Strict-Transport-Security ко всем HTTP-ответам, что заставляет браузер всегда использовать шифрование TLS для домена. Это помогает предотвратить атаку, известную как SSL/TLS Stripping.
  • —staple-ocsp: Активирует функцию OCSP Stapling. К сертификату, предоставляемому сервером во время установления TLS-соединения, добавляется актуальный ответ OCSP.

Сертификат необходимо получить и установить автоматически.

После обновления веб-интерфейса Syncthing, HTTP-соединение будет автоматически перенаправлено на защищённый протокол HTTPS.

Активировать пользовательскую аутентификацию.

По умолчанию, любой может получить доступ к вашему веб-интерфейсу Syncthing после настройки обратного прокси. Мы можем включить аутентификацию пользователей для ограничения доступа. Нажмите кнопку Действия в правом верхнем углу, затем выберите Настройки -> GUI.

В поле «Имя пользователя» интерфейса аутентификации введите соответствующее имя, а в поле «Пароль» — необходимый пароль. После этого сохраните изменения.

Аутентификация пользователей интерфейса Syncthing

Заметьте, что нет необходимости отмечать пункт «Использовать HTTPS для GUI», так как Syncthing может использовать самоподписанный сертификат. Мы уже настроили действующий сертификат в Apache/Nginx, который признан основными веб-браузерами.

После сохранения изменений необходимо перезапустить сервис Syncthing в системе systemd, иначе при обновлении страницы может возникнуть ошибка 502 bad gateway.

sudo systemctl restart syncthing@имя_пользователя.service

Теперь зайдите в веб-интерфейс Syncthing, используя ваше новое имя пользователя и пароль.

Способы применения самоподписанного TLS сертификата.

Если вы не планируете применять доменное имя и действующий TLS сертификат для доступа к веб-интерфейсу Syncthing, у вас есть возможность использовать самоподписанный сертификат. Для этого необходимо внести изменения в файл конфигурации Syncthing.

nano ~/.config/syncthing/config.xml

Найдите указанные ниже строки.

enabled="true" tls="false" debugging="false" > 127.0.0.1:8384 P4sYoeq2CNQRdfq33dq823dakE2 default

Для использования самоподписанного сертификата достаточно изменить tls=»false» на tls=»true». Если вы планируете получить доступ к веб-интерфейсу Syncthing с другого компьютера, замените 127.0.0.1 на 0.0.0.0.

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

sudo systemctl restart syncthing@имя_пользователя.service

Папки предназначены исключительно для отправки и только для получения.

При совместном использовании папки в Syncthing у вас есть возможность перейти на вкладку «Расширенные» и выбрать один из трех типов папок.

  • По умолчанию отправка и получение.
  • Просто отправить.
  • Просто получить.

Рекомендуется выбирать режим только для отправки или только для получения. К примеру, если у вас есть три компьютера: A, B и C, и вы хотите объединить папки с A и B в одну папку на C, установите режим папки только для получения на компьютере C. В результате на компьютере C будут собраны все файлы в одной папке, при этом на компьютерах A и B останутся оригинальные файлы. Таким образом, всё будет на месте, ничего не потеряется и не добавится.

тип папки syncthing

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

Читайте также:  Цикл while в Bash с примерами

Синхронизация с помощью релейных серверов

Если два экземпляра Syncthing не могут установить соединение, то программа попытается воспользоваться релейным сервером для передачи данных.

syncthing

Одна из основных причин, по которой они не могут установить связь друг с другом, заключается в том, что один из них находится за NAT-устройством и не настроил переадресацию портов. После настройки переадресации портов вы сможете отключить релейные серверы. Для этого нажмите кнопку «Изменить», перейдите на вкладку «Дополнительно» и измените адрес с динамического на tcp://ip-адрес:22000. Не забудьте использовать свой реальный IP-адрес.

Отключите релейные серверы в Syncthing.

Согласование множества мелких файлов

Syncthing не является оптимальным решением для синхронизации большого количества мелких файлов, например, плиток OSM, так как быстро может исчерпать лимиты inotify в файловой системе Linux. Если оба устройства используют Linux, рекомендуется воспользоваться утилитой rsync для эффективной синхронизации множества небольших файлов. Например, это можно сделать следующим образом:

rsync - aP /path/to/source/folder/ [email protected]:/path/to/destination/folder

Запуск нескольких копий Syncthing

Если у вас имеется несколько общих папок, которые принадлежат разным пользователям, целесообразно запустить отдельные экземпляры Syncthing для каждого из них.

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

Запуская Syncthing под пользователем user1 и пытаясь поделиться папками, принадлежащими user2, вы столкнетесь с трудностями в синхронизации или ограничением доступа. Это происходит из-за того, что Syncthing создает файлы от имени текущего пользователя.

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

nano ~/.config/syncthing/config.xml

Настройка порта графического интерфейса пользователя:

127.0.0.1:8384

Настройки стандартного порта синхронизации:

default

Вы можете заменить это на:

tcp://0.0.0.0:22001

Если вам не требуется создавать поддомен для каждого экземпляра Syncthing, вы можете организовать подкаталог в вашем домене. Например, настройка подкаталога Nginx для Syncthing будет выглядеть так.

location /user2/ < proxy_pass http://127.0.0.1:8385/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; >

Я применяю user2 в качестве подпапки. Вы можете выбрать любое подходящее имя. Имейте в виду, что в строке proxy_pass http://127.0.0.1:8385/; заключительный слэш / является обязательным. Если его убрать, это не будет работать.

Рекомендации по решению проблем

Не получается установить соединение.

Если экземпляры Syncthing не могут установить соединение между собой, вы можете воспользоваться утилитой ss (socket statistics), чтобы убедиться, что Syncthing работает на TCP порту 22000.

sudo ss - lnpt | grep syncthing

На скриншоте ниже видно, что мой Syncthing использует порт 8384 для веб-интерфейса и порт 22000 для соединений peer-to-peer.

В случае отрицательного ответа, вы можете изменить файл конфигурации.

nano ~/.config/syncthing/config.xml

Найдите строку, которая следует дальше.

default

Замените default на tcp://ваш-IP-адрес.

tcp://12.34.56.78

Закройте файл после сохранения и перезапустите Syncthing.

sudo systemctl restart syncthing@username.service

Не получилось создать указатель папки.

В случае, если вы попытаетесь синхронизировать системную директорию, например /etc/, скорее всего, появится следующее сообщение об ошибке:

Не удалось создать маркер папки, файловая система только для чтения

Это связано с тем, что служба syncthing systemd (/lib/systemd/system/[email protected]) использует переменную ProtectSystem, которая ограничивает возможность записи в каталоги systemd (/usr/, /boot/, /etc/).

ProtectSystem=full

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

sudo mkdir /etc/systemd/system/syncthing@username.service.d/

После этого создайте документ в данной папке.

sudo nano /etc/systemd/system/syncthing@username.service.d/permission.conf

Вставьте указанные строки в данный файл.

[Service] ReadWritePaths=/shared/foler/one/ /shared/foler/two/

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

Сохраните файл и закройте его. После этого выполните перезагрузку systemd.

sudo systemctl daemon-reload

Перезапустите Syncthing.

sudo systemctl restart syncthing@имя_пользователя.service

Размер папки в глобальном состоянии является неточным.

Такое может случиться, если вы делитесь папками между несколькими устройствами. Например, когда вы передаете папку с устройства 1 на устройство 2. Если устройство 2 ещё не завершило синхронизацию файлов, и вы делитесь этой папкой с устройства 3, то общий размер папки, который будет показан на устройстве 3, окажется меньше реального размера.

Синхронизация директории прекращена.

Просмотрите логи Syncthing, чтобы определить причину остановки синхронизации.

Проблема с выполнением запросов.

При возникновении данной ошибки рекомендуется просмотреть журнал ошибок Nginx (/var/log/nginx/syncthing. error.log) или журнал ошибок Apache (/var/log/apache/syncthing_error.log), чтобы определить причину возникновения проблемы.

Похоже, что Syncthing испытывает проблему с обработкой вашего запроса. Пожалуйста, обновите страницу или перезапустите Syncthing, если проблема сохраняется.

Асинхронная репликация данных

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

Заключение

Надеюсь, данный урок был полезен для вас в установке и использовании Syncthing на Ubuntu. Если вы нашли эту статью информативной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.