π Struttura del Filesystem
LibreFolio memorizza tutti i dati persistenti in una directory strutturata sotto backend/data/. Comprendere questa struttura Γ¨ importante per il backup, il debugging e la manutenzione.
ποΈ Layout delle Directory
backend/data/
βββ π prod/ # Production data (default)
β βββ ποΈ sqlite/
β β βββ π app.db # Main SQLite database (WAL mode)
β βββ πΌοΈ custom-uploads/ # User-uploaded files
β β βββ π {uuid}.{ext} # Binary file (image, document, etc.)
β β βββ π {uuid}.json # Metadata sidecar (uploader, date, MIME type)
β βββ π broker_reports/
β β βββ π₯ uploaded/ # Reports waiting to be parsed
β β βββ β
parsed/ # Successfully parsed reports
β β βββ β failed/ # Reports that failed parsing
β βββ π logs/ # Application log files
β
βββ π§ͺ test/ # Test data (completely isolated)
βββ ποΈ 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Γ di journaling WAL (Write-Ahead Logging) per un migliore accesso concorrente
- π I file
.db-wale.db-shmsono file WAL temporanei β sono previsti e gestiti da SQLite
Approfondimento per sviluppatori: Database Schema
πΌοΈ 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 includenti: nome file originale, tipo MIME, dimensione del file, data di caricamento, ID dell'utente che ha caricato il file
Approfondimento per sviluppatori: File Upload Component
π broker_reports/
File di report del broker per il sistema BRIM (Broker Report Import Manager):
- π₯
uploaded/β File grezzi cosΓ¬ come caricati dagli utenti (CSV, Excel) - β
parsed/β File che sono stati elaborati con successo (transazioni estratte) - β
failed/β File la cui elaborazione Γ¨ fallita (conservati per il debugging β controllare i log per i dettagli)
Approfondimento per sviluppatori: BRIM Architecture
π logs/
Log dell'applicazione in formato JSON strutturato (via 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 |
Imposta a 1 per usare 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 eseguire il backup di LibreFolio Γ¨ copiare l'intera directory dei dati:
# Arrestare prima il server (per garantire la coerenza del database)
cp -r backend/data/prod/ /path/to/backup/librefolio-$(date +%Y%m%d)/
π³ Backup Docker
Se eseguito via Docker, la directory dei dati Γ¨ tipicamente montata come volume:
# Trova il volume
docker volume inspect librefolio_data
# Copia i dati all'esterno
docker cp librefolio-container:/app/backend/data/prod/ ./backup/
β Cosa includere nel backup
Al minimo, effettua 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 originali dei broker (nel caso in cui sia necessario rieseguire l'analisi)
Backup solo del database
Se lo spazio di archiviazione Γ¨ limitato, il backup di solo sqlite/app.db preserva tutti i dati strutturati. I file possono essere sempre ricaricati.
π§ Manutenzione dal Terminale Host
π³ Docker exec
# Accedi alla shell del container
docker exec -it librefolio-container /bin/bash
# Esegui i comandi di 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 # Elenca tutti gli utenti
./dev.py user reset <user> <pw> # Resetta la password di un utente
./dev.py user promote <user> # Concede i privilegi di superutente
./dev.py user demote <user> # Rimuove i privilegi di superutente
./dev.py db upgrade # Applica le migrazioni in sospeso
./dev.py db create-clean # Resetta il database (ATTENZIONE: elimina tutti i dati)
Per un elenco completo dei comandi CLI, consulta CLI Tools.