字
字节笔记本
2026年5月3日
postgres-backup-r2 - Supabase 定时备份到 R2
API中转
¥120
最简单的 PostgreSQL/Supabase 定时备份到 Cloudflare R2 的 Docker 解决方案。
核心特性
| 特性 | 说明 |
|---|---|
| 定时备份 | 支持 cron 表达式,灵活配置备份频率 |
| 自动清理 | 支持备份保留策略,自动删除旧备份 |
| 加密支持 | 可选的备份加密功能 |
| 一键恢复 | 支持从 R2 直接恢复备份 |
| 多版本支持 | 支持 PostgreSQL 12-17 |
| Docker 化 | 开箱即用,无需复杂配置 |
快速开始
Docker Compose 配置
yaml
version: '3.8'
services:
supabase-backup:
image: dcalsky/postgres-backup-r2:16
environment:
SCHEDULE: '@daily'
BACKUP_KEEP_DAYS: 30
PASSPHRASE: 'your-encryption-key'
CLOUDFLARE_R2_REGION: auto
CLOUDFLARE_R2_ACCESS_KEY_ID: ${R2_ACCESS_KEY}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${R2_SECRET_KEY}
CLOUDFLARE_R2_BUCKET: supabase-backups
CLOUDFLARE_R2_ENDPOINT: https://${ACCOUNT_ID}.r2.cloudflarestorage.com
R2_PREFIX: daily-backups
POSTGRES_HOST: db.xxxxx.supabase.co
POSTGRES_DATABASE: postgres
POSTGRES_USER: postgres.xxxxx
POSTGRES_PASSWORD: ${SUPABASE_DB_PASSWORD}
POSTGRES_PORT: 5432
restart: unless-stopped环境变量说明
| 变量名 | 必填 | 说明 |
|---|---|---|
SCHEDULE | 是 | Cron 表达式,如 @daily 或 0 2 * * * |
BACKUP_KEEP_DAYS | 否 | 备份保留天数,默认7天 |
PASSPHRASE | 否 | 加密密钥,设置后自动加密备份 |
CLOUDFLARE_R2_ACCESS_KEY_ID | 是 | R2 Access Key |
CLOUDFLARE_R2_SECRET_ACCESS_KEY | 是 | R2 Secret Key |
CLOUDFLARE_R2_BUCKET | 是 | R2 Bucket 名称 |
CLOUDFLARE_R2_ENDPOINT | 是 | R2 端点 URL |
POSTGRES_HOST | 是 | 数据库主机地址 |
备份恢复
恢复最新备份
bash
docker exec <容器名称> sh restore.sh按时间戳恢复
bash
docker exec postgres-backup sh restore.sh 20250201_140500查看可用备份
bash
docker exec -it <容器名称> sh
aws s3 ls s3://${CLOUDFLARE_R2_BUCKET}/${R2_PREFIX}/ --endpoint-url=${CLOUDFLARE_R2_ENDPOINT}相关链接
- GitHub 仓库: https://github.com/dcalsky/postgres-backup-r2
- Docker Hub: https://hub.docker.com/r/dcalsky/postgres-backup-r2
分享: