Поиск по сайту:

Как установить и настроить Syncthing для синхронизации каталогов в Ubuntu 14.04


Введение

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

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

Предпосылки и цели

Для выполнения этого руководства вам потребуется доступ к двум экземплярам сервера Ubuntu 14.04.

Для целей данного руководства мы будем называть эти серверы:

  • первый сервер
  • второй сервер

Это будут равноправные партнеры, поэтому нет первичных/вторичных отношений. У вас должна быть настроена обычная учетная запись пользователя для каждого из них (вы можете узнать, как это сделать, выполнив шаги 1-4 в нашем руководстве по начальной настройке сервера для Ubuntu 14.04 здесь).

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

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

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

Первоначальная загрузка и установка

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

Чтобы найти последнюю упакованную версию, вы можете перейти на страницу выпусков на GitHub. Внизу есть кнопки для каждого типа операционной системы.

Если ваши системы Linux являются 32-разрядными, выберите вариант, начинающийся с \syncthing-linux-386-.... Если используемые вами серверы являются 64-разрядными, выберите сервер с пометкой \syncthing-linux-amd64-.... Не загружайте файл на локальный компьютер. Вместо этого щелкните правой кнопкой мыши соответствующий файл и выберите «Копировать адрес ссылки» или любой другой аналогичный вариант, который у вас есть.

Мы загрузим эти файлы с помощью команды wget на каждом из наших серверов. На своих серверах введите wget с пробелом и вставьте скопированную ссылку. Версия и архитектура системы могут отличаться для вас:

cd ~
wget https://github.com/calmh/syncthing/releases/download/v0.8.15/syncthing-linux-amd64-v0.8.15.tar.gz

Теперь мы можем распаковать архив, набрав:

tar xzvf syncthing*.tar.gz

Перейдите во вновь созданный каталог:

cd syncthing*

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

Сделайте это с привилегиями sudo, набрав:

sudo cp syncthing /usr/local/bin

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

cd ~
rm -rf syncthing*

Выполните все вышеперечисленные шаги на обоих ваших серверах.

Теперь приложение установлено, но нам нужно сделать еще несколько вещей, прежде чем оно будет готово к использованию.

Измените параметры графического интерфейса, чтобы разрешить удаленный просмотр

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

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

Чтобы создать файл автоматически, мы можем ненадолго запустить службу. Введите команду syncthing, чтобы запустить это:

syncthing

Процесс syncthing не является демоном, что означает, что он работает в текущем сеансе оболочки (мы обойдем это, внедрив на мгновение сценарий Upstart). Он запустит процесс и создаст некоторые необходимые файлы.

Через мгновение вы увидите информационное сообщение о вашем Node ID, которое выглядит так:

[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]

Когда вы видите это, это означает, что процесс инициализирован правильно. Теперь мы можем остановить процесс, набрав:

CTRL-C

Это остановит процесс и снова даст нам контроль над терминалом.

Теперь мы можем редактировать созданный файл конфигурации. Откройте файл в текстовом редакторе:

nano ~/.config/syncthing/config.xml

Найдите раздел, посвященный графическому интерфейсу. Это должно выглядеть так:

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

Единственное изменение, которое нам нужно сделать, это заменить адрес локального хоста (127.0.0.1) на 0.0.0.0, который представляет все сетевые интерфейсы. Этот раздел будет выглядеть так, когда вы закончите:

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

Сохраните и закройте файл, когда закончите. Позже мы выполним более обширную настройку через веб-интерфейс.

Опять же, выполните эти процедуры на обоих серверах, которые вы настраиваете.

Создайте сценарий Upstart для обработки состояний службы

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

Сценарий Upstart, который мы будем использовать, взят из сообщения на форумах Syncthing. Создайте и откройте файл Upstart с привилегиями root в вашем редакторе, набрав:

sudo nano /etc/init/syncthing.conf

Внутри мы будем использовать следующие строки для управления нашим процессом Upstart:

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/local/bin/syncthing

respawn

Давайте рассмотрим, что это значит.

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

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

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

Затем мы устанавливаем путь к фактической команде, которую мы собираемся выполнить. Наконец, мы используем respawn, чтобы указать Upstart на автоматический перезапуск процесса, если он был остановлен преждевременно. Это используется для автоматического перезапуска процесса (чисто), когда процесс Syncthing пытается перезапуститься внутри себя.

Когда вы закончите, сохраните и закройте файл.

Теперь вы можете запустить службу, набрав:

sudo initctl start syncthing

Выполните вышеуказанные шаги на обоих ваших серверах.

Настройка безопасности в веб-интерфейсе

Наконец-то мы готовы настроить наши экземпляры через веб-интерфейс пользователя.

Войдите в каждый из интерфейсов Syncthing ваших серверов, посетив их общедоступные IP-адреса и порт 8080:

http://server1_public_IP:8080
http://server2_public_IP:8080

Вы увидите главный экран Syncthing:

Первое, что нам нужно сделать, это добавить некоторую безопасность в наш интерфейс. Перейдите в меню «Редактировать» в правом верхнем углу и нажмите на пункт «Настройки»:

С правой стороны нам нужно настроить имя пользователя и пароль для веб-интерфейса. Мы также хотим включить шифрование TLS для наших сеансов, чтобы наш трафик нельзя было перехватить в пути, установив флажок «HTTPS»:

Когда вы закончите, нажмите кнопку «Сохранить» внизу.

Вы увидите сообщение с предложением перезапустить службу, чтобы изменения вступили в силу:

Нажмите на кнопку «Перезагрузить».

Вам, вероятно, потребуется обновить страницу, чтобы изменения загрузились должным образом. Когда вы это сделаете, вы, скорее всего, столкнетесь с предупреждением SSL, которое выглядит следующим образом:

Это просто сообщает вам, что лицо, подписавшее SSL-сертификат, отсутствует в списке доверенных центров сертификации вашего браузера. Это ожидается, поскольку сертификаты являются самоподписанными. Можно безопасно нажать \Все равно продолжить, чтобы продолжить.

Затем вы получите запрос на аутентификацию для имени пользователя и пароля, которые вы настроили:

Заполните соответствующие значения и войдите в систему. Теперь ваш интерфейс более защищен от внешнего трафика.

Выполните эти шаги на обоих серверах.

Соединение двух серверов и общий доступ к каталогам

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

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

Это вызовет наложение с длинным идентификатором, который вы можете скопировать. Он также предоставит вам QR-код, если вы настраиваете приложение для смартфона. Скопируйте идентификатор первого узла.

На втором сервере щелкните меню «Редактировать» и выберите «Добавить узел».

Появится наложение с полями, которые необходимо настроить для добавления другого сервера. В поле «Идентификатор узла» вставьте идентификатор, скопированный с первого сервера. В поле «Имя узла» выберите любое описательное имя, которое вы хотели бы использовать для другого сервера. Оставьте «Адреса» как «динамические»:

Когда вы закончите, нажмите «Сохранить», чтобы добавить новый узел.

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

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

Нажмите кнопку «Изменить», чтобы настроить репозиторий. Внизу у вас будет возможность поделиться этим репозиторием с любым из настроенных вами узлов. Установите флажок, связанный с противоположным узлом, а затем нажмите «\» Кнопка «Сохранить»:

Теперь вы можете нажать кнопку «Перезагрузить», чтобы применить изменения:

Теперь любые изменения, сделанные в каталоге ~/Sync, будут отражаться на противоположном сервере. По умолчанию это будет синхронизироваться каждые 60 секунд, но это можно изменить в меню «Настройки».

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

Заключение

На этом этапе у вас должно быть два подключенных сервера, которые синхронизируют содержимое одного каталога. Вы можете легко расширить это, добавив дополнительные репозитории (каталоги) или добавив дополнительные узлы для синхронизации.

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