Проверен полностью88 148

Выбор редакцииСинхронизация файлов

Syncthing

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

Обзор

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

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

Рецепт поднимает один контейнер. Конфигурация, ключи устройства и база индексов лежат в Docker volume, синхронизируемые файлы — в каталоге на хосте. Уровень reliable не заявлен: у Syncthing нет отдельной БД, а в рецепте нет мониторинга и ресурсных лимитов.

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

Оценка безопасности

Контейнер запускается без privileged, host network и доступа к Docker socket, с no-new-privileges, и работает от непривилегированного пользователя 1000:1000. Трафик между узлами шифруется TLS, а устройства опознают друг друга по криптографическим идентификаторам, которые нужно подтвердить вручную с обеих сторон.

Модель сети у Syncthing отличается от остальных приложений каталога: порт синхронизации 22000 публикуется на всех интерфейсах, иначе прямые соединения не устанавливаются и обмен идёт через публичные relay. Веб-интерфейс при этом остаётся на 127.0.0.1 и публикуется только через reverse proxy. Пароль на интерфейс не задан по умолчанию — задайте его до того, как открывать доступ снаружи.

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

Образ рецепта просканирован Trivy: критических уязвимостей не найдено — образ состоит из Alpine и одного статически собранного Go-бинарника.

Отслеживание обновлений

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

Новые релизы

Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.

Актуальная версия v2.1.331 авг. 2026 г., 08:59 UTC

Критические уязвимости

Результат отдельного сканирования Docker-образов, а не проверки Compose.

Критических уязвимостей не найдено31 авг. 2026 г., 09:07 UTC

Несовместимые обновления

Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.

Не провереноПроверка не выполнялась

compose.yaml

Изменения upstream Compose относительно проверенного рецепта.

Upstream Compose не отслеживаетсяПроверка не выполнялась

Устаревшие Docker-образы

Проверка закреплённых тегов образов на наличие новых версий.

Все образы актуальны31 авг. 2026 г., 09:07 UTC

От наблюдения к действию

План обновления

Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.

v2.1.3v2.1.3
  1. Открыть основания релиза

    Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.

  2. Проверить границу версий

    Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.

  3. Подготовить смену тегов образов

    Смена тегов образов сейчас не планируется.

  4. Следовать документированной схеме миграции

    Смена тега и перезапуск. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.

  5. Защитить точку отката

    Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.

  6. Проверить обновлённый рецепт

    Точная проверка уровня «Проверен полностью» для этой версии записана 2026-08-31.

Прочитать порядок обновления в инструкции по установке ↓

Характеристики

Безопасность и публикация

Уровни установки

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

Готово

Для дома

Минимальная конфигурация для локальной сети или доступа через VPN.

  • Один сервер
  • Локальный доступ
  • Минимум компонентов

Рецепт закрывает все требования этого уровня.

Готово

Для VPS

Публичная установка с защищённым доступом и резервными копиями.

  • Домен
  • HTTPS через reverse proxy
  • Backup вне сервера

Рецепт закрывает все требования этого уровня.

Не поддерживается

Надёжная

Конфигурация для предсказуемой эксплуатации и наблюдаемости.

  • Отдельная БД
  • Healthcheck
  • Внешний мониторинг
  • Лимиты CPU и памяти

Нужно добавить вручную: отдельная бд, внешний мониторинг, лимиты cpu и памяти.

Собрать под свой сервер

Генератор конфигурации

Ответьте на пять вопросов и скачайте готовый комплект Syncthing.

Работает локально
01 Есть домен?
02 Какой reverse proxy?
03 Архитектура сервера
04 Где хранить данные?

Укажите абсолютный путь для отдельного диска, например /srv/syncthing.

05 Требуется VPN-доступ?

Комплект готов к сборке

Архив создаётся в браузере. Ответы никуда не отправляются.

Скриншоты

Быстрый запуск

Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.

Подготовить настройкиcp .env.example .env
Запуститьdocker compose up -d
Проверить состояниеdocker compose ps

Пошаговая инструкция

1. Проверьте сервер Ubuntu или Debian

Для этого рецепта достаточно 1 ядра CPU, 256 МБ RAM и 2 ГБ диска под сам узел; рекомендуется 512 МБ RAM. Это консервативная оценка рецепта: upstream не публикует формальные минимальные требования, а расход памяти растёт вместе с числом файлов в индексе. Место под сами файлы считайте отдельно: Syncthing хранит полную копию каждой синхронизируемой папки. Нужны Ubuntu 22.04+ или Debian 12+ с Docker Engine и Docker Compose v2.24+.

