docs(backup): 備份審計完整盤點 + 新增 AWOOOI DB 與 Gitea DB 備份腳本

首席架構師備份審計結論:
- awoooi_prod PostgreSQL: 無備份 (P0 缺口)
- Gitea SQLite DB: 無備份 (今日已損壞,人工修復耗時 2h+)

新增:
- scripts/backup/backup-awoooi-db.sh (188 部署,02:00 daily)
- scripts/backup/backup-gitea-db.sh (110 部署,01:00 daily)
- docs/runbooks/BACKUP-STATUS.md (全景表 + 部署步驟 + SOP)
- LOGBOOK.md 備份審計段落

待手動部署:統帥需 scp 腳本至 188/110 並設定 crontab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-05 01:01:58 +08:00
parent 8300879d02
commit 84cfdb6195
4 changed files with 250 additions and 0 deletions

View File

@@ -5,6 +5,25 @@
---
## 📍 當前狀態 (2026-04-05 備份審計完成 + ADR-057 實作 + MinIO 修復)
| 項目 | 狀態 | 說明 |
|------|------|------|
| ADR-057 adopt() Gitea PR API 實作 | ✅ a81bf50 | drift_adopt_service.py 建立 |
| GITEA_API_TOKEN 注入 K8s Secret | ✅ | kubectl patch awoooi-secrets |
| MinIO 啟動Velero BSL Available | ✅ | docker compose up -d + 加入 startup.sh |
| Gitea SQLite DB 損壞修復 | ✅ | sqlite3 .recover 救回454 Actions runs |
| 備份審計 — 全景盤點 | ✅ | BACKUP-STATUS.md 建立 |
| AWOOOI PostgreSQL 備份腳本建立 | ✅ | scripts/backup/backup-awoooi-db.sh |
| Gitea SQLite 備份腳本建立 | ✅ | scripts/backup/backup-gitea-db.sh |
| **AWOOOI PostgreSQL 備份部署 (188)** | ⚠️ 待手動 | 見 BACKUP-STATUS.md 部署步驟 |
| **Gitea DB 備份部署 (110)** | ⚠️ 待手動 | 見 BACKUP-STATUS.md 部署步驟 |
**備份缺口**: awoooi_prod + Gitea DB 均無自動備份 → P0 待統帥手動部署
**文件**: `docs/runbooks/BACKUP-STATUS.md`
---
## 📍 當前狀態 (2026-04-05 Phase 25 首席架構師 Review R2 通過 + ADR-054~057 完成)
| 項目 | 狀態 | Commit |

View File

