备份云服务器上文件到NAS

前言

博客网站是通过宝塔部署在云服务器上的,防止云服务器出现问题导致数据丢失,就想着将数据库备份文件保存一份到家里的 NAS 上。 NAS 本身有 FTP 服务器,但因为端口问题连不上。最终解决方案是在 NAS 上运行一个 HTTP 文件服务,通过上传的方式保存。如果有相似需求的可以参考一下。

前置条件

  • 家里的网能获取公网 IP
  • 有一个自己域名

1. 让域名能解析到家里宽带的公网IP

我使用的是 ddns-go,一个能自动获取公网 IP,并设置域名解析的服务,支持的域名服务商 Alidns(阿里云)Dnspod(腾讯云)Cloudflare华为云Callback百度云PorkbunGoDaddyGoogle Domain,支持 Mac、Windows、Linux 系统,支持 ARM、x86架构。

我是在 NAS 上部署了 docker arm 版本,简单配置之后,就能用域名解析到公网 IP 了。

GitHub - jeessy2/ddns-goDocker - jeessy/ddns-go

2. NAS 上运行 HTTP 文件服务

文件服务使用的是 filebrowser,一个用 go 实现的简单文件管理服务,能上传下载,支持多用户。

GitHub - filebrowser/filebrowser: 📂 Web File BrowserDocker - filebrowser/filebrowser

符合我上传文件的需求,而且运行所需资源不多。部署后,新增一个专门用来上传账号,限制账号只有上传权限(这里有坑,因为上传分 2 步,所以要包含 编辑 权限,否则会上传不了)。

在路由器、光猫上设置好端口开放,就可以通过域名+端口从外网上传文件到NAS了。

filebrowser-settings|500

3. 通过 shell 脚本定时上传指定目录下的文件

通过调试页面的上传接口,完成使用 curl 命令上传文件的 shell 脚本。 可以使用 crontab 定时执行,有宝塔面板的话,用计划任务更方便。

以下是脚本,修改目录、域名、登录账号密码,就可以了。

#!/bin/sh

# 目标目录
path="/www/backup/database"
# 上传后的目录
remotePath="test/"
# 域名
url="http://xxxx.xxx:8080"

# 登录
token=`curl -XPOST -H "Content-Type: application/json" ${url}/api/login -d '{"username":"upload","password":"pass","recaptcha":""}'`
#echo $token

# 上传
list=`ls $path`
for file in $list
do
    echo "upload file: $file"
    uploadUrl=${url}/api/tus/${remotePath}${file}?override=true
    #echo $uploadUrl
    # 创建文件
    curl -X POST -H "X-Auth: ${token}" $uploadUrl --data-binary "@${path}/${file}"
    # 上传文件
    curl -X PATCH -H "X-Auth: ${token}" -H "Content-Type: application/offset+octet-stream" -H "Upload-Offset:  0" --data-binary "@${path}/${file}" $uploadUrl
done
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