feat(db): онлайн-бэкап SQLite, CLI backup, ротация и восстановление
This commit is contained in:
1 parent
8298454c63
commit
8cba7a5c41
9 files changed
+345
-2
No files matched your search
+12
-2
@@ -211,14 +211,24 @@ Portal — IdP; Technitium — RP. После `docker compose up`:
|
||||
## Бэкап
|
||||
|
||||
```bash
|
||||
# SQLite
|
||||
cp /opt/auth-portal/data/app.db /opt/auth-portal/data/app.db.bak-$(date +%F)
|
||||
# SQLite: согласованная онлайн-копия (WAL учитывается, сервис не останавливается),
|
||||
# проверка integrity_check и ротация (BACKUP_KEEP, по умолчанию 7) → /data/backups/
|
||||
docker exec auth-portal node dist/server.js backup
|
||||
|
||||
# Либо встроенный планировщик: BACKUP_INTERVAL_HOURS=24 в .env (0 = выключен).
|
||||
# Каталог: BACKUP_DIR (по умолчанию <каталог БД>/backups). Не копируйте app.db
|
||||
# через `cp` на живой БД — без -wal/-shm копия может быть неполной.
|
||||
|
||||
# ACME
|
||||
docker run --rm -v auth_portal_traefik_letsencrypt:/data -v "$PWD:/backup" alpine \
|
||||
tar czf /backup/traefik-acme-$(date +%F).tgz -C /data .
|
||||
```
|
||||
|
||||
**Восстановление:** `docker compose stop app`, затем в `./data` удалить
|
||||
`app.db-wal`/`app.db-shm`, скопировать нужный `backups/app-*.db` как `app.db`,
|
||||
`chown 1000:1000`, `docker compose up -d`. OIDC-ключ подписи хранится в этой же
|
||||
БД, если не задан `OIDC_RSA_PRIVATE_KEY` — храните ключ отдельным секретом.
|
||||
|
||||
Откат образа: в `.env` `AUTH_IMAGE_TAG=vX.Y.Z` → `docker compose pull && docker compose up -d`.
|
||||
|
||||
---
|
||||
|
||||
Reference in new issue
Block a user