๐ Struttura del filesystem
LibreFolio conserva tutto ciรฒ che memorizza in un'unica directory dati: il database, i file caricati, i report del broker e i log. La sua struttura รจ tutto ciรฒ che devi conoscere per backup e manutenzione.
| Installazione | Directory dati |
|---|---|
| Host (Pipenv) | backend/data/prod/ nella cartella del progetto, o il percorso in LIBREFOLIO_DATA_DIR |
| Docker Compose | LibreFolio-data/ accanto a docker-compose.yml (/app/backend/data/prod-docker all'interno del container) |
๐๏ธ Struttura delle directory
backend/data/
โโโ ๐ prod/ # Dati di produzione (predefinito)
โ โโโ ๐๏ธ sqlite/
โ โ โโโ ๐ app.db # Database SQLite principale (modalitร WAL)
โ โโโ ๐ผ๏ธ custom-uploads/ # File caricati nell'app
โ โโโ ๐ broker_reports/
โ โ โโโ ๐ฅ uploaded/ # Report in attesa di essere letti
โ โ โโโ โ
parsed/ # Report letti con successo
โ โ โโโ โ failed/ # Report che non รจ stato possibile leggere
โ โโโ ๐ logs/ # File di log dell'applicazione
โ โโโ ๐ญ scenario_catalog/ # Opzionale: i tuoi scenari di stress
โ โโโ ๐ scheduler_state.json # Ultima esecuzione delle sincronizzazioni programmate
โ
โโโ ๐งช test/ # Dati di test (completamente isolati)
โโโ ๐๏ธ sqlite/app.db
โโโ ๐ผ๏ธ custom-uploads/
โโโ ๐ broker_reports/
โโโ ๐ logs/
๐ Cosa contiene ciascuna directory
๐๏ธ sqlite/
- ๐
app.dbcontiene tutti i dati strutturati: utenti, broker, transazioni, asset, prezzi, tassi di cambio e impostazioni. - ๐
app.db-waleapp.db-shmsono i file di lavoro di SQLite (modalitร WAL), previsti mentre il server รจ in esecuzione: non copiare maiapp.dbda solo mentre il server รจ attivo. - ๐
app.db.post-migration.lockรจ un file vuoto usato all'avvio: lascialo al suo posto. Un file chiamatoapp.db.pre-<fix>-<UTC time>.bakรจ una copia conservata dopo una correzione post-migrazione non riuscita: eliminalo una volta che non ti serve piรน.
๐ผ๏ธ custom-uploads/
File caricati nell'app, come quelli della pagina File, e gli avatar predefiniti. Ogni file ha un nome casuale e un file .json accanto che lo descrive: mantieni le coppie insieme.
๐ broker_reports/
I report del broker caricati per l'importazione, in una cartella broker_<id>/ per broker:
- ๐ฅ
uploaded/โ in attesa di essere letti - โ
parsed/โ letti con successo - โ
failed/โ non รจ stato possibile leggerli, conservati per poter controllare il motivo
Un report si sposta da uploaded/ a parsed/ o failed/, quindi il suo file originale รจ sempre in una delle tre cartelle.
๐ logs/
- ๐
librefolio.logcontiene un record JSON per riga; il server stampa il log anche sulla sua console. - ๐๏ธ Ogni lunedรฌ (UTC) il file viene archiviato e compresso (
.gz); vengono conservati gli ultimi 52 archivi, un anno. - ๐๏ธ
LOG_LEVELin.envimposta quanto viene scritto (predefinitoINFO).
๐ถ Livelli di log โ cosa registra ciascuno
Ogni livello registra anche tutti quelli piรน gravi.
| Livello | Cosa registra |
|---|---|
๐ฌ TRACE |
Dati granulari ad alta frequenza: singoli tassi di cambio analizzati, punti di prezzo per asset |
๐ DEBUG |
Dettagli operativi interni: quale provider รจ stato usato, risultati intermedi, decisioni algoritmiche |
โน๏ธ INFO (predefinito) |
Operazioni significative dell'utente: sincronizzazione completata, importazione, login, risorsa creata/eliminata |
โ ๏ธ WARNING |
Anomalie recuperabili: fallback attivato, dati opzionali mancanti, modalitร degradata |
โ ERROR |
Errori gestiti: operazioni fallite, corruzione dei dati, provider non raggiungibile |
๐ CRITICAL |
Errori fatali che arrestano il processo |
- Produzione:
LOG_LEVEL=INFOโ segnale pulito, senza rumore - Risoluzione dei problemi:
LOG_LEVEL=DEBUGโ vedi cosa sta decidendo il sistema - Debug approfondito FX/prezzi:
LOG_LEVEL=TRACEโ vedi ogni singolo punto dati
๐ Per gli sviluppatori: Directory dati su disco โ ogni file, il suo formato e il codice che lo scrive, incluso scenario_catalog/.
๐ Variabili d'ambiente
LIBREFOLIO_DATA_DIRsposta la directory dati di produzione, eLIBREFOLIO_TEST_DATA_DIRquella di test. Un percorso relativo parte dalla cartella del progetto.- Con Docker Compose il percorso all'interno del container รจ fisso: per conservare i dati altrove sull'host, modifica il lato sinistro del volume
./LibreFolio-data:/app/backend/data/prod-dockerindocker-compose.yml.
Le altre variabili, e il file .env, sono descritte in Configurazione.
๐พ Backup
๐ฆ Backup semplice
Il modo piรน semplice per eseguire il backup di LibreFolio รจ copiare l'intera directory dati:
# Arresta prima il server (per garantire la coerenza del database)
cp -r backend/data/prod/ /path/to/backup/librefolio-$(date +%Y%m%d)/
๐ณ Backup Docker
Con Docker Compose, la directory dati รจ la cartella LibreFolio-data/ sull'host, quindi non serve alcun comando di copia Docker. Arresta il container per una copia coerente:
docker compose stop librefolio
cp -r ./LibreFolio-data/ /path/to/backup/librefolio-$(date +%Y%m%d)/
docker compose start librefolio
๐ Esegui il backup del database senza arrestare il server
Il backup online di SQLite crea una copia coerente mentre il server รจ in esecuzione. Richiede lo strumento sqlite3:
Con Docker, il database รจ ./LibreFolio-data/sqlite/app.db. Questo comando copia solo il database: copia le cartelle sottostanti come al solito.
โ Cosa includere nel backup
Come minimo, esegui il backup di:
sqlite/app.dbโ Tutti i tuoi dati (utenti, transazioni, impostazioni, tassi di cambio)custom-uploads/โ File caricati dall'utente (avatar, documenti)broker_reports/โ I report originali del broker, nel caso in cui tu debba importarli di nuovoscenario_catalog/โ I tuoi scenari di stress, se ne hai aggiunti
Se lo spazio รจ limitato, sqlite/app.db da solo conserva tutti i dati strutturati: i file e i report possono essere caricati di nuovo se li hai ancora.