# 备份与恢复

## 备份内容

- PostgreSQL：订单、用户、权限、支付、发票、提现、运营数据。
- MinIO：产品图片、资料附件、发票 PDF、交付文件、后台上传文件。
- 环境文件：`.env.production` 只做服务器离线加密备份，不进 Git。
- 微信支付证书：`secrets/wechatpay/` 只做离线加密备份，不进 Git。

## 手动备份

```bash
make backup
```

输出目录：`backups/YYYYMMDD-HHMMSS/`

- `postgres.sql`
- `minio-data.tgz`

## 自动备份建议

在服务器 crontab 中配置：

```cron
15 3 * * * cd /srv/dlbdi && make backup >> /var/log/dlbdi-backup.log 2>&1
30 4 * * 0 find /srv/dlbdi/backups -maxdepth 1 -type d -mtime +30 -print
```

每周把最近一次备份复制到另一台机器或外接盘。生产第一版至少做到每日本机备份加每周异地备份。

## 恢复演练

不要直接在生产库做恢复演练。用一台临时服务器或临时 Compose 项目：

```bash
docker compose --env-file .env.production down
docker volume rm dlbdi_postgres_data dlbdi_minio_data
docker compose --env-file .env.production up -d postgres minio
docker compose --env-file .env.production exec -T postgres sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < backups/<timestamp>/postgres.sql
cat backups/<timestamp>/minio-data.tgz | docker compose --env-file .env.production exec -T minio tar -C /data -xzf -
docker compose --env-file .env.production up -d
```

恢复后验证：

- `/api/health/deep` 正常。
- 登录、订单、支付记录、文件下载正常。
- 上传新文件后可访问。
- 后台订单、用户、专家提现数据完整。
- 发票 PDF/OFD 可下载。
- `/admin/exceptions` 可查看历史异常事件。
- Grafana 能看到恢复后服务指标。

## 演练记录模板

- 演练时间：
- 备份目录：
- 恢复环境：
- 数据库恢复耗时：
- MinIO 恢复耗时：
- 验证账号：
- 发现问题：
- 下次改进：

## RPO / RTO 目标

- RPO：最多丢失 24 小时数据；生产稳定后升级到 1 小时。
- RTO：重大故障 4 小时内恢复核心访问；生产稳定后升级到 1 小时。
