Dropbox 具有一个优势:一旦系统中出现新的备份,它便会立即同步。方案是将新备份放入您的本地 Dropbox 文件夹(通过提供的 cron 脚本实现)。
在继续之前,您需了解:
- 您可以使用 Dropbox 存储文件,数量不超过您的计划允许范围。
- 免费计划最多可连接 3 台设备到 Dropbox(顺便提一下,Android 设备可以绕过此限制)。
- 当您在 Linux 服务器上运行 Dropbox 时,您需要仅同步一个文件夹。或者,由于 Dropbox 是双向解决方案,它可能会用云端的所有数据填充您的服务器。这可能会占用服务器空间。
- 您必须创建一个额外的 rsync 脚本,以在 Discourse 备份文件夹和本地 Dropbox 备份文件夹之间进行同步。这需要双倍空间用于备份。早期 Dropbox 允许符号链接,但目前该功能不可用。
- 访问您的备份不需要 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。
同步仍然有效,因此我不会升级它。上次符号链接支持就丢失了。
