news 2026/9/14 3:26:17

SuperSync 服务器怎么配置每日自动 PostgreSQL 数据库备份并通过 rclone 上传异地存储?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SuperSync 服务器怎么配置每日自动 PostgreSQL 数据库备份并通过 rclone 上传异地存储?

SuperSync 服务器怎么配置每日自动 PostgreSQL 数据库备份并通过 rclone 上传异地存储?

【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity

Super Productivity 的自托管同步服务(SuperSync Server)把数据库跑在 Docker 化的 PostgreSQL 容器里。服务器是操作日志的中继,但用户账号、Passkey 凭据只存在于服务器端,因此需要定期备份 PostgreSQL 并把备份送到异地。仓库自带了备份脚本 backup.sh 和操作文档 backup-and-recovery.md:脚本生成全量 dump 和账号 dump 两份 gzip 文件,加 cron 就是每日自动备份,设置RCLONE_REMOTE并传--upload参数即可通过 rclone 上传到 B2/S3 等异地存储。本文按文档给出的路径,把这套机制在已部署的 SuperSync 服务器上配置起来。

前提条件

  • 已按 README 完成部署:Docker(含 Compose 插件)、curlgitjq,通过cp env.example .env配置环境变量后运行./scripts/deploy.sh部署了整套服务。
  • 备份脚本默认连接名为supersync-postgres的 PostgreSQL 容器,数据库用户和库名默认都是supersync。如果你的部署修改过这些值(对应.env中的POSTGRES_USER/POSTGRES_DB,参考 env.example),需要用下表的环境变量覆盖。

文档列出的可配置变量及默认值:

