威联通QNAP备份数据到局域网服务器2.0--使用SFTPGo提供稳定的WebDAV服务
存在的问题
之前的文章中,使用镜像bytemark/webdav在局域网服务器上部署WebDAV,然后威联通NAS通过HBS 3将数据备份到局域网服务器的硬盘上。
实际使用发现bytemark/webdav镜像部署的WebDAV服务存在一些问题,导致使用体验不理想。比如,HBS 3备份任务持续运行1个小时左右就莫名报错,导致备份任务异常结束,任务日志显示远程服务不可用。而且对于大量小文件的处理非常不好,会卡住无法同步。看来bytemark/webdav镜像并不适用于此场景。
解决办法
上一篇文章的思路是正确的,就是工具不稳定导致备份任务中途失败。解决办法也是简单粗暴,既然bytemark/webdav不理想就换一个工具,且最好是可以docker部署。经过一番搜索发现drakkan/sftpgo这个项目,可以提供FTP/S和WebDAV的SFTP服务,功能齐全,高度可配置化,最关键支持docker部署。
部署SFTPGo
拉取镜像
docker pull drakkan/sftpgo
启动容器
docker run --name sftpgo
-p 18080:8080
-p 2022:2022
-p 10080:10080
--mount type=bind,source=/mnt/hdd_hikvision/sftpgo/sftpgodata,target=/srv/sftpgo
--mount type=bind,source=/mnt/hdd_hikvision/sftpgo/sftpgohome,target=/var/lib/sftpgo
-e SFTPGO_WEBDAVD__BINDINGS__0__PORT=10080
-d drakkan/sftpgo
格式没法调,请看下图
注意,按官方文档,宿主机ID为1000的用户(并不需要实际存在这个用户)需要有上面映射的两个目录的写权限:
chown -R 1000:1000 /mnt/hdd_hikvision/sftpgo/sftpgodata
chown -R 1000:1000 /mnt/hdd_hikvision/sftpgo/sftpgohome
宿主机的目录sftpgodata映射容器的/srv/sftpgo目录,用来持久化备份数据,也就是备份的目标目录。sftpgohome目录用来储存SFTPGo的元数据。
SFTPGO_WEBDAVD__BINDINGS__0__PORT=10080 表示启动WebDAV服务(默认是不启动的),端口是10080。
另外这个容器提供了web管理界面,端口是8080,我这里映射到宿主机的18080。
容器启动后,进入web管理页面:http://host-ip:18080,然后设置一个管理员账号。
登录后,还需要设置一个使用账号,赋予具体权限,这个账号就是威联通HBS 3连接WebDAV用的。
权限这里我就偷懒全选了
最后提交,完成用户设置。
HBS 3配置
HBS3的备份任务配置与前文类似,在设置WebDAV连接时,用户ID为上节中的使用用户名,并不是web页面登录用户。服务器端口是10080,即容器启动的WebDAV端口(映射到宿主机的)。
备份目录的结构是这样的:
/sftpgodata映射的目录/data/sftpgo用户名/HBS3备份任务名/威联通备份目录结构,实际目录是比较深的,这个在查找文件时有一点点麻烦。
开始备份后的NAS状态如下图
经过1小时50后完成备份任务,此次传输了19万个文件,共136G左右。有很多小文件,导致总体速度比较慢。如果是bytemark/webdav这个容器,上面的任务无法完成。
总结
实际使用后确认SFTPGo能够提供稳定的WebDAV服务,在它的支持下局域网服务器+外置硬盘可作为NAS的备份仓库。另外,SFTPGo的功能并不只局限于提供WebDAV服务,它还可以提供sftp和ftp,还具有权限管理,对于这个工具的使用后续可以继续探索。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~














wakeforest
校验提示文案
wakeforest
校验提示文案