使用 crontab 和 dropboxd 将备份上传到 Dropbox

Dropbox 具有一个优势:一旦系统中出现新的备份,它便会立即同步。方案是将新备份放入您的本地 Dropbox 文件夹(通过提供的 cron 脚本实现)。

在继续之前,您需了解:

  1. 您可以使用 Dropbox 存储文件,数量不超过您的计划允许范围。
  2. 免费计划最多可连接 3 台设备到 Dropbox(顺便提一下,Android 设备可以绕过此限制)。
  3. 当您在 Linux 服务器上运行 Dropbox 时,您需要仅同步一个文件夹。或者,由于 Dropbox 是双向解决方案,它可能会用云端的所有数据填充您的服务器。这可能会占用服务器空间。
  4. 您必须创建一个额外的 rsync 脚本,以在 Discourse 备份文件夹和本地 Dropbox 备份文件夹之间进行同步。这需要双倍空间用于备份。早期 Dropbox 允许符号链接,但目前该功能不可用。
  5. 访问您的备份不需要 root 权限,但本指南中我以 root 身份运行 Dropbox 守护进程(可能不安全,欢迎改进)。

首先,您需要在 Discourse 中设置备份,路径为 /admin/site_settings/category/backups(我的自定义值在括号中):

最大备份数量 (3) - 这决定了 Dropbox 中保留的文件数量
备份频率 (1) - 每天
每日备份时间 (3:30 UTC) - 默认值
备份 gzip 压缩级别 (6) - 在压缩速度 (1) 和更小体积 (9) 之间选择,但在 VPS 情况下,如果您的主机提供商检测到长时间的高 CPU 利用率,可能会重启您的服务器

其次,使用 shell 命令将服务器连接到 Dropbox(重要:因为我是以 root 身份运行该服务,所以在此步骤中我以 root 身份登录 - 因此您可以尝试使用普通用户):

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# 将创建 .dropbox-dist 目录
# 运行 dropbox 守护进程
sh ~/.dropbox-dist/dropboxd

当您在服务器上首次使用 Dropbox 时,您将看到一个唯一的网页链接。您需要将其复制并粘贴到网页浏览器中,然后按照说明操作。之后,您的主文件夹中将创建一个名为 Dropbox 的目录。官方 Dropbox 建议下载 Python 脚本 来管理您的守护进程。我不使用它。

管理守护进程的命令:

dropbox status
dropbox start
dropbox stop
检查是否已创建自动启动脚本(点击展开隐藏文本):
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Dropbox Service
After=network.target

[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Discourse 提供备份文件并管理其数量和频率。
Crontab rsync 任务将新备份复制到本地 Dropbox 文件夹。
之后,Dropbox 将新文件上传到云端。
当第二天晚上 Discourse 删除旧备份文件时,rsync 也会从 Dropbox 中删除它。

第三,为备份副本创建 Dropbox 文件夹:

mkdir ~/Dropbox/backups

第四,准备反向同步文件夹(取消同步不必要的文件夹)
例如,您的 Dropbox 文件夹包含子文件夹和文件:

backups
books
stuff
logo.png

您需要排除除 backups 之外的所有内容。实际上,该命令会将项目添加到排除列表中:

dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"

如果您意外将 backups 添加到排除列表中,可以通过从列表中删除该项目将其恢复同步:

dropbox exclude remove "Dropbox/backups/"

可以使用以下命令检查特定备份的当前状态:

dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz

第五,准备本地同步和清除缓存的脚本 /root/rsync.dropbox

#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/

第六,在当地时间上午 8 点将命令添加到 crontab:crontab -e

0 8 * * * /bin/bash /root/rsync.dropbox

在 UTC 时间凌晨 3 点到我的当地时间上午 8 点之间有一个时间窗口 - 这应该足够在开始与 Dropbox 同步之前完成备份。

附注
我已经有半年甚至更长时间没有检查此配置了。现在我意识到 dropbox status 命令返回了以下内容:

您正在使用旧版本的 Dropbox。请更新到最新版本以继续使用 Dropbox。

同步仍然有效,因此我不会升级它。上次符号链接支持就丢失了。

7 个赞