@@ -0,0 +1,150 @@
# BACKUP-STATUS.md — 備份狀態總覽
> 2026-04-05 Claude Code: 首席架構師完整盤點後建立
> 觸發原因Gitea DB 損壞事故(人工修復耗時 2+ 小時)+ Velero BSL UnavailableMinIO 未啟動)
---
## 備份全景圖
| 資料類型 | 主機 | 工具 | 排程 | 狀態 | 保留 |
|---------|------|------|------|------|------|
| K8s 資源 (全命名空間) | 188 | Velero + MinIO | 每日 02:00 | ✅ 正常 | 7 天 |
| MOMO PostgreSQL | 188 | backup-momo-db.sh | 每日 04:00 | ✅ 正常 | 30 天 |
| ClawBot/SignOz env | 188 | backup-env.sh | 每日 03:00 | ✅ 正常 | - |
| **AWOOOI PostgreSQL** | **188** | **backup-awoooi-db.sh** | **每日 02:00** | **⚠️ 待部署** | **30 天** |
| **Gitea SQLite DB** | **110** | **backup-gitea-db.sh** | **每日 01:00** | **⚠️ 待部署** | **30 天** |
| K3s Kine (k3s_datastore) | 188 | backup-awoooi-db.sh | 每日 02:00 | ⚠️ 待部署 | 30 天 |
---
## 各備份詳情
### ✅ Velero K8s 資源備份
```
Schedule: daily-backup (0 2 * * *)
Storage: MinIO @ 192.168.0.188:9000 (bucket: velero)
Status: 8 backups on record, BSL Available (確認 2026-04-05)
```
**注意**: MinIO 需在 188 開機後自動啟動。已加入 `awoooi-startup.sh` (commit c0c903d, 2026-04-05)。
**MinIO 檢查**:
```bash
ssh ollama@192.168.0.188 "docker ps | grep minio"
kubectl get backupstoragelocation -n velero
```
---
### ✅ MOMO PostgreSQL
```
Script: /home/ollama/scripts/backup-momo-db.sh
Cron: 0 4 * * *
Output: /home/ollama/backups/momo/momo_db_YYYY-MM-DD_HH-MM.sql.gz
Retention: 30 days
```
---
### ⚠️ AWOOOI PostgreSQL待部署
**資料庫清單(重要性順序)**:
- `awoooi_prod` — 主要生產 DB (KB 知識庫、事故記錄、AutoRepair 決策、Drift 報告)
- `awoooi_dev` — 開發 DB
- `k3s_datastore` — K3s Kine 後端
**腳本已建立**`scripts/backup/backup-awoooi-db.sh`
**部署步驟** (需在 192.168.0.188 執行):
```bash
# 上傳腳本
scp /Users/ogt/awoooi/scripts/backup/backup-awoooi-db.sh ollama@192.168.0.188:/home/ollama/scripts/
# 設定權限
ssh ollama@192.168.0.188 "chmod +x /home/ollama/scripts/backup-awoooi-db.sh"
# 建立 log 目錄
ssh ollama@192.168.0.188 "mkdir -p /home/ollama/logs"
# 加入 crontab
ssh ollama@192.168.0.188 "crontab -e"
# 加入: 0 2 * * * /home/ollama/scripts/backup-awoooi-db.sh >> /home/ollama/logs/backup-awoooi.log 2>&1
# 測試執行
ssh ollama@192.168.0.188 "/home/ollama/scripts/backup-awoooi-db.sh"
```
**注意**: 腳本使用 `sudo -u postgres pg_dump`,需確認 sudoers 中有對應權限,或改用 peer auth。
---
### ⚠️ Gitea SQLite DB待部署
**事故教訓**: 2026-04-05 Gitea DB 損壞,靠 `sqlite3 .recover` 才救回,人工修復耗時 2+ 小時。
**DB 路徑**: `/home/wooo/gitea/gitea_data/gitea/gitea.db`on 192.168.0.110
**腳本已建立**`scripts/backup/backup-gitea-db.sh`
**部署步驟** (需在 192.168.0.110 執行):
```bash
# 上傳腳本
scp /Users/ogt/awoooi/scripts/backup/backup-gitea-db.sh wooo@192.168.0.110:/home/wooo/scripts/
# 設定權限
ssh wooo@192.168.0.110 "chmod +x /home/wooo/scripts/backup-gitea-db.sh && mkdir -p /home/wooo/logs /home/wooo/backups/gitea"
# 加入 crontab (wooo@110)
ssh wooo@192.168.0.110 "crontab -e"
# 加入: 0 1 * * * /home/wooo/scripts/backup-gitea-db.sh >> /home/wooo/logs/backup-gitea.log 2>&1
# 測試執行(需要 sqlite3 已安裝)
ssh wooo@192.168.0.110 "sqlite3 --version && /home/wooo/scripts/backup-gitea-db.sh"
```
**sqlite3 安裝(若未安裝)**:
```bash
ssh wooo@192.168.0.110 "sudo apt install -y sqlite3"
```
---
## 備份驗證 SOP
每月第一個週一驗證:
```bash
# 1. Velero
kubectl get backup -n velero --sort-by=.metadata.creationTimestamp | tail -3
# 2. MOMO DB
ssh ollama@192.168.0.188 "ls -lh /home/ollama/backups/momo/ | tail -3"
# 3. AWOOOI DB
ssh ollama@192.168.0.188 "ls -lh /home/ollama/backups/awoooi/ | tail -3"
# 4. Gitea DB
ssh wooo@192.168.0.110 "ls -lh /home/wooo/backups/gitea/ | tail -3"
```
---
## 缺口風險評估
| 缺口 | 資料損失風險 | 優先級 |
|------|------------|--------|
| AWOOOI PostgreSQL 無備份 | 🔴 極高 — 知識庫/事故/AutoRepair 全損 | P0 |
| Gitea DB 無自動備份 | 🔴 高 — 今日已發生損壞,靠人工修復 | P0 |
---
## 相關文件
- [REBOOT-RECOVERY-SOP.md](REBOOT-RECOVERY-SOP.md) - 重開機恢復 SOP
- [SECRETS-MANAGEMENT.md](SECRETS-MANAGEMENT.md) - Secrets 管理
- `scripts/backup/backup-awoooi-db.sh` - AWOOOI DB 備份腳本
- `scripts/backup/backup-gitea-db.sh` - Gitea DB 備份腳本
- `scripts/reboot-recovery/awoooi-startup.sh` - 開機自動恢復(含 MinIO