基于Syncthing的多端同步与备份方案

摘要

Syncthing+ECS+OSS+Alist+Rclone

方案考虑使用Syncthing实现多端(手机、电脑)同步与版本控制,利用云服务器作为中转,即便单端离线亦可保持同步。频繁访问文件直接存储于云盘,备份则通过云服务器挂载OSS,避免流量费用,结合alist与rclone实现文件预览,确保数据管理高效且经济。首要需求为数据安全,目标备份容量约100GB,成本对标百度云VIP年费188元上下浮动100元,要求高速下载及在线预览媒体文件的功能。


注意:此文章图片链接来自github,如果无法加载图片请访问个人博客:基于Syncthing的同步与备份方案 | HuVoyage

需求

  1. 数据安全,最重要的一个需求

  2. 备份容量,目前需求100G左右

  3. 价格不贵,百度云vip188/年,以他为标准,浮动100左右

  4. 下载速度快,最起码别是100多kb/s

  5. 可预览,可以线上看看图片、视频什么的

  6. 多端同步:最起码要可以把手机和电脑数据同步起来,最起码要有版本控制,以及多种同步类型

  7. 自动备份:要能自动备份多个不同的文件夹,比如图片、文档什么的

思路

  • Syncthing 是多端同步的工具,其功能类似于微力同步,但是开源,他是P2P的,这样就要求两个设备必须同时在线。

  • 使用云服务器搭建Syncthing作为中转和备份服务器,这样就可以只一个设备在线,因为云服务器是不停机的

  • 如果是需要经常同步的我选择直接存在服务器的云盘里

  • 如果是备份,我在云服务器里挂载OSS为目录,通过内网访问OSS,这样就没有流量费用

  • 使用alist挂载云服务器本地目录+rclone挂载Alist到电脑进行预览(可选)

展示

页面展示

Syncthing - 服务器

img

Syncthing - 电脑

img

Syncthing - 安卓

|200

alist-网页

img

rclone-本地挂载alist

img

效果展示

  1. 服务器带宽 30M ,同步和备份时速度可接受,内存占用如下

img

  1. 存储容量:云盘自带40G+OSS的40G = 80G \3. 电脑开机自启:rclone、Syncthing,完全无感 \4. 手机可以后台常驻运行Syncthing,记得开启允许后台高耗电,以及设置息屏联网,实现无感同步。

优点

  1. 可以无感备份与同步任何文件

  2. 速度取决于你的服务器,无限速问题

  3. 数据很安全,用的都是开源项目,数据放在阿里云的服务器和OSS里,如果还不放心可以增加容灾设计

  4. 可玩性较高,几乎完全满足需求!

  5. 手机可以常驻后台备份

缺点

  1. 折腾起来比较麻烦

  2. 手机常驻后台会增加发热问题

  3. syncthing 同步和冲突处理没有那么细的粒度

拓展

  1. 有时间可以整一个一键脚本,直接部署

  2. 香港服务器都有了,顺便整点魔法

  3. 整一个服务器监控看板

  4. 把UI面版都整上Https

  5. 如果想可以设计docker进行部署,需要注意容器编排和目录映射问题

准备好了吗!发车!

  • 核心:Syncthing

  • 需要:云服务器,OSS对象存储,电脑,手机

  • 数据安全:数据为本地存储,云端则为阿里云服务器+OSS,次方案使用的项目均为开源项目

  • 我的配置:阿里云香港轻量服务器(debian11),9元一年OSS标准存储资源包,Win10笔记本,安卓手机

  • 实际花费:阿里云香港轻量服务器 288/年

  • 建议选择带宽较大的轻量服务器,大可以选择自己觉得便宜和稳定的,注意:服务器和oss存在地域问题!选同一个地域的,不然要nginx代理。

实操

安装Syncthing

服务器

# 使用 `curl` 下载 GPG 密钥,然后使用 `apt-key` 导入密钥。
sudo apt-get install curl
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
​
# 添加官方 deb 存储库。
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
​
# 安装`apt-transport-https`软件包
sudo apt-get install apt-transport-https
​
# 更新本地软件包索引并在 Debian 上安装syncthing。
sudo apt-get update
sudo apt-get install syncthing
​
# 使用 Systemd 将 Syncthing 设置为系统服务 替换username为自己的账户名称
sudo systemctl enable syncthing@username.service
​
# 修改`/home/username/.config/syncthing/config.xml`中的`gui`标签,把`127.0.0.1`改成`0.0.0.0`,开启远程访问
# 如果你的usernam为root,那么config.xml在/root/.local/state/syncthing
vim /root/.local/state/syncthing/config.xml
​
# 启动syncthing服务
systemctl restart syncthing@username.service
# 设置开机启动
systemctl enable syncthing@username.service
# 检查状态
systemctl status syncthing@username.service
​
# 在阿里云控制台放通8384端口,访问`http://host_ip:8384`,就可以看到面版了