docker --version
docker compose version

2. Подготовьте файлы и переменные

mkdir -p ~/services/syncthing
cd ~/services/syncthing
cp .env.example .env
chmod 600 .env
sudo mkdir -p /srv/syncthing
sudo chown 1000:1000 /srv/syncthing
sed -i "s|^SYNCTHING_DATA_LOCATION=.*|SYNCTHING_DATA_LOCATION=/srv/syncthing|" .env

SYNCTHING_VERSION закрепляет образ; SYNCTHING_DEVICE_NAME — имя, которое увидят другие узлы; SYNCTHING_GUI_PORT открывает веб-интерфейс только на localhost; SYNCTHING_SYNC_PORT и SYNCTHING_DISCOVERY_PORT отвечают за обмен данными и обнаружение в локальной сети; SYNCTHING_DATA_LOCATION — каталог с синхронизируемыми файлами; SYNCTHING_CONFIG_VOLUME — volume с конфигурацией, ключами устройства и базой индексов; SYNCTHING_UID и SYNCTHING_GID задают владельца файлов; TZ — часовой пояс.

Права на каталог важны: контейнер работает от 1000:1000, и без chown Syncthing не сможет писать в /srv/syncthing.

3. Запустите узел и задайте пароль

docker compose pull
docker compose up -d
docker compose ps
ssh -L 8384:127.0.0.1:8384 user@server.example

Откройте http://localhost:8384. Веб-интерфейс изначально без пароля, поэтому сразу зайдите в Actions → Settings → GUI и задайте пользователя и пароль — без этого нельзя публиковать интерфейс наружу.

Идентификатор устройства (Actions → Show ID) — это то, чем узлы обмениваются при знакомстве. На втором устройстве добавьте сервер по этому ID, на сервере подтвердите запрос, затем выберите папку и отметьте, с каким устройством её синхронизировать.

Запуск на VPS

На VPS веб-интерфейс остаётся на 127.0.0.1, а порт синхронизации должен быть доступен снаружи — иначе устройства соединятся только через публичные relay и скорость упадёт в разы. Откройте его в firewall:

sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
docker compose up -d
docker compose ps
curl --fail http://127.0.0.1:8384/rest/noauth/health

Порт 21027/udp нужен только для обнаружения устройств в той же локальной сети; на VPS его открывать не нужно.

Доступ в локальной сети

Внутри доверенной LAN веб-интерфейс удобно открывать через SSH-туннель или VPN. Если reverse proxy работает на другом узле сети, замените 127.0.0.1 в compose.yaml на конкретный LAN-адрес сервера и ограничьте порт firewall адресом proxy.

Порт 21027/udp включает автоматическое обнаружение: устройства в одной сети находят друг друга без ручного ввода адресов. Обмен данными при этом всё равно идёт по порту 22000.

Домен и HTTPS

Через reverse proxy публикуется только веб-интерфейс. Порт синхронизации работает по собственному протоколу и через HTTP-proxy не проходит: он остаётся на 22000.

Замените sync.example.com в выбранном файле из proxy/ одним доменом. proxy/Caddyfile автоматически получает сертификат; proxy/nginx.conf ожидает сертификат Certbot; proxy/traefik.yaml использует resolver letsencrypt. Для Traefik в контейнере замените 127.0.0.1 на доступный ему host gateway.

Прежде чем открывать интерфейс наружу, задайте пароль в Settings → GUI. В примере Nginx увеличен proxy_read_timeout: интерфейс держит долгие запросы событий, и короткий таймаут рвёт соединение.

curl --fail https://sync.example.com/rest/noauth/health

Резервное копирование

chmod +x backup.sh restore.sh
./backup.sh

Скрипт останавливает контейнер, архивирует volume с конфигурацией и снова его запускает. В архив попадают приватный ключ устройства, его идентификатор, список папок и устройств и база индексов.

Синхронизируемые файлы в архив не входят — и это осознанно: их копия уже есть на каждом узле. Важно другое: Syncthing не является резервным копированием. Удаление файла разъезжается по всем устройствам так же быстро, как и изменение. Для защиты от ошибочного удаления включите File Versioning в настройках папки, а для настоящих бэкапов используйте отдельный инструмент.

Архив содержит приватный ключ: шифруйте его перед выносом с сервера.

