Что такое Syncthing?

Syncthing — это программа с открытым исходным кодом, которая синхронизирует папки между вашими устройствами напрямую, без центрального сервера. Проект предоставляет официальный образ syncthing/syncthing, веб-интерфейс которого прослушивает порт 8384, а протокол синхронизации использует порт 22000 для TCP и QUIC. Устройства в одной сети находят друг друга с помощью широковещательных сообщений через порт 21027.

Описание инструмента

Этот инструмент создает файл compose.yaml для Syncthing в соответствии с Docker README проекта. По умолчанию используется host networking, которое рекомендуется в README, поскольку в этом режиме Syncthing может видеть устройства в вашей локальной сети. В этом режиме инструмент удаляет переменную STGUIADDRESS, поэтому веб-интерфейс прослушивает адрес из настроек Syncthing — по умолчанию 127.0.0.1:8384. Также можно выбрать bridge mode. В этом случае инструмент публикует порт веб-интерфейса, порт синхронизации для TCP и UDP, а также порт обнаружения и предупреждает о недостатках bridge mode. Вы задаете hostname, пользователя и группу с помощью PUID и PGID, необязательные UMASK и PCAP, папку с данными и дополнительные папки с хоста. Добавляется health check, использующий адрес веб-интерфейса. Всё создается в браузере.

Возможности

  • Host networking, рекомендуемое в проекте, или bridge mode с опубликованными портами 8384, 22000/tcp, 22000/udp и 21027/udp
  • Адрес веб-интерфейса для host mode с предупреждением, если он доступен с других компьютеров
  • Bind-адрес для порта веб-интерфейса в bridge mode, например 127.0.0.1
  • PUID, PGID, UMASK и PCAP, а также hostname для имени устройства
  • Папка с данными на хосте или именованный Docker volume, который будет объявлен автоматически
  • Дополнительные папки для синхронизации, каждая из которых может быть доступна только для чтения
  • Health check из README, настроенный для порта и адреса веб-интерфейса
  • Любая другая переменная окружения, комментарии с пояснением файла и скачивание в виде compose.yaml

Примеры

Настройки по умолчанию создают пример из Docker README для Syncthing:

services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: syncthing
    network_mode: host
    environment:
      PUID: "1000"
      PGID: "1000"
      STGUIADDRESS: ""
    volumes:
      - ./st-sync:/var/syncthing
    healthcheck:
      test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
      interval: 1m
      timeout: 10s
      retries: 3
    restart: unless-stopped

Советы

  • Сохраните результат как compose.yaml и запустите его командой docker compose up -d. Затем откройте http://127.0.0.1:8384
  • Режим bridge mode по умолчанию в Docker скрывает локальные адреса ваших устройств, поэтому они подключаются медленно или через relay-серверы. По возможности используйте host mode
  • По умолчанию образ прослушивает 0.0.0.0:8384. Поэтому в host mode переменная STGUIADDRESS удаляется, а в bridge mode опубликованный порт веб-интерфейса следует привязать к 127.0.0.1, если только вам не требуется доступ к нему с других компьютеров
  • Если веб-интерфейс доступен с других компьютеров, задайте пароль для веб-интерфейса и включите TLS в настройках Syncthing
  • Папка с данными и добавленные вами папки должны быть доступны для записи пользователю и группе, указанным в PUID и PGID
  • Добавленные здесь папки отображаются в Syncthing по пути внутри контейнера, поэтому при добавлении папки в веб-интерфейсе выберите этот путь
  • Порт синхронизации остается 22000, поскольку Syncthing сообщает другим устройствам, что подключаться нужно к этому порту