PC

访问:Github下载windows版本的Syncthing,直接运行即可

开机自启,后台运行:

  1. 创建bat文件写入

start "Syncthing" syncthing.exe -no-console -no-browser
  1. 创建快捷方式后,Win+R 输入 shell:startup,把快捷方式拖进去

Android

访问:Github下载android版本的Syncthing,直接运行即可,给足权限,让他常驻后台

服务器挂载OSS

oss的创建与配置

资源包购买:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

bucket创建:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

  • 名称随意

  • 地域选择和自己服务器相同的地方

  • 私有读写即可,因为我们是通过服务器出的公网流量,服务器和oss之间的访问用内网就行了,免费且高速,缺点是oss的访问速度全看服务器的带宽了。

示例: ECS地域

img

OSS地域

img

挂载OSS到ECS

# 更新索引
sudo apt-get -y update 
​
# 安装ossfs
sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev \
                     libfuse-dev libssl-dev libxml2-dev make pkg-config
​
# 克隆编译代码
git clone https://github.com/aliyun/ossfs.git
cd ossfs
./autogen.sh
./configure
make
sudo make install
​
# 配置全局密钥,输入OSS对应的key和secret,不知道怎么获取看这个:
# https://blog.csdn.net/weixin_45606067/article/details/114292972
# my-access-key-id 你的key 
# my-access-key-secret 你的secret
echo my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 600 /etc/passwd-ossfs
​
# 挂载oss目录
# my-bucket是你的bucket名称
# /path/to/mountpoint是你挂载到的服务器上的目录
# my-oss-endpoint是你oss的访问域
ossfs my-bucket /path/to/mountpoint -ourl=my-oss-endpoint
​
# 查看挂载情况(可选)
df | grep ossfs
# 详细情况(可选)
# /root/Data/OSS 是挂载的路径
df -hT  /root/Data/OSS
​
# 删除挂载点(可选)
sudo umount /root/Data/OSS

安装alist(可选)

服务器部署alist

# 默认安装在 `/opt/alist` 中。 
# 自定义安装路径,将安装路径作为第二个参数添加,必须是绝对路径(如果路径以 alist 结尾,则直接安装到给定路径,否则会安装在给定路径 alist 目录下)
# 如 安装到 `/root`
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install /root
​
# 启动
systemctl start alist
# 状态
systemctl status alist
# 重启
systemctl restart alist
​
# 手动设置一个密码,`NEW_PASSWORD`是指你需要设置的密码
./alist admin set NEW_PASSWORD

alist挂载服务器目录

  • 选择本机存储

  • 建议挂载OSS所在路径,比如 /root/Data/OSS

  • 也可以挂载自己服务器备份数据的地方,怎么方便怎么来

img

编辑

rclone挂载alist到电脑

下载:rclonewinfsp

配置:

  1. 把含有exe文件的目录添加到系统环境变量

  2. 打开cmd运行窗口使用指令

    rclone config

    修改配置

    • 填写alist登录账号

    • 选择webdav

    • 选择其他

    • 输入挂载到本地的名称

    • 用户名称就输alist账号

    • 输入y填写并确认alist密码

    • 按3下enter并输入q退出

开机自动挂载:

  • 新建bat,输入以下内容,再双击查看是否成功运行

# 第一个alist是之前设置的挂载到本地的名称 
# alist:/ 表示挂载根目录
# D:/alist 本地的哪个路径
@echo off
rclone mount alist:/ D:/alist --vfs-cache-mode full --use-mmap --allow-other --no-check-certificate --no-gzip-encoding --copy-links
  • 创建任务计划,通过在Windows搜索框中输入"任务计划程序"找到并打开,创建基本任务,触发器选 计算机启动时,选择 启动程序 后路径选择刚刚创建的bat文件,完成创建

  • 右键点击该任务,选择“属性”,在“常规”选项卡中,勾选“使用最高权限运行”,在“操作”选项卡中,点击“编辑”(Edit)在“编辑操作”窗口中,在bat路径前添加cmd.exe /c,并在“添加参数”中输入/c start "" /b "C:\path\to\your\mount_alist.bat"

