你好,我正在寻找一种方法,将我的新 Discourse 论坛(部署在 Digital Ocean 的 Droplet 上)自动备份到我家庭网络中的 NAS 设备。该如何实现?
我不是程序员,不知道该如何着手开发一个用于此目的的插件。
你好,我正在寻找一种方法,将我的新 Discourse 论坛(部署在 Digital Ocean 的 Droplet 上)自动备份到我家庭网络中的 NAS 设备。该如何实现?
我不是程序员,不知道该如何着手开发一个用于此目的的插件。
最简单的方法是运行某种自动化任务(cron job)。具体取决于您拥有的 NAS 设备,您可以运行一些基本的 Linux 命令,例如 rsync。
您需要一种方式来连接 NAS 和 Droplet。一旦找到这种方法,我认为使用插件可能有些大材小用。您只需要像下面这样的代码,在 NAS 上通过 cron job 运行即可:
rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas
正如我上面提到的,能否运行此类操作取决于您具体使用的是哪款 NAS 设备。
谢谢马里奥。我有一台运行 OS6 的旧款 Netgear ReadyNAS ultra 6,据我了解它可能支持这种方法(我会进一步调查)。
我想我遇到的部分问题在于确定需要备份哪些文件或文件夹——我猜应该只是数据库吧?(我也假设所有发布的图片和附件等都嵌入在数据库中了?)
我应该使用什么路径来查找数据库?数据库是否真的以文件形式存储在 Discourse 目录中?我在 /var/discourse 里查看了一番,但以我外行的眼光来看,并没有发现任何看起来像数据库文件的东西。
您希望启用每日备份,并将备份存储于
/var/discourse/shared/standalone/backups/default
谢谢 Jay,看来这正是解决方案!
如果我已勾选“在备份中包含上传文件”,是否可以合理假设:即使将来需要在另一台服务器上完全重新开始,也无需额外备份其他内容?
(前提是:我使用的第三方插件不会突然再次无法下载)
另外,是否有办法自动清理每日备份目录,例如只保留最近 7 天的每日备份,而不再保留更多?
是的,管理仪表板中有相关设置,我暂时想不起具体名称。我之前发给您的脚本已使用备份存储的默认路径。
不过,结合 NAS 中的 rsync 和该命令,您可以进行配置,使其同时清除 NAS 上的旧备份,这样一切就配置好了。
谢谢,马里亚诺。
在 ReadyNAS 论坛上,有人建议虽然可以在 ReadyNAS 上使用 cron,但这并非最佳方案,内置的“systemd timers”更好。不过我不确定它是否能支持像远程目录清理这样复杂的功能。
目前,每当我尝试从 ReadyNAS 连接到 Discourse 服务器时,都会遇到“权限被拒绝(publickey)”的错误——尽管我已经将 ReadyNAS 的公钥添加到了 Digital Ocean 上的 SSH 用户列表中。
如果有任何进展,我会在这里汇报,供其他尝试此操作的人参考。
清理工作由 Droplet 中的 Discourse 直接执行,但 rsync 拥有海量选项,因此您可以根据喜好自定义备份复制过程。
请确保重启 SSH 服务器,这有时可以解决一些公钥问题。
谢谢马里亚诺。
刚刚重启了服务器,但仍然出现以下错误:
权限被拒绝(公钥)。
rsync:连接意外关闭(到目前为止接收了 0 字节)[接收方]
rsync 错误:无法解释的错误(代码 255),位置 io.c(235) [接收方=3.1.3]
毫无疑问问题出在我身上,可能是尝试用错误的用户登录或其他原因——尽管我已尝试使用在将公钥添加到 Digital Ocean 时指定的用户名,以及“root”从 ReadyNAS 登录,但两者似乎都无法成功。
您是否已经使用密钥登录过服务器?比如在安装 Discourse 或重建应用程序时。
虽然不应该发生,但可能是服务器上的 SSH 禁用了公钥认证,或者 NAS 使用了错误的密钥进行登录。
请记住在此命令部分将密钥名称和路径更改为正确的值:"ssh -i ~/.ssh/id-rsa"
*** 编辑 ***
感谢 Mariano。最终成功了。
简而言之,供其他尝试此操作的人员参考:
在 ReadyNAS 上启用 SSH:ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support
使用 PuTTY 访问 Digital Ocean 服务器并输入:
nano /root/.ssh/authorized_keys
在编辑器中,将 ReadyNAS 使用的公钥文本复制粘贴到 /root/.ssh/authorized_keys 文件末尾(注意不要覆盖已存在的任何密钥)。
在 ReadyNAS 备份对话框设置中,我使用了以下配置:
名称:通过远程 SSH 进行 Rsync 备份(下拉选择)
主机:mydomain.com(或服务器 IP 地址)
端口:22
路径:/var/discourse/shared/standalone/backups/default
登录用户:root
(请注意,如果按照正确步骤为 ReadyNAS 设置了 SSH 访问权限,则其公钥/私钥对不会关联任何 SSH 密码短语。这一点非常重要,因为 ReadyNAS 备份对话框不支持设置密码短语。)
起初,该过程并未完全奏效——在 ReadyNAS 备份对话框中使用这些设置点击“测试”按钮时,连接成功,但随后启动备份时却报错“磁盘配额超出限制 (122)”。
然而几个小时后,在我未进行任何明显干预的情况下,当备份进程在自动设定的时间再次启动时,这次一切正常。
可能是我之前尝试建立连接并使用不同设置进行测试的操作产生了某些残留影响,阻碍了进程;或者是因为我同时以 root 身份通过 PuTTY 从 PC 登录服务器,同时又通过 FileZilla(两者均使用 root 的默认密钥)登录,随后又尝试通过 ReadyNAS 设备备份工具(使用已添加到 root 的 ReadyNAS 公钥)以 root 身份登录,从而引发了问题。