我正在使用 Cloudflare R2 进行媒体上传,但我认为它不适用于数据库备份。我需要使用 rclone 备份哪些文件目录?
您可能会发现以下主题很有帮助
Discourse 文件/目录备份到 ProtonDrive(R2/S3 媒体除外)
步骤 1 — upload:// 的含义
upload://
评论
Discourse 仅在帖子内容(原始/已处理)中存储 引用 upload://<hash>。在构建或渲染时,Discourse 会查询其数据库表(如 uploads、post_uploads 等),根据上传文件的存储位置(本地、CDN、S3/R2 等)将这些哈希解析为实际的 URL 或路径。
步骤 2 — 在容器内的位置
/shared/uploads/default
评论
在标准的 Docker 安装(使用 launcher 和 app.yml)中,容器内的 /shared 是从主机的 /var/discourse/shared/standalone 绑定的。Discourse 写入的所有持久化数据——包括上传文件、日志、备份等——都位于 /shared 下。
步骤 3 — 主机文件系统路径
/var/discourse/shared/standalone/uploads/default
评论
如果您不使用外部上传(S3/R2),那么这个路径是您必须同步到 ProtonDrive 以保留上传的帖子媒体的主要路径。如果您正在使用 S3/R2,大多数上传文件不会在这里,但某些文件(例如,优化后的变体、墓碑)可能仍然存在。请决定是否也要备份此路径。
步骤 4 — Docker 卷映射 (app.yml)
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
评论
容器内 /shared 中的所有内容都成为主机上的 /var/discourse/shared/standalone。如果您备份此目录树,您将获得上传文件、备份压缩包、日志,以及(可选)如果保留在磁盘上的 PostgreSQL 数据(尽管备份压缩包通常足以恢复)。
要备份的具体目标(本地存储)
最少集(如果您信任 Discourse 的压缩包备份):
/var/discourse/shared/standalone/backups/ # Discourse 生成的完整备份(压缩包 .tar.gz 文件)
/var/discourse/shared/standalone/uploads/ # 仅当您在本地存储上传文件时
评论
- 压缩包备份指的是 Discourse 备份功能创建的 .tar.gz 文件。它包含整个数据库转储、站点配置、主题,以及(可选,如果选择)所有本地上传文件。它不包含存储在外部 S3/R2 上的媒体;仅包含引用它们的数据库记录。
- 如果您的上传文件位于 S3/R2 上,您可能只需要本地的
/backups/以及一个单独的进程来备份您的对象存储桶。
“我可能需要的一切”集(文件系统级别复制):
/var/discourse/shared/standalone/backups/ # 完整的 Discourse 备份(压缩包)
/var/discourse/shared/standalone/uploads/ # 本地上传文件/媒体(如果不是 S3/R2)
/var/discourse/shared/standalone/log/rails/ # (可选)Rails 日志 — 有助于取证
/var/discourse/shared/standalone/tmp/backups/ # (可选)临时备份暂存区(通常为空)
/var/discourse/shared/standalone/postgres_data/ # (可选)原始 PostgreSQL 数据目录 — 通常不需要
/var/discourse/containers/ # 您的 app.yml 和任何容器 YML 文件(配置)
/etc/letsencrypt/ # (可选)如果主机上终止 SSL,则为 TLS 证书
评论
- 原始 PostgreSQL 数据通常不需要,因为压缩包备份包含逻辑数据库转储,这对于恢复更安全。
- /containers 体积小但对灾难恢复至关重要——它包含您的设置和卷映射。
- TLS 证书仅在您在容器外进行 SSL 时才重要。
快速单行映射
upload://
↓
/shared/uploads/default (Docker 内部)
/var/discourse/shared/standalone/uploads/default (主机上)
评论
如果您使用 S3/R2:
- 单独备份您的 S3/R2 存储桶(例如,使用 Rclone)。
- 仍考虑备份
/backups/(压缩包,包含数据库和配置、站点上传文件,但不包含外部媒体)和/containers/。
ProtonDrive 线程的 TL;DR
- 本地上传文件? 备份:
- /var/discourse/shared/standalone/uploads/
- /var/discourse/shared/standalone/backups/ # (包含 .tar.gz 格式的压缩包备份)
- S3/R2 上传文件? 备份:
- /var/discourse/shared/standalone/backups/ # (压缩包备份:数据库/配置/上传文件表)
- 使用另一个工具备份您的 S3/R2 存储桶
- 可选:/containers/、/log/rails/ 和 postgres_data 以实现完整的灾难恢复覆盖
评论
压缩包备份:Discourse 备份系统创建的 .tar.gz 文件,包含逻辑数据库转储、主题、配置和(可选)本地上传文件,但从不包含外部 S3/R2 媒体。
我想强调的是,我每次迁移服务器(依靠 tarball 备份来保存本地上传文件)时,默认的 app.yml 文件都会有所不同。
因此,最好手动将旧 app.yml 的部分内容复制并替换到新文件中。
我想尝试使用 docker cp 命令将 discourse 容器中的备份文件提取到宿主机系统上,如果需要的话。