Vai al contenuto

πŸ“‚ 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-wal e .db-shm sono 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:

  1. sqlite/app.db β€” Tutti i tuoi dati (utenti, transazioni, impostazioni, tassi di cambio)
  2. custom-uploads/ β€” File caricati dagli utenti (avatar, documenti)
  3. 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.