Восстановление

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

./restore.sh ./backups/syncthing-YYYYMMDDTHHMMSSZ.tar.gz
docker compose ps
curl --fail http://127.0.0.1:8384/rest/noauth/health

Перед заменой скрипт создаёт страховочную копию текущей конфигурации. Если каталог с файлами пуст, узел скачает их заново с других устройств; если файлы на месте, Syncthing пересканирует их и обнаружит совпадение.

Никогда не запускайте две копии одной конфигурации одновременно: два узла с одинаковым идентификатором конфликтуют в кластере.

Обновление

Создайте backup и прочитайте release notes. Измените только закреплённый SYNCTHING_VERSION, затем выполните:

./backup.sh
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100 syncthing

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

Откат

Формат базы индексов меняется между крупными версиями и вниз не мигрирует. Верните прежний SYNCTHING_VERSION в .env и восстановите архив, снятый до обновления:

docker compose pull
./restore.sh ./backups/syncthing-before-update.tar.gz
docker compose up -d

Сами файлы при этом не страдают: в худшем случае узел заново построит индекс.

Остановка и полное удаление

docker compose down удаляет контейнер, но сохраняет конфигурацию и ключи. Полное необратимое удаление после проверки backup:

docker compose down
docker volume rm syncthing-config
rm -rf ~/services/syncthing

Каталог SYNCTHING_DATA_LOCATION остаётся на месте: рецепт его не удаляет. После удаления узла остальные устройства будут показывать его как отключённый, пока вы не уберёте его из своих настроек.

Источники: первые шаги, конфигурация, firewall и порты, версионирование файлов, reverse proxy и безопасность.

Диагностика

Устройства не находят друг друга

Проверьте, что порт синхронизации открыт наружу и узел его слушает:

docker compose ps
curl --fail --silent http://127.0.0.1:8384/rest/noauth/health
sudo ufw status | grep 22000

В веб-интерфейсе строка Listeners должна показывать все адреса как активные. Если соединение всё же идёт через relay, в карточке устройства Connection Type будет Relay вместо TCP LAN или TCP WAN — значит, прямое соединение не установилось и порт 22000 закрыт хотя бы с одной стороны.

Ошибка доступа к папке

Контейнер работает от 1000:1000, а каталог на хосте нередко принадлежит root:

ls -ld /srv/syncthing
sudo chown -R 1000:1000 /srv/syncthing

Значения задаются в SYNCTHING_UID и SYNCTHING_GID, если на сервере нужен другой владелец.

Файл удалился на всех устройствах

Это штатное поведение: Syncthing синхронизирует удаления. Восстановить можно из версий, если для папки включено File Versioning: раскройте карточку папки и нажмите Versions. Если версионирование выключено, поможет только внешний backup.

Папка застряла в состоянии Out of Sync

Чаще всего это конфликт правок или недоступный файл:

docker compose logs --tail=200 syncthing | grep -i "error\|conflict\|permission"

Конфликтные копии Syncthing сохраняет рядом с файлом под именем вида имя.sync-conflict-ДАТА-ВРЕМЯ.расширение. Выберите нужную версию и удалите лишнюю.

Веб-интерфейс просит пароль, который не подходит

Пароль хранится в конфигурации внутри volume. Сбросить его можно, отредактировав config.xml при остановленном контейнере:

docker compose stop syncthing
docker run --rm -it -v syncthing-config:/c alpine:3.22 \
  sh -c 'sed -i "s@<password>.*</password>@<password></password>@" /c/config/config.xml'
docker compose start syncthing

После этого интерфейс снова откроется без пароля — задайте новый сразу же.

Узел показывает чужой идентификатор после переноса

Идентификатор устройства привязан к приватному ключу в volume. Если вы скопировали конфигурацию на второй сервер и запустили оба, в кластере окажутся два узла с одинаковым ID — так делать нельзя. Оставьте одну копию, а на второй машине создайте новый узел.

Высокое потребление памяти

Память растёт вместе с числом файлов в индексе. Помогают исключения ненужных каталогов через Ignore Patterns в настройках папки и увеличение интервала сканирования.

После обновления узел не стартует

docker compose logs --tail=200 syncthing | grep -i "error\|migrat"

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

Официальные источники

Последний релиз: 2026-08-05 · GitHub Stars: 88 148 · данные проверены 31 авг. 2026 г., 08:59 UTC

Отказ от ответственности

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

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