变量默认值说明
BACKUP_DIR../backups备份文件的存放位置(相对脚本目录,即服务目录下的backups/
RETENTION_DAYS14删除超过该天数的备份
DB_CONTAINERsupersync-postgresDocker 容器名
POSTGRES_USERsupersync数据库用户
POSTGRES_DBsupersync数据库名
RCLONE_REMOTE(空)可选的 rclone 远端,用于异地上传

第一步:先手动跑一次备份确认脚本可用

在 SuperSync 服务的源码检出目录(即packages/super-sync-server)下执行:

./scripts/backup.sh

脚本会依次做四件事:

  1. 生成账号 dumpsupersync_accounts_YYYYMMDD_HHMMSS.sql.gz(只含userspasskeys两张表,文档示例说明其体积很小,通常 <1MB)。它先于全量 dump 生成,确保即使全量 dump 中途失败,账号凭据也有副本。
  2. 生成全量 dumpsupersync_YYYYMMDD_HHMMSS.sql.gz(整个数据库;文档提示活跃实例约 300MB 起,全量 dump 可能耗时较长)。
  3. 如果传了--upload且设置了RCLONE_REMOTE,用 rclone 把两个文件拷到远端;--uploadRCLONE_REMOTE为空时会打印警告,rclone 未安装时也会打印警告并跳过上传。
  4. 清理超过RETENTION_DAYS天的旧备份。

脚本输出类似(文档中的说明性输出,非固定预期):

==> SuperSync Backup Date: ... Output: .../supersync_YYYYMMDD_HHMMSS.sql.gz Accounts backup size: ... Full backup size: ... ==> Backup complete

几个脚本内置的安全细节,理解它们有助于判断输出是否正常:脚本以umask 077运行并把BACKUP_DIR权限设为 700,因为 dump 里含密码哈希和 Passkey 凭据;dump 写入.tmp文件、成功后才改名,失败的运行不会留下看起来完整实则截断的备份;脚本还会清理超过 6 小时没有写入的supersync_*.sql.gz.tmp残留。

第二步:配置 rclone 远端(异地上传的前提)

这一步是可选分支,只有需要异地备份才做;只做本地每日备份可跳过,直接到第三步并把 cron 中的--upload去掉。

文档给出的安装方式(注意副作用:管道安装脚本、以sudo权限向系统安装 rclone):

curl https://rclone.org/install.sh | sudo bash

然后交互式配置远端(例如 Backblaze B2,也支持 S3),按提示填入账号信息:

rclone config

配置完成后会得到一个 rclone remote 名称,文档中给出的示例有b2:my-bucket/supersyncb2:supersync-backupss3:my-bucket/supersync等形式,实际以你配置出来的为准。验证方式就是运行脚本时观察是否出现==> Uploading to <RCLONE_REMOTE>...以及Upload complete;若看到Warning: rclone not installed, skipping upload,说明安装没成功。

第三步:配置每日自动备份的 cron

文档给出的每日 3 点执行、保留 3 天的 cron 写法(在部署服务器上以 root 身份执行):

(crontab -l 2>/dev/null; echo "0 3 * * * RETENTION_DAYS=3 flock -n /run/supersync-backup.lock /path/to/scripts/backup.sh >> /var/log/supersync-backup.log 2>&1") | crontab -

这条命令会向当前用户的 crontab追加一行(crontab -l先导出已有条目再合并,不覆盖已有计划)。使用它之前需要两处替换,并在 cron 表达式中补上异地上传参数:

  • /path/to/scripts/backup.sh替换为部署机上备份脚本的绝对路径(文档中的占位写法,脚本要求以绝对路径引用)。
  • 如果要每日自动上传异地,需要让 cron 里的脚本带--upload并设置RCLONE_REMOTE。例如:
(crontab -l 2>/dev/null; echo "0 3 * * * RETENTION_DAYS=3 RCLONE_REMOTE=b2:my-bucket/supersync flock -n /run/supersync-backup.lock /path/to/scripts/backup.sh --upload >> /var/log/supersync-backup.log 2>&1") | crontab -

其中b2:my-bucket/supersync换成你第二步配置的 remote 名。

两个参数为什么这么写:

  • flock -n /run/supersync-backup.lock:防止一次缓慢的 dump 与当晚下一次运行重叠。文档特别强调锁文件必须放在/run这类 root 专属目录——放在人人可写的/tmp里,任何本机用户都可能提前占住该路径,让每晚的备份静默失败。
  • RETENTION_DAYS=3:cron 示例用 3 天保留期;脚本默认值是 14 天,按你对本地备份保留周期的要求调整这个值即可。

验证备份是否按预期工作

文档给出的三项检查命令:

# 检查备份存在且大小合理 ls -lh backups/ # 验证 dump 包含合法 SQL gunzip -c backups/supersync_YYYYMMDD_HHMMSS.sql.gz | head -5 # 检查 cron 是否在跑 cat /var/log/supersync-backup.log
  • ls -lh backups/应能看到每日新增的supersync_YYYYMMDD_HHMMSS.sql.gz和对应的supersync_accounts_*.sql.gz
  • gunzip -c ... | head -5能输出 SQL 内容说明归档可解压且是合法 dump(文件名按当天实际生成物替换);
  • /var/log/supersync-backup.log应包含每次运行的输出;若异地上传未生效,日志里会出现Warning: --upload specified but RCLONE_REMOTE not setWarning: rclone not installed, skipping upload,按提示补环境变量或安装 rclone。

边界与限制

  • 备份只覆盖数据库。宿主机快照类备份(如 VPS 厂商的每日快照)不能替代pg_dump——文档指出对运行中 PostgreSQL 做文件系统级备份可能不具备崩溃一致性,但它可以覆盖配置、TLS 证书、Docker 配置等pg_dump不涉及的服务器状态,两者组合使用效果更好。
  • 异地上传只发生在脚本被显式传--uploadRCLONE_REMOTE非空时;手动运行不带--upload的话只做本地备份和清理。
  • 全量 dump 可能耗时数小时(文档以“1-2 h”描述典型窗口,活跃实例约 300MB 起),这正是 cron 里需要flock的原因;备份会话在pg_stat_activity中以application_name=supersync-backup标识,配套的健康检查脚本对该名称做了长查询豁免。
  • 备份如何用于恢复(账号级恢复、全库恢复、单用户回滚)在 backup-and-recovery.md 的 Disaster Recovery 与 Per-User Recovery 章节有完整流程,本文不展开。

【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 3:26:12

2026最新Codex下载安装全攻略:三渠道+全平台避坑指南

打开任何一个技术社区&#xff0c;输入“Codex下载地址”这个词&#xff0c;你大概率会得到一堆互相矛盾的答案&#xff1a;有人说从GitHub Releases拿解压包&#xff0c;有人说 npm install 一条命令搞定&#xff0c;还有人强调必须靠Homebrew才能装。到了2026年&#xff0c…

作者头像 李华
网站建设 2026/9/14 3:26:03

PSD转游戏UI自动化:从设计稿到Prefab的四段式管线

1. 为什么PSD转游戏UI不能靠“切图手动拼”1.1 传统工作流到底慢在哪游戏UI的生产流程&#xff0c;绝大多数团队到现在还是这么转的&#xff1a;美术在PSD里画好界面&#xff0c;切图导出PNG&#xff0c;然后发给客户端同学&#xff0c;客户端对着设计稿在引擎编辑器里手动摆放…

作者头像 李华
网站建设 2026/9/14 3:25:07

基于模糊控制的自动驾驶泊车系统设计与Matlab实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:24:07

如何应对 JSONL 的 Schema 漂移

如果你经常处理 JSONL 数据&#xff0c;大概率遇到过这种情况&#xff1a; 上游团队悄悄改了 JSON 的字段&#xff0c;可能是新增了一个字段、改了某个字段的类型&#xff0c;或者干脆删掉了某个字段。而你作为下游&#xff0c;直到跑数据时才发现解析失败&#xff0c;管道中断…

作者头像 李华
网站建设 2026/9/14 3:23:43

WDM PCI驱动开发实战:从设备枚举到IRP分发与INF安装

简介&#xff1a;面向Windows平台驱动开发者的PCI/PCIe驱动程序开发资料包&#xff0c;基于WDM&#xff08;Windows Driver Model&#xff09;模型编写&#xff0c;适合需要从零上手WDM驱动、理解PCI设备与系统交互的工程师。资源共20个文件&#xff0c;包含头文件&#xff08;…

作者头像 李华