自建 Syncthing 私有文件同步平台多端文件实时同步文章目录自建 Syncthing 私有文件同步平台多端文件实时同步一、背景二、主流同步方案横向对比Syncthing 详细介绍三、整体架构说明四、环境准备1. 云主机硬件与系统基础要求2. 云主机安全组/防火墙放行端口3. 客户端环境五、云主机Docker Compose完整部署步骤步骤1服务器安装Docker与Docker Compose步骤2创建项目目录结构步骤3写入docker-compose.yml完整配置步骤4编写一键启动脚本 start.sh步骤5一键启动Syncthing容器步骤6Web后台初始化安全配置六、桌面客户端安装与设备配对流程1. Windows客户端安装2. 客户端与云主机中继节点配对七、共享文件夹创建与同步参数配置1. 云主机创建公共团队同步文件夹2. 个人私有同步文件夹隔离配置3. Windows客户端接收同步目录八、团队协作使用规范避坑核心九、安全加固与数据备份方案1. 服务安全加固要点2. 多重数据备份策略关键Syncthing仅同步≠备份十、常见故障排查十一、方案总结一、背景在日常团队协作中多人共同整理和维护大量文档是常态。这些文档可能涵盖合同文件、资源清单、合规材料、过程记录、各类 Office 文档、PDF、压缩包等文件夹层级复杂、文件数量庞大。长期以来团队面临以下协作痛点文件版本混乱依靠微信、QQ、企业微信等即时通讯工具传输文件衍生出大量 V1、V2、最终版、最终不改版等副本极易出现内容覆盖、资料遗漏版本追溯困难。无统一在线归档仓库成员文件分散存储在各自电脑一人关机或外出后其他人无法获取最新修改内容协同效率极低。公有网盘存在多重限制百度网盘、阿里云盘等公有网盘存在单文件大小限制、下载限速、企业版付费门槛且项目资料上传至第三方平台存在数据泄露风险涉及行业敏感、合规类文档不适合公网存储。硬件成本受限团队无闲置物理 NAS 设备单独采购存储硬件成本高现有闲置单台云主机资源空闲可零成本复用。针对上述痛点我们今天需要解决两类典型的同步需求1. 团队文档共享与实时协同团队成员需要频繁共同编辑项目文档、验收报告、设计稿、会议纪要等。传统的微信群/邮件发附件会导致版本混乱NAS/共享文件夹依赖固定内网或 VPN 且非技术成员配置困难企业网盘则存在数据隐私和权限回收不及时等问题。我们希望每个人在自己电脑上修改改动立刻同步到所有人去中心化架构可搭配一台常开云主机作为永久中继兜底文件数据完全私有不经过任何第三方服务器全平台兼容Windows、macOS、Linux。2. 个人文档多端同步除了团队共享个人还有笔记库、代码片段、PDF 资料等需要在公司台式机、笔记本之间保持同步。该场景逻辑与团队共享一致仅通过独立文件夹、差异化设备授权实现隔离。Syncthing 完美覆盖两类场景通过独立“同步文件夹” 精细化设备共享权限区分团队公共文档与个人私有资料。一套服务实现双向实时文件夹同步、本地原生文件编辑、私有化自主部署、无流量/存储收费、文件历史版本回溯同时资源占用极低低配云主机即可稳定运行。二、主流同步方案横向对比结合单台云主机、3人小团队协同的使用场景对比四类自建同步方案综合资源消耗、部署难度、隐私安全完成选型方案核心优势短板适配场景推荐程度SyncthingDocker容器化1. 轻量低消耗1核2G云主机可稳定运行2. 去中心化P2P同步云主机仅做常驻中继3. 支持文件版本回滚、自定义临时文件过滤4. 完全开源免费无文件/流量上限5. Windows/macOS/Linux全平台图形客户端1. 无精细化账号分级体系2. 不支持网页在线协同编辑Office3. 无外链分享、审批流程等企业功能小团队私有化文档同步、个人多端资料同步。各人负责不同文件 偶尔交叉改而不是三人同时怼同一个 WordSyncthing 几乎完美。⭐⭐⭐⭐⭐Seafile 私有云盘1. 独立资料库隔离、账号权限、文件锁定2. 网页预览、只读外部分享链接3. 客户端实时同步1. 依赖数据库容器资源占用更高2. 部署流程繁琐长期维护成本高3. 海量零散小文件同步性能较差国产的同步性能比 Nextcloud 好块级增量也有 Web 界面和权限体系。但场景可能有个难受的点Seafile 后端是分块存储的文件在服务器磁盘上不是原文件直读要检出才能拿到原始文件。如果经常要去服务器目录里直接拖个 zip 给别人或者脚本批量处理文件这个工作流会被卡。⭐⭐⭐⭐NextcloudOnlyOffice1. 浏览器多人实时编辑Word/Excel2. 完整企业网盘生态评论、审批、团队目录1. 资源消耗巨大4核8G配置才能流畅运行2. 大量项目文档同步卡顿3. 功能冗余仅同步场景无需额外在线编辑能力功能最全但重PHP 栈 DB官方建议 512MB RAM 起步。文件级同步不是块级大文件改几行也要整文件传不如群晖 Drive/Seafile 快私有的 Google Drive不只是同步盘——文件同步 在线 Office 日历 插件生⭐⭐⭐⭐成品群晖/威联通NAS开箱即用图形化管理自带快照备份、Drive同步套件需要额外采购硬件本次仅有一台空白云主机无硬件条件付费⭐⭐对于我需求来说。仅需本地文件夹双向实时同步、私有化存储敏感项目资料无网页在线编辑需求且仅拥有闲置单台云主机。综合硬件成本、部署难度、资源消耗、数据隐私安全最终采用Docker Compose 容器化部署 Syncthing以云主机作为7×24小时在线中继节点搭配多台桌面客户端实现全端文档自动同步。当然如果都是内网环境的话也可以不需要云主机实现两两直接同步。Syncthing 详细介绍官网地址https://syncthing.net/使用文档https://docs.syncthing.net/v2.1.2/定位开源、P2P 去中心化、纯做文件夹同步不干别的。三个人的场景几乎是量身定做的。架构长这样每台机器比如你们三人的电脑 可选一台常开机当中心都装 Syncthing设备之间靠 Device ID​ 配对不靠账号体系每个文件夹独立配置共享给哪些设备这就是你要的文件夹级同步同步是实时的默认 60 秒扫描 文件变更事件触发局域网满速外网自动打洞/中继文件夹有三种模式以3人团队为例模式含义场景用法Send Receive双向同步默认三人共同维护的同一个目录和文件Send Only本机发别人不收某人本地草稿机只往中心推Receive Only只读镜像某人的备用机 / 归档机防误改三人最舒服的拓扑——星型找一台永远开机的机器当中心可以是某人的台式常年不关或者淘个 N100 小主机放公司/家里800 块中心上装 Syncthing把另两台笔记本 A、笔记本 B只跟中心配对中心设成Introducer引入者新设备加进来时它能自动把已有配对和共享关系推下去管理省事文件夹在中心建好共享给 A 和 B各自指定本地路径路径不必一致靠 Folder ID 认优点零中心服务器依赖哪怕中心挂了A 和 B 之间还能互相同步极轻RAM 占用 100MB端到端加密冲突文件会产生filename.conflict不会静默覆盖全平台Win/Mac/Linux 都有客户端Web UI 管坑没有账号 权限体系——权限只能靠这个文件夹共享给谁粗粒度控制做不到某人只能读某个子目录没有在线协作文档——Word/Excel 还是得本地改完同步做不到飞书那种多人同时光标编辑冲突处理策略要跟队友说一声两人同时改同一个 Word会出.conflict副本不会合并三、整体架构说明云主机中继服务端系统CentOS / Ubuntu Linux固定公网IP全天候在线作为统一文件基准仓库Docker 容器化部署配置、同步数据目录持久化挂载删除容器不会丢失配对信息与业务文档。桌面客户端节点多台Windows/macOS电脑Windows 端使用 SyncTrayzor 图形客户端macOS/Linux 使用官方客户端本地文件夹与云主机基准目录双向实时同步。同步逻辑任意客户端新增、修改、删除文件实时推送至云主机中继节点其余所有设备自动拉取最新文件云主机永久在线单台客户端关机不会影响其他成员正常查阅、同步资料。四、环境准备1. 云主机硬件与系统基础要求配置项最低配置推荐配置补充说明CPU/内存1核 2GB2核 4GB海量零散文档同步时多核降低磁盘IO卡顿磁盘系统盘40G 独立数据盘100G系统盘60G 独立数据盘200G同步文件、配置全部存放独立数据盘防止占满系统盘操作系统CentOS Stream / Ubuntu 20.04/22.04Ubuntu 22.04 LTS Docker 生态最熟apt 直接装文档多Docker、Docker Compose 兼容性最佳网络固定公网IP上行带宽≥5Mbps上行≥10Mbps同步速度上限由云主机上行带宽决定2. 云主机安全组/防火墙放行端口云厂商控制台安全组、系统防火墙入方向放行以下端口否则设备配对、文件同步、后台管理全部失效端口号协议用途22TCPSSH远程连接端口服务器部署操作22000TCP/UDPP2P文件传输核心端口21027UDP全局设备自动发现端口8384TCPSyncthing Web可视化管理后台端口3. 客户端环境WindowsWindows10/Windows11安装SyncTrayzor图形客户端托盘后台常驻轻量化也可以直接用命令行脚本Web界面控制。macOS/LinuxSyncthing官方客户端支持后台静默同步。五、云主机Docker Compose完整部署步骤步骤1服务器安装Docker与Docker ComposeUbuntu 系统执行命令sudoaptupdateaptinstall-ycurl# 设置镜像地址echo{ registry-mirrors: [https://docker.mirrors.ustc.edu.cn] }|sudotee/etc/docker/daemon.json# 一键安装dockercurl-fsSLhttps://get.docker.com|bash# 设置开机自启sudosystemctlenabledockersystemctl startdocker# 安装docker-compose插件sudoaptinstall-ydocker.iodocker-composesudoaptinstall-ydocker-compose-v2# 验证安装docker--versiondockercompose versionCentOS 系统执行命令yuminstall-yyum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yuminstall-ydocker-ce docker-ce-cli containerd.io docker-compose-plugin systemctlenabledockersystemctl startdockerdocker--versiondockercompose version步骤2创建项目目录结构# 创建syncthing工作目录mkdir-p~/syncthingcd~/syncthing# 生成子目录config存放配置、sync存放同步文档mkdirconfigsync# 创建启动脚本touchstart.sh# 创建docker-compose配置文件touchdocker-compose.yml目录结构最终如下syncthing/ ├─ config/ # Syncthing配置、密钥、索引库持久化目录 ├─ sync/ # 所有项目同步文档根目录 ├─ docker-compose.yml # 容器编排配置 └─ start.sh # 一键启动脚本步骤3写入docker-compose.yml完整配置# # Syncthing 中心节点部署配置# Docker Compose容器化部署方案# 适用场景多人文档实时同步中继节点# version:3.8# Docker Compose 文件格式版本services:# ----------------------------------------------------------# Syncthing 核心同步服务# ----------------------------------------------------------syncthing:# 使用官方稳定镜像image:syncthing/syncthing:latest# 自定义容器名称方便运维操作container_name:syncthing# 重启策略手动停止才会关闭宿主机重启自动拉起restart:unless-stopped# --------------------------------------------------------# 环境变量配置# --------------------------------------------------------environment:# 宿主机用户ID统一文件读写权限避免挂载目录权限报错-PUID${PUID:-1000}# 宿主机用户组ID-PGID${PGID:-1000}# 统一时区防止文件时间戳错乱-TZAsia/Shanghai# --------------------------------------------------------# 宿主机目录与容器目录挂载映射# --------------------------------------------------------volumes:# 配置持久化目录存储设备密钥、配对信息、数据库# 重要删除容器不要删除此目录否则所有设备需要重新配对-./config:/var/syncthing/config# 文档同步根目录所有共享文件夹统一存放在此-./sync:/var/syncthing/sync# --------------------------------------------------------# 端口映射宿主机端口:容器内部端口# --------------------------------------------------------ports:# 文件传输TCP端口必须放行-22000:22000/tcp# QUIC加速UDP端口提升公网同步速度-22000:22000/udp# 设备自动发现UDP端口-21027:21027/udp# Web管理后台端口公网可访问# 更安全的做法是改为 127.0.0.1:8384:8384 并通过 SSH 隧道访问-8384:8384# --------------------------------------------------------# 容器健康检测可选建议保留以便监控容器状态# --------------------------------------------------------healthcheck:# 检查命令尝试访问本地 8384 端口test:[CMD,curl,-f,http://localhost:8384]interval:1000s# 每 30 秒检查一次timeout:10s# 超时时间 10 秒retries:3#连续失败 3 次标记为不健康start_period:40s# 容器启动后等待 40 秒再开始第一次检查给足初始化时间# --------------------------------------------------------# 日志切割配置防止日志占满磁盘# --------------------------------------------------------logging:driver:json-fileoptions:max-size:20m# 单个日志文件最大 20MBmax-file:3# 最多保留 3 个日志文件总共 60MB步骤4编写一键启动脚本 start.sh#!/bin/bash# 自动获取当前宿主机用户ID、组ID解决挂载目录权限问题exportPUID$(id-u)exportPGID$(id-g)# 后台启动容器dockercompose up-d# 打印容器运行状态dockercomposeps赋予脚本执行权限chmodx start.sh步骤5一键启动Syncthing容器cd~/syncthing ./start.sh执行完成后输入docker compose ps看到syncthing容器状态为Up即启动成功。如果失败的话先手动拉取一下镜像再重新执行启动脚本docker-compose up-d.~/start.sh步骤6Web后台初始化安全配置浏览器访问地址http://云主机公网IP:8384首次登录强制设置管理员账号、高强度密码公网暴露后台必须设置密码杜绝裸奔风险右上角语言切换简体中文开启HTTPS加密访问设置面板内生成自签名证书加密后台登录传输安全优化限制防火墙仅放行办公固定IP访问8384端口禁止全网任意IP访问管理后台。六、桌面客户端安装与设备配对流程1. Windows客户端安装选用SyncTrayzor图形化客户端封装原生Syncthing内核自带系统托盘后台常驻无需命令行操作下载官方安装包后一路默认安装即可。项目地址https://github.com/GermanCoding/SyncTrayzor当然我们直接使用官网提供的程序打开也是非常方便的2. 客户端与云主机中继节点配对打开SyncTrayzor客户端右上角【操作】→【显示ID】复制本机唯一设备ID回到云主机Web管理后台点击【添加远程设备】粘贴客户端设备ID自定义设备名称例成员A办公电脑勾选自动接受文件夹共享保存Windows客户端弹窗配对确认点击允许设备状态变更为「已连接」代表配对完成其余成员电脑、个人笔记本重复以上操作全部接入云主机中继节点。七、共享文件夹创建与同步参数配置1. 云主机创建公共团队同步文件夹Web后台点击【添加文件夹】文件夹标签测试文件夹文件夹IDteam-project-doc全局唯一自定义标识所有设备保持一致文件夹路径/var/syncthing/sync/team-project-doc容器内同步根目录对应宿主机~/syncthing/sync/team-project-doc切换【共享】标签勾选所有团队客户端设备权限统一设置为读写切换【版本控制】标签选择简单版本控制保留30天历史文件误删、改错文件可一键回滚恢复切换【忽略模式】填入过滤规则屏蔽系统临时文件、缓存文件减少无效同步流量.venv __pycache__ *.pyc *.pyo *.egg-info node_modules .git .svn Thumbs.db .DS_Store *.tmp *.log ~* *.sync* ~$* .DS_Store Thumbs.db *.tmp *.log *.swp *.bak *.zip.bak保存配置云主机自动生成对应目录。2. 个人私有同步文件夹隔离配置如需同步个人笔记、私人资料新建独立文件夹共享时仅勾选自己的多台设备不共享给其他团队成员实现公私文件完全隔离。3. Windows客户端接收同步目录电脑端弹出文件夹共享邀请点击接受自定义本地同步路径建议单独磁盘新建目录确认后自动拉取云主机内全部文件实现双向实时同步团队统一规范仅在此同步目录内编辑、存放所有交付资料禁止私自新建顶层文件夹。八、团队协作使用规范避坑核心Syncthing无内置文件锁定功能多人同时编辑同一Office文档会生成冲突文件制定统一协作规则文档编辑规则Word/Excel/PPT正式交付文档单人编辑完成、关闭文件、等待同步完成后其他人员再接手修改禁止两人同时打开同一份文档编辑。冲突文件处理方案同步出现xxx.sync-conflict-xxxx格式冲突文件时由文档负责人对比两份文件内容合并修改内容后删除冲突副本。外部人员只读权限配置如需给外部人员查阅资料新增对方设备时共享文件夹权限设置为「仅发送」对方仅可下载查看无法上传、修改文件。历史版本恢复操作文件误删、改错后打开文件夹设置-版本列表可恢复30天内任意历史版本找回丢失内容。九、安全加固与数据备份方案1. 服务安全加固要点Web管理后台设置高强度密码开启HTTPS加密访问云主机安全组最小化放行端口仅开放业务必需端口限制Web后台访问源IP仅允许办公固定IP或VPN接入不向陌生外部设备开放配对权限避免文件泄露。2. 多重数据备份策略关键Syncthing仅同步≠备份同步机制特性一台设备删除文件所有节点同步删除必须配套多层备份防止数据丢失文件夹开启版本控制自动留存30天文件历史版本云主机控制台开启磁盘定时快照每日自动快照保留7天每周手动将完整同步目录打包压缩下载至本地离线存储抵御磁盘损坏、勒索病毒风险。十、常见故障排查设备显示未连接同步无进度排查云主机安全组、系统防火墙是否放行TCP/UDP 22000、UDP 21027端口检查宿主机防火墙拦截规则。公网无法访问8384管理页面确认安全组入方向放行8384端口容器端口映射配置无误。文件同步速度缓慢同步带宽上限由云主机上行带宽决定超大压缩包建议错峰上传大量小文件同步会增加IO耗时可定期归档压缩。频繁生成sync-conflict冲突文件多人同时编辑同一文档导致严格执行单人编辑规则定期清理过期冲突文件。挂载目录文件读写权限报错使用start.sh脚本自动传入PUID/PGID统一宿主机与容器文件权限避免权限不足无法写入。容器重启后配对信息丢失不要删除./config目录所有设备密钥、配对信息全部持久化存储在此目录。十一、方案总结方案优势完全开源免费无存储、流量、文件数量收费限制Docker容器化部署一键启停配置、数据持久化服务器迁移、重装零成本资源占用极低低配云主机即可稳定运行适配小团队私有化文档协同纯本地文件操作无需浏览器在线编辑贴合运维、实施人员本地办公习惯去中心化架构云主机仅做中继兜底任意客户端离线不影响其他成员使用公私文件隔离通过独立文件夹差异化设备授权同时满足团队共享、个人多端同步两类需求。方案短板无精细化账号、分组权限体系不适合几十人以上大型团队不支持浏览器在线协同编辑Office文档无内置文件外链、审批、评论等企业级网盘功能。适用人群日常学习、运维工程师、项目实施团队、信息化交付人员需要私有化存储行业敏感、合规类资料拒绝第三方公有网盘仅有单台闲置云主机/服务器追求轻量化、零额外成本的文档实时同步方案。