跳到正文

自托管 · PostgreSQL · age 加密

SupaCove 用 pg_dump 导出托管 PostgreSQL 的数据,流式加密后备份到你自己的 S3 兼容对象存储。失败明确可见,恢复独立于实例。

Aiven、Prisma Postgres、TigerData、Miget、Render 按标准 PostgreSQL 接入,尚未逐一实测

01功能

每个功能,都有一页文档。

查看全部文档 →

02加密

私钥只出现一次,由你离线保管。

备份在导出的同时用 age 流式加密。默认情况下实例内只保存公钥,解密用的私钥由你离线保管。

  • 内置 age 算法库X25519 + ChaCha20-Poly1305,无需外部 age CLI
  • 实例默认只存公钥实例内只保存公钥(recipient)。唯一的例外是开启恢复验证:那需要把私钥文件交给运行中的实例
  • 丢失私钥 = 备份不可恢复identity.txt 是解密所有备份的唯一私钥,请离线加密保存
初始化 age 加密身份 →

03快速开始

三条命令,跑起一台实例。

构建镜像、启动容器、领取一次性令牌。接着初始化 age 身份、注册数据库并做首次备份,最后验证一次恢复。

按六步走完快速开始 →

快速开始01–03 / 06

# 1. 构建镜像docker build --target runtime -t supacove:local .# 2. 启动docker run -d --name supacove \  -p 127.0.0.1:8080:8080 \  -v supacove-data:/app/data \  supacove:local# 3. 初始化管理员docker exec supacove /app/supacove bootstrapOne-time bootstrap token (valid 15m0s):   jkwioY…
  1. 接着
  2. 04初始化 age 身份
  3. 05注册数据库并备份
  4. 06验证恢复

04流水线

一次备份,六个阶段。

导出、加密、提交任何一步失败,任务都会落为 failed。验证和通知各有自己的状态:验证失败不改写任务结果,通知重试耗尽会标记 dead。

  1. 01

    导出

    pg_dump --format=custom

  2. 02

    加密

    age 流式加密,X25519 + ChaCha20-Poly1305

  3. 03

    暂存

    本地原子提交:.inprogress → 最终名

  4. 04

    上传

    配置了目的地时写入远端对象存储,读回哈希校验

  5. 05

    验证可选

    在内嵌 PostgreSQL 里真实恢复一次

  6. 06

    通知

    outbox 投递 webhook,带重试

实例没了,备份还在。

元数据库不是恢复的前提。manifest 自描述:服务器版本、表数、SHA-256、recipient 指纹都在里面。

*.dump.age密文,连同同名 manifest
+
identity.txt离线 age 私钥
+
restore.sh恢复套件
=
你的数据库pg_restore
  1. 01校验密文 SHA-256
  2. 02拒绝非空目标库
  3. 03age 解密
  4. 04pg_restore
  5. 05manifest 有表数时核对
恢复与灾备

05保证

四条保证,不打折扣。

  1. 01

    失败不伪装成功

    导出、加密、提交任何一步失败,任务都会落为 failed,绝不会标记 succeeded。

  2. 02

    重启可收敛

    停机中断的任务记为 interrupted,不产生假失败告警。满足续传条件时启动自动续传;不满足时保持可解释的终态,由下一次计划运行恢复备份链。

  3. 03

    备份独立可恢复

    恢复只需要三样东西:密文文件、离线保存的 age 私钥、恢复套件脚本。

  4. 04

    秘密不出错误面

    密码与凭据在日志、API 错误、任务记录、指标四条出口都被脱敏。

06常见问题

先回答,再细说。

Supabase 免费套餐有备份吗?
Supabase 官方文档写明免费套餐的项目没有自动备份,并建议定期导出数据、保留异地副本。SupaCove 按 Cron 计划替你做这件事。Supabase 官方文档 · 核对于 2026-10-08
和平台自带的备份有什么区别?
平台的备份留在平台里。SupaCove 的副本在写出前就已加密,存进你自己的对象存储,私钥由你离线保管,恢复时不需要这台实例。
备份包含 Supabase Storage 里的文件吗?
不包含。备份是对 Postgres 数据库的一次完整 pg_dump:包含 auth 用户记录和 storage 对象元数据,不包含文件内容、Edge Functions 代码和项目设置。
恢复需要什么?
密文及其 manifest、离线保存的 age 私钥、恢复套件脚本,以及一个空的 PostgreSQL 数据库。Supabase 的备份要恢复到带有 Supabase 扩展的服务器上,步骤见 Supabase 指南。
支持哪些平台?
Supabase、Neon、Railway 有专门的连接提示。Aiven、Prisma Postgres、TigerData、Miget、Render 是标准 PostgreSQL,按“自托管/其他”注册,我们尚未逐一实测。CockroachDB 不支持。

07目录

全部文档,按阅读顺序。

  1. 01SupaCove 是什么自托管的 PostgreSQL 加密备份工具:BYOS、age 加密、可验证恢复
  2. 02快速开始拉取镜像、初始化实例、注册数据库并完成首次加密备份
  3. 03安装部署GHCR 镜像、发行版二进制、源码构建与部署拓扑;compose 仅用于开发
  4. 04配置参考全部 SB_* 环境变量:默认值、语义与风险
  5. 05注册数据库连接串规则、各平台注意事项、角色权限与 TLS 模式
  6. 06存储目的地把加密备份上传到你自己的 S3、Cloudflare R2 或 Backblaze B2 存储桶,可在控制台或通过 API 配置
  7. 07计划与保留cron 计划、新鲜度阈值、暂停语义与保留策略
  8. 08心跳监控外部监控集成:成功 ping、失败 ping、年龄门控与禁用
  9. 09通知 Webhook三种事件、outbox 重试语义与投递日志
  10. 10备份与下载任务状态机、三种下载形态与失败语义
  11. 11恢复与灾备恢复套件、独立恢复(无元数据库)与三类密钥事故
  12. 12监控与指标/metrics 语义、面板口径与告警建议
  13. 13故障排查高频问题速查:登录、池化、池、时区、暂存与验证

指南

  1. 01备份 Supabase 数据库用 SupaCove 为 Supabase 的 Postgres 数据库做定时加密的 pg_dump 备份:包含什么、怎么配置、怎么恢复

下一步

先恢复一次,再相信备份。

快速开始一共六步,最后一步就是用恢复套件把刚做的备份恢复到一个新库里。强烈建议做一次。

内置客户端
PostgreSQL 14–18
加密
X25519 + ChaCha20-Poly1305
存储
S3 / R2 / B2 / MinIO
许可
AGPL-3.0