3 мин.

Бекап с помощью Syncthing

Цель поста в том, чтобы создать инфраструктуру для произведения бекапа с локальной машины (своей рабочей) на какую-то удалённую. А дальше, например, ещё синхронизировать файлы на другую свою домашнюю машину. Но в любом случае нужно, чтобы бекапы были где-то удалённо помимо рабочей и домашней машины.

Syncthing будет подниматься с помощью Docker. А для хранения данных будет использоваться автоматически подключающийся volume со специальным плагином для DigitalOcean. В принципе, для экономии денег можно провернуть это и без отдельного волюма на DO, тогда не надо плагин ставить (пропустить пункт 2), а docker volume создать с драйвером local.

И так, начнём:

  1. Идём на DigitalOcean и покупаем сервер (ссылка реферальная, по ней $50 начислятся). Лучше помощнее, но потянет и самый дешёвый.

  2. Входим на купленную машину и устанавливаем плагин для Docker:
     $ docker plugin install rexray/dobs DOBS_TOKEN=$DIGITALOCEAN_ACCESS_TOKEN DOBS_REGION=fra1 LINUX_VOLUME_FILEMODE=0775
    

    Вместо $DIGITALOCEAN_ACCESS_TOKEN нужно подставить API-ключ, который можно найти (создать) в админке DO.

    B параметр DOBS_REGION нужно подставить ту зону, где у вас был создан сервер.

  3. Тут же на машине создаём вольюм. Если был установлен плагин (п.2):
     $ docker volume create --name=data-syncthing --opt=size=10 --driver=rexray/dobs
    

    Будет создан как docker-вольюм так и соответствующий DO-вольюм, который можно увидеть в админке DO (10Gb это $1 в месяц, размер можно скорректировать).

    Если плагин не был установлен, то можно просто создать docker-вольюм:

     $ docker volume create --name=data-syncthing --driver=local
    
  4. Клонируем проект slowprog/syncthing-docker-compose, например, в домашнюю директорию и поднимаем:
     $ cd ~
     $ git clone https://github.com/slowprog/syncthing-docker-compose.git
     $ cd syncthing-docker-compose
     $ docker-compose up -d
    

    После этого по IP-адресу сервера и порту 8384 можно зайти в админку Syncthing (а можно свой домен направить на этот IP для красоты).

  5. В админке нужно произвести небольшую конфигурацию:
    • Устанавливаем в настройках (Действие -> Настройки) во вкладке Общее красивое имя устройства т.к. в дальнейшем оно везде будет так и отображаться (хотя дефолтное норм).
    • Тут же на вкладке Общее устанавливаем Путь для папок, где все синхронизируемые папки и будут хранится. В нашем случае надо, чтобы всё было в вольюме, он подмонтирован в /sync, значит это и прописываем.
    • Дальше на вкладке Интерфейс установите имя пользователя и пароль. Это позволит скрыть админку от других. В следующий раз при открытии админки потребуется ввести эти данные. Сохраняем настройки.
    • Удаляем дефолтную папку для синхронизации (Редактировать -> Удалить).

    После этого удалённая машина готова принять наши файлы с рабочей машины.

  6. Устанавливаем Syncthing на рабочую машину. В моём случае это macOS. Но можно установить на Windows и др. Этот клиент можно сконфигурировать также (п.5), но, например, без пароля.

  7. Теперь надо, чтобы обе машины увидели друг друга. Для этого на удалённой машине посмотрите ID (Действие -> Показать ID) и в модалке Добавить удалённое устройство на рабочей машине вставьте этот ID. В этой же модалке во вкладке Предоставление доступа выделите Автопринятие. После сохранение необходимо на удалённой машине дать согласие на соединение. Таким образом можно добавить ещё устройства.

  8. Добавляем папки для бекапа на рабочей машине, чтобы пошарить среди всех пиров. В модалке Добавить папку укажите Путь к папке и ID папки, чтобы было удобно. Во вкладке Предоставление доступа выделите все те пиры, которые должны синхронизировать эту папку.

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