π Struttura del Filesystem
LibreFolio memorizza tutti i dati persistenti in una directory strutturata sotto backend/data/. Comprendere questa struttura Γ¨ importante per il backup, il debug e la manutenzione.
ποΈ Schema delle Directory
backend/data/
βββ π prod/ # Dati di produzione (predefiniti)
β βββ ποΈ sqlite/
β β βββ π app.db # Database SQLite principale (modalitΓ WAL)
β βββ πΌοΈ custom-uploads/ # File caricati dagli utenti
β β βββ π {uuid}.{ext} # File binario (immagine, documento, ecc.)
β β βββ π {uuid}.json # Metadati sidecar (caricatore, data, tipo MIME)
β βββ π broker_reports/
β β βββ π₯ uploaded/ # Report originali caricati dagli utenti (CSV, Excel)
β β βββ β
parsed/ # Report elaborati con successo
β β βββ β failed/ # Report per cui l'elaborazione Γ¨ fallita
β βββ π logs/ # File di log dell'applicazione
β
βββ π§ͺ test/ # Dati di test (completamente isolati)
βββ ποΈ sqlite/app.db
βββ πΌοΈ custom-uploads/
βββ π broker_reports/
βββ π logs/
π Cosa Contiene Ogni Directory
ποΈ sqlite/app.db
Il database SQLite principale. Contiene tutti i dati dell'applicazione: utenti, broker, transazioni, tassi di cambio, impostazioni, ecc.
- π Utilizza la modalitΓ journal WAL (Write-Ahead Logging) per un migliore accesso concorrente.
- π I file
.db-wale.db-shmsono file temporanei WAL β sono attesi e gestiti da SQLite.
Approfondimento per sviluppatori: Schema del Database
πΌοΈ custom-uploads/
File caricati dagli utenti tramite la pagina File. Ogni caricamento crea due file:
- π
{uuid}.{ext}β Il file binario effettivo (es.a1b2c3d4.png) - π
{uuid}.jsonβ Metadati sidecar che includono: filename originale, tipo MIME, dimensione del file, data di caricamento, ID utente del caricatore
Approfondimento per sviluppatori: Componente di Caricamento File
π broker_reports/
File di report broker per il sistema BRIM (Broker Report Import Manager):
- π₯
uploaded/β File originali caricati dagli utenti (CSV, Excel) - β
parsed/β File che sono stati elaborati con successo (transazioni estratte) - β
failed/β File per cui l'elaborazione Γ¨ fallita (mantenuti per il debug β controllare i log per i dettagli)
Approfondimento per sviluppatori: Architettura BRIM
π logs/
Log dell'applicazione in formato JSON strutturato (tramite structlog).
π Variabili d'Ambiente
| Variabile | Default | Descrizione |
|---|---|---|
LIBREFOLIO_DATA_DIR |
./backend/data/prod |
Sovrascrive il percorso della directory dei dati di produzione |
LIBREFOLIO_TEST_MODE |
0 |
Impostare a 1 per utilizzare backend/data/test/ invece di prod/ |
PORT |
8000 |
Porta del server di produzione |
TEST_PORT |
8001 |
Porta del server di test (usata quando LIBREFOLIO_TEST_MODE=1) |
πΎ Backup
π¦ Backup Semplice
Il modo piΓΉ semplice per fare il backup di LibreFolio Γ¨ copiare l'intera directory dei dati:
# Fermare prima il server (per garantire la consistenza del database)
cp -r backend/data/prod/ /path/to/backup/librefolio-$(date +%Y%m%d)/
π³ Backup con Docker
Se si esegue tramite Docker, la directory dei dati Γ¨ tipicamente montata come volume:
# Trovare il volume
docker volume inspect librefolio_data
# Copiare i dati fuori
docker cp librefolio-container:/app/backend/data/prod/ ./backup/
β Cosa Backuppare
Come minimo, fare il backup di:
sqlite/app.dbβ Tutti i tuoi dati (utenti, transazioni, impostazioni, tassi di cambio)custom-uploads/β File caricati dagli utenti (avatar, documenti)broker_reports/uploaded/β Report broker originali (nel caso sia necessario rielaborarli)
Backup solo del database
Se lo spazio di archiviazione Γ¨ limitato, fare il backup solo di sqlite/app.db preserva tutti i dati strutturati. I file possono sempre essere ricaricati.
π§ Manutenzione da Terminale Host
π³ Docker exec
# Accedere alla shell del container
docker exec -it librefolio-container /bin/bash
# Eseguire comandi dev.py all'interno del container
./dev.py user list
./dev.py user reset admin newpassword
./dev.py db upgrade
π» Accesso diretto (non Docker)
# Dalla root del progetto
./dev.py user list # Elencare tutti gli utenti
./dev.py user reset <user> <pw> # Reimpostare la password di un utente
./dev.py user promote <user> # Concedere privilegi di superuser
./dev.py user demote <user> # Rimuovere i privilegi di superuser
./dev.py db upgrade # Applicare le migrazioni in sospeso
./dev.py db create-clean # Reinizializzare il database (ATTENZIONE: cancella tutti i dati)
Per un elenco completo dei comandi CLI, vedere CLI Tools.