109 lines
3.3 KiB
Markdown
109 lines
3.3 KiB
Markdown
# 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\`
|