This commit is contained in:
2026-05-18 07:04:08 +02:00
parent 52f04c2839
commit 07e6a9c374
8 changed files with 254 additions and 99 deletions
+108
View File
@@ -0,0 +1,108 @@
# Dropbox Ordinace Backup
Indexer a zálohovací systém pro Dropbox složku ordinace. Při každém spuštění projde filesystém, porovná stav s databází, zazálohuje nové/změněné soubory do content-addressable storage, vygeneruje Excel report a odešle emailové oznámení.
## Architektura
```
main.py hlavní orchestrátor (spouštět přímo)
indexer/
config.py načítá .env (DB, cesty, chování)
logger.py setup logování do souboru + konzole
scanner.py rychlý scan filesystému (bez hashování)
hasher.py BLAKE3 hash, detekce cloud placeholderů, hydratace
db.py všechny DB operace (runs, files, events)
events.py batch INSERT do file_events
backup.py AES-256 ZIP content-addressable storage
report.py generuje Excel report z DB
recovery.py obnova souborů ze zálohy
reconcile.py reconciliace DB vs filesystem
```
## Konfigurace (.env)
```env
DRY_RUN=false # true = jen scan, žádná DB ani záloha
LOG_LEVEL=INFO
LOG_DIR=C:\Reporting\DropboxBackup\logs
DB_HOST=192.168.1.76
DB_PORT=3306
DB_NAME=OrdinaceDropBoxBackup
DB_USER=root
DB_PASSWORD=...
ROOT_PATH=z:\Dropbox\Ordinace\
ROOT_NAME=DropboxOrdinace
BATCH_SIZE=1000
BACKUP_PATH=w:\OneDrive\DropBoxBackupClaude\
BACKUP_PASSWORD=...
```
## Spuštění
```
cd C:\Reporting\DropboxBackup
C:\Reporting\Python\python.exe main.py
```
Nebo přes Task Scheduler:
- Program: `C:\Reporting\Python\python.exe`
- Argumenty: `C:\Reporting\DropboxBackup\main.py`
- Spustit v: `C:\Reporting\DropboxBackup`
## Co dělá jeden run
1. **Scan** projde `ROOT_PATH`, zaznamená velikost a mtime každého souboru
2. **Diff** porovná s DB: nové / změněné / smazané / beze změny
3. **Hashování** BLAKE3 pro nové a změněné soubory
- Cloud placeholdery (Dropbox Smart Sync) automaticky hydratuje (čeká max 120 s na stažení)
4. **DB update** batch INSERT/UPDATE souborů a eventů
5. **Backup** AES-256 ZIP do content-addressable storage (`BACKUP_PATH/ab/cd/<blake3hash>.zip`), deduplikace hashem
6. **Report** Excel soubor do `z:\Dropbox\!!!Days\Downloads Z230\`
7. **Email** HTML shrnutí + přiložený `backup.log` na `vladimir.buzalka@buzalka.cz`
## Logy
Rotující denní log: `LOG_DIR\backup.log` (history 90 dní).
## Záloha — storage formát
Každý unikátní obsah je uložen jednou jako:
```
BACKUP_PATH/
ab/
cd/
abcdef...zip ← AES-256 ZIP s názvem <blake3hex>.blob uvnitř
```
Deduplikace je automatická — soubory se stejným obsahem sdílí jeden ZIP.
## Databáze
MySQL databáze `OrdinaceDropBoxBackup` na `192.168.1.76`:
| Tabulka | Popis |
|---|---|
| `runs` | Každé spuštění indexeru (status, statistiky) |
| `files` | Aktuální stav všech souborů (`exists_now`, hash, velikost) |
| `file_events` | Historie změn (CREATED / MODIFIED / DELETED) |
## Závislosti
```
blake3
pymysql
python-dotenv
pyzipper
openpyxl
msal
requests
```
Instalace: `C:\Reporting\Python\python.exe -m pip install -r requirements.txt`
## Projekty
- Produkce: `C:\Reporting\DropboxBackup\`
- Vývoj: `C:\Users\vlado\PycharmProjects\drobboxordinacebackup\`