这样就可以开机后,rclone在后台无感运行了

配置Syncthing

搭建发现服务器

先通过发现服务器 (Discosrv)发现和索引用户,当用户设备接入发现服务器后,服务器会进行设备的连接通告,当设备之间同意连接后进行连接;两台设备建立连接后,数据需要通过 NAT 穿透的方式实现交换。

# 仓库在:https://github.com/syncthing/discosrv/releases,想用新的直接换新链接就行
wget https://github.com/syncthing/discosrv/releases/download/v1.23.4/stdiscosrv-linux-amd64-v1.23.4.tar.gz
​
# 解压
tar -xzvf  stdiscosrv-linux-amd64-v1.23.4.tar.gz
​
# 运行 
# 官方文档:https://docs.syncthing.net/users/stdiscosrv.html
./stdiscosrv
# 后台运行
nohup ./stdiscosrv &
# 使用jobs查看运行情况
jobs

搭建中继节点

如果 NAT 穿透不成功,就需要中继 (Relaysrv)服务器传输数据,假如电脑要和手机进行笔记同步,通信过程就是:电脑-中继-手机,当然Syncthing自带有公共网络服务,但是此文章使用云服务器就是为了搭建一个中继的通信过程

# 仓库在:https://github.com/syncthing/discosrv/releases,想用新的直接换新链接就行
wget https://github.com/syncthing/relaysrv/releases/download/v1.22.1/strelaysrv-linux-amd64-v1.22.1.tar.gz
​
# 解压
tar -xzvf  strelaysrv-linux-amd64-v1.22.1.tar.gz
​
# 运行 
# https://docs.syncthing.net/users/strelaysrv.html
# pools为空是不加入公共中继节点,部署为私有
./strelaysrv -pools="" 
​
# 后台运行
nohup ./strelaysrv -pools=""  &
# 使用jobs查看运行情况
jobs
需要去配置,记得给电脑、服务器、手机都配置一下,协议监听地址对应中继节点地址,全局发现服务器和全局发现的地址。

# 协议监听地址,中继服务URI  
relay://公网IP:22067?id=中继服务器device ID  
  
# 全局发现服务器  
https://公网IP:8443/?id=发现服务器device ID

img

编辑

配置说明

举个例子:文件夹路径是本地计算机的路径,比如我们现在需要电脑同步到服务器,那么过程就是

  1. 打开电脑上的 syncthing http://127.0.0.1:8384/,添加文件夹,路径选择自己电脑本地的要上传的文件路径,如:D:\My\Notes,在共享里选择服务器上的 syncthing

  2. 打开服务器上的 syncthing ,你会看到发过来的共享请求,那么在接受后的配置里面,选择你需要保存在服务器上的地址,比如挂载后的OSS地址或者服务器的其他地方

现在如果你需要再同步给手机,那么就选择服务器上电脑发过来的共享文件夹,同样的点击共享就可以分享到手机

地址

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!对于搭建入门级免费私有云盘NAS,基于Syncthing的扩展篇,我可以为你提供一些指导。 首先,你需要确保已经完成了基础篇的搭建,也就是成功安装和配置了Syncthing。接下来,我们可以开始扩展功能。 1. 安装额外的设备:将更多的设备添加到你的私有云盘中。这可以是其他计算机、手机或平板电脑。你只需在每个设备上安装Syncthing,并使用相同的设备ID和共享文件夹配置进行连接。 2. 设置文件版本控制:Syncthing支持文件版本控制,可以方便地恢复之前的文件版本。要启用该功能,你需要在Syncthing的配置文件中添加以下行: ``` <versioning> <type>internal</type> <params> <keep>5</keep> </params> </versioning> ``` 这将使Syncthing保留最近的5个版本。你可以根据需要调整此数字。 3. 添加其他共享文件夹:除了默认的共享文件夹外,你还可以添加其他文件夹进行共享。在Syncthing界面中,点击“添加设备”按钮,然后选择要共享的文件夹。配置共享文件夹的名称和路径后,将其添加到需要访问该文件夹的设备上。 4. 配置高级选项:Syncthing还提供了许多高级选项,例如文件忽略模式、文件冲突解决方案等。你可以在Syncthing的配置文件中进行相应的设置。详细的配置选项可以在Syncthing的官方文档中找到。 这些是扩展你的私有云盘NAS的一些基本步骤。希望对你有所帮助!如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值