摘要
通过Syncthing进行同步与版本控制,并搭建私有的Syncthing发现服务器和中继节点,使用ossfs在服务上挂载OSS目录并利用OSS容量和云盘容量进行存储。最后使用alist和rclone挂载服务器目录到电脑进行预览下载等。
注意:此文章图片链接来自github,如果无法加载图片请访问个人博客:基于Syncthing的同步与备份方案 | HuVoyage
需求
- 数据安全,最重要的一个需求
- 备份容量,目前需求100G左右
- 价格不贵,百度云vip188/年,以他为标准,浮动100左右
- 下载速度快,最起码别是100多kb/s
- 可预览,可以线上看看图片、视频什么的
- 多端同步:最起码要可以把手机和电脑数据同步起来,最起码要有版本控制,以及多种同步类型
- 自动备份:要能自动备份多个不同的文件夹,比如图片、文档什么的
思路
- Syncthing 是多端同步的工具,其功能类似于微力同步,但是开源,他是P2P的,这样就要求两个设备必须同时在线。
- 使用云服务器搭建Syncthing作为中转和备份服务器,这样就可以只一个设备在线,因为云服务器是不停机的
- 如果是需要经常同步的我选择直接存在服务器的云盘里
- 如果是备份,我在云服务器里挂载OSS为目录,通过内网访问OSS,这样就没有流量费用
- 使用alist挂载云服务器本地目录+rclone挂载Alist到电脑进行预览(可选)
展示
页面展示
Syncthing - 服务器
Syncthing - 电脑
Syncthing - 安卓
alist-网页
rclone-本地挂载alist
效果展示
服务器带宽 30M ,同步和备份时速度可接受,内存占用如下
- 存储容量:云盘自带40G+OSS的40G = 80G
- 电脑开机自启:rclone、Syncthing,完全无感
- 手机可以后台常驻运行Syncthing,记得开启允许后台高耗电,以及设置息屏联网,实现无感同步。
优点
- 可以无感备份与同步任何文件!
- 速度取决于你的服务器,无限速问题
- 数据很安全,用的都是开源项目,数据放在阿里云的服务器和OSS里,如果还不放心可以增加容灾设计
- 可玩性较高,几乎完全满足需求!
- 手机可以常驻后台备份!
缺点
- 折腾起来比较麻烦
- 手机常驻后台会增加发热问题
- syncthing 同步和冲突处理没有那么细的粒度
拓展
- 有时间可以整一个一键脚本,直接部署
- 香港服务器都有了,顺便整点魔法
- 整一个服务器监控看板
- 把UI面版都整上Https
- 如果想可以设计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 [email protected]
# 修改`/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 [email protected]
# 设置开机启动
systemctl enable [email protected]
# 检查状态
systemctl status [email protected]
# 在阿里云控制台放通8384端口,访问`http://host_ip:8384`,就可以看到面版了
PC
访问:Github下载windows版本的Syncthing,直接运行即可
开机自启,后台运行:
- 创建bat文件写入
start "Syncthing" syncthing.exe -no-console -no-browser
- 创建快捷方式后,Win+R 输入 shell:startup,把快捷方式拖进去
Android
访问:Github下载android版本的Syncthing,直接运行即可,给足权限,让他常驻后台
服务器挂载OSS
oss的创建与配置
资源包购买:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
bucket创建:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
- 名称随意
- 地域选择和自己服务器相同的地方
- 私有读写即可,因为我们是通过服务器出的公网流量,服务器和oss之间的访问用内网就行了,免费且高速,缺点是oss的访问速度全看服务器的带宽了。
示例: ECS地域
OSS地域
挂载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
- 也可以挂载自己服务器备份数据的地方,怎么方便怎么来
编辑
rclone挂载alist到电脑
下载:rclone和winfsp
配置:
- 把含有exe文件的目录添加到系统环境变量
- 打开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
编辑
配置说明
举个例子:文件夹路径是本地计算机的路径,比如我们现在需要电脑同步到服务器,那么过程就是
- 打开电脑上的 syncthing
http://127.0.0.1:8384/
,添加文件夹,路径选择自己电脑本地的要上传的文件路径,如:D:\My\Notes
,在共享里选择服务器上的 syncthing - 打开服务器上的 syncthing ,你会看到发过来的共享请求,那么在接受后的配置里面,选择你需要保存在服务器上的地址,比如挂载后的OSS地址或者服务器的其他地方
现在如果你需要再同步给手机,那么就选择服务器上电脑发过来的共享文件夹,同样的点击共享就可以分享到手机
地址
- ossfs
- relaysrv
- discosrv
- syncthing
- syncthing-android
- alist
- rclone
- winfsp
版权归原作者 不知为何392 所有, 如有侵权,请联系我们删除。