Skip to content

feat(backup): implement Backup & DR stack with 3-2-1 strategy#352

Open
sungdark wants to merge 2 commits intoillbnm:masterfrom
sungdark:feature/backup-dr-stack
Open

feat(backup): implement Backup & DR stack with 3-2-1 strategy#352
sungdark wants to merge 2 commits intoillbnm:masterfrom
sungdark:feature/backup-dr-stack

Conversation

@sungdark
Copy link
Copy Markdown

实现 Backup & Recovery Stack(备份与灾难恢复)

实现了什么

服务清单:

  • Duplicati (linuxserver/duplicati:2.0.8) - 备份管理 Web UI
  • Restic REST Server (restic/rest-server:0.13.0) - 本地备份仓库
  • Resticker - 定时增量备份
  • Rclone (rclone/rclone:1.68.0) - 云存储同步

3-2-1 备份策略:

  • 3 份数据: 源数据 + 本地备份 + 异地备份
  • 2 种介质: 本地 Restic 仓库 + S3/R2/B2 云存储
  • 1 份异地: Rclone 同步到云存储

备份内容:

  • PostgreSQL 数据库 (pg_dumpall)
  • MariaDB 数据库 (mysqldump)
  • Redis 数据 (BGSAVE)
  • Docker 卷
  • 配置文件 (.env, config/, stacks/)

新增文件

stacks/backup/
├── docker-compose.yml     # Duplicati + Restic + Resticker + Rclone
├── .env.example           # 备份配置
└── README.md              # 详细文档

scripts/
├── backup.sh              # 主备份脚本
├── restore.sh             # 恢复脚本
├── pre-backup.sh          # Resticker 前置钩子
└── post-backup.sh         # Resticker 后置钩子 + 云同步

docs/
└── disaster-recovery.md   # 灾难恢复文档

使用方法

# 备份所有
./scripts/backup.sh --target all

# 恢复
./scripts/restore.sh --target all --backup-id <snapshot_id>

# 验证备份
./scripts/backup.sh --verify

验收标准

  • ✅ Duplicati Web UI 可访问 (https://backup.${DOMAIN})
  • ✅ backup.sh 成功执行备份
  • ✅ restore.sh 可从备份恢复
  • ✅ Rclone 成功同步到云存储
  • ✅ 备份数据加密存储 (AES-256 via Duplicati)

Bounty: $150 USDT
Issue: #12

SubAgent added 2 commits March 26, 2026 14:09
…edis 7.4, MariaDB 11.4, phpMyAdmin 5.2

- Update PostgreSQL to 16.4-alpine with backup script and persistent storage
- Update Redis to 7.4.0-alpine with maxmemory-policy allkeys-lru (512mb limit)
- Update MariaDB to 11.4.2 with root login disabled, app user enabled
- Add phpMyAdmin 5.2.1 accessible via phpmyadmin.${DOMAIN}
- Add backup scripts for PostgreSQL and MariaDB in config/databases/
- Update .env.example with POSTGRES_DB_PASSWORD, POSTGRES_BACKUP_PASSWORD, MARIADB_PASSWORD
- Add databases stack README.md with usage documentation
- Update root README.md service catalog
- Add stacks/backup/ with Duplicati, Restic REST Server, Resticker, Rclone
- Implement 3-2-1 backup strategy: 3 copies, 2 media, 1 offsite
- Support PostgreSQL, MariaDB, Redis, Docker volumes, configs backup
- Add backup.sh with full backup functionality (all/databases/volumes/configs/restic)
- Add restore.sh for interactive and scripted restore
- Add pre/post-backup hooks for Resticker
- Add disaster-recovery.md documentation with full restore guide
- Update .env.example with backup-related variables
- Update README.md service catalog

Bounty: $150 USDT
Issue: illbnm#12
@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

4 similar comments
@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

@zhuzhushiwojia
Copy link
Copy Markdown

我来认领

@zhuzhushiwojia
Copy link
Copy Markdown

我来认领此任务!

我有丰富的备份恢复和灾难恢复经验,可以立即开始工作。

钱包地址:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1

预计交付时间: 3天内完成所有配置和文档。

@zhuzhushiwojia
Copy link
Copy Markdown

🚀 Claiming this $150 Backup & DR stack bounty!

I will work on implementing the 3-2-1 backup strategy with Duplicati + Restic. Ready to start!

@zhuzhushiwojia
Copy link
Copy Markdown

🦞 Bounty Claim

I would like to claim this bounty!

Wallet Addresses:

  • USDT TRC20: TMLkvEDrjvHEUbWYU1jfqyUKmbLNZkx6T1
  • SOL: 9xsvaaYbVrRuMu6JbXq5wVY9tDAz5S6BFzmjBkUaM865
  • RTC: RTC53fdf727dd301da40ee79cdd7bd740d8c04d2fb4

I will start working on this immediately. Expected completion: 3-5 days.

Let me know if there are any specific requirements! 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants