Uso disco
Analisi consumo spazio e raccomandazioni
Capacita
| Voce | Valore |
|---|---|
| Disco totale | 77 GB |
| Usato (dopo deploy all 2026-06-24) | ~51 GB |
| Libero | ~26 GB |
| Uso | ~67% |
| Inode usati | 7% |
Consumo per area
| Path / Area | Dimensione | Note |
|---|---|---|
| Immagini Docker | ~14.9 GB | principale consumatore runtime |
| Build cache Docker | ~5.2 GB | cache attiva residua; docker builder prune non ha liberato layer riferiti |
/opt/obelica/repos | 3.8 GB | tulpa-studio .git 969 MB |
/opt/obelica/backups | 3.7 GB | ultimo backup completo, offsite verificato |
/opt/obelica/data | 1.8 GB | app-data Forgejo |
/opt/obelica/infra/tools | 14 MB | binari Rust e sorgenti, cache compilazione rimossa |
/opt/obelica/secrets | 96 KB | env file |
/var/log/journal | 86 MB | log systemd |
Immagini Docker staging
| Immagine | Taglia | Motivo |
|---|---|---|
tulpa-studio-app | 1.93 GB | app piu' pesante, asset/repo importanti |
macelleria-app | 1.39 GB | include runtime pesante per feature con Chromium/Puppeteer |
alessandro-zucchini-app | 596 MB | Next.js standalone |
caffe-del-corso-app | 521 MB | Next.js standalone |
sonja-trekking-app | 477 MB | Next.js standalone + Prisma |
centro-donna-giustizia-app | 414 MB | Next.js standalone |
romauto-app | 390 MB | Next.js standalone |
wash-dog-ferrara-admin | 363 MB | Next.js standalone monorepo |
ottica-style-app | 335 MB | static/nginx con asset |
wash-dog-ferrara-staff | 325 MB | Next.js standalone monorepo |
officina-longhi-app | 323 MB | static/nginx con asset |
zannoni-app | 207 MB | static/nginx |
sazzini-app | 126 MB | Astro/static |
Repo piu' grandi
| Repo | Dimensione | Motivo |
|---|---|---|
tulpa-studio | 2.1 GB | .git 969 MB, src 508 MB, public 582 MB |
caffe-del-corso | 392 MB | asset |
officina-longhi | 212 MB | asset |
alessandro-zucchini | 185 MB | build/asset |
ottica-style | 186 MB | asset |
Backup
Un backup giornaliero completo pesa ~3.7 GiB. La retention locale mantiene 1 snapshot completo; la cronologia vive su DigitalOcean Spaces Cold Storage.
Componenti di un backup:
| File | Dimensione | Cifrato |
|---|---|---|
forgejo-app-data.tar.zst.enc | ~1.8 GB | si |
repos.tar.zst | ~1.8 GB | no |
config.tar.zst.enc | ~249 MB | si |
secrets.tar.zst.enc | ~14 KB | si |
databases/*.sql.gz.enc | da pochi KB a ~200 KB | si |
Raccomandazioni
- Pulire history git di
tulpa-studioper ridurre.gitda 969 MB se il repo restera' sul droplet. - Ridurre asset pesanti app-specific solo dopo verifica funzionale della singola app.
- Mantenere retention locale a 1 snapshot e verificare ogni giorno manifest offsite.
- Non usare
docker system prune --volumessu questa VPS senza piano di rollback. - Monitorare uso disco con alert sotto 20 GB liberi.
- Gestire build cache Docker con policy, non a impulso: dopo rebuild completi la cache accelera i deploy successivi ma puo' occupare decine di GB.
Stato dopo deploy centralizzato 2026-06-24
Dopo obelica deploy all su tutti i 14 target:
Images: 9.699 GB, 2.614 GB reclaimable
Containers: 111.8 MB
Build cache: 29.4 GB, 28.42 GB reclaimable
Disco root: 51 GB usati / 26 GB liberi / 67%Interpretazione:
- i container live sono sani e usano immagini correnti;
- l'aumento disco e' quasi tutto build cache Docker prodotta dal rebuild massivo;
- non e' un problema immediato, ma deve essere governato prima della migrazione produzione completa;
- pulire tutta la cache rende i prossimi deploy piu' lenti, ma libera molto spazio.
Policy consigliata:
- dopo deploy normali: lasciare cache se il disco resta sotto ~70%;
- se il disco supera 75% o scende sotto 20 GB liberi: eseguire prune controllato della build cache;
- non toccare volumi;
- verificare sempre
docker ps,obelica healthe smoke test dopo la pulizia.
Comando conservativo:
docker builder prune -f --filter until=24h
docker image prune -fComando aggressivo, solo dopo conferma container/smoke:
docker builder prune -af
docker image prune -fPulizia Docker controllata
Eseguita il 2026-06-22 dopo rebuild e recreate completo delle app staging:
docker builder prune -f
docker image prune -fRisultato:
| Voce | Prima | Dopo |
|---|---|---|
| Disco root | 58 GB usati / 19 GB liberi / 76% durante rebuild | ~39 GB usati / ~38 GB liberi / 51% |
| Build cache Docker | 28.29 GB, 20.79 GB reclaimable | ~7.6 GB, ~43 MB reclaimable |
| Images Docker | 35.8 GB durante rebuild | ~15.6 GB |
Questa pulizia non rimuove volumi e non ferma container. Evitare docker system prune --volumes salvo piano di rollback esplicito.
Cleanup globale 2026-06-24
Eseguita pulizia conservativa dopo restore test backup:
docker builder prune -af --filter until=24h
docker image prune -f
docker image rm rust:1.86-bookworm amazon/aws-cli:latest
docker builder prune -afRimossi inoltre:
- file temporanei di build/test in
/tmp; - SQL/password temporanee residue in
/tmp; - log temporanei di rebuild in
/tmp; - cache di compilazione Rust root-owned sotto
/opt/obelica/infra/tools/*/target/release; - artefatti temporanei del restore test.
Non rimossi:
- database;
/opt/obelica/data;- repository app;
- bucket Spaces;
- ultimo snapshot locale;
- immagini Docker usate dai container live;
rust:1.91-bookworm,postgres:18-alpineealpine:latest, perche' usati da build/backup;- script legacy in
/opt/obelica/infra/scriptse/opt/obelica/infra/cron, perche' ancora referenziati da runner docs, cron staging o documentazione.
Risultato:
| Voce | Prima | Dopo |
|---|---|---|
| Disco root | ~44 GB usati / ~34 GB liberi / 57% | ~30 GB usati / ~48 GB liberi / 39% |
/tmp | ~433 MB | ~2.9 MB |
/opt/obelica/infra/tools | ~748 MB | ~14 MB |
| Build cache Docker | ~16.9 GB con ~9.4 GB reclaimable | ~3.7 GB, 0 B reclaimable |
| Immagini Docker | ~26.7 GB | ~13.5 GB |
Check post-cleanup:
obelica health: OK;obelica backup status: OK, 1 snapshot locale;obelica backup verify-offsite: OK;docs: HTTP 200;- tutti i container applicativi e infrastrutturali running.
Log container
Dal 2026-06-22 i servizi pubblici e infrastrutturali principali usano rotazione Docker:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"Questo evita crescita indefinita dei file json.log, ma non sostituisce l'ottimizzazione immagini/cache.
Build context Docker
Dal 2026-06-22 tutti i repo app staging hanno .dockerignore standard e cache mount BuildKit nei Dockerfile dove applicabile.
Regole operative:
- non includere
.git,node_modules,.next, cache locali, log,.envo cartelle editor nel build context; - usare cache mount per install npm/pnpm;
- dopo rebuild massivi verificare
docker system df; - se la build cache cresce molto, usare
docker builder prune -fdopo avere confermato che i container sono running e lo smoke test e' verde.
Nota: .dockerignore riduce file locali e cache inutili. Non riduce asset realmente necessari al runtime o alla build. tulpa-studio rimane il caso principale da rivedere a livello app/asset.
Cleanup automatico Docker
Dopo ripetute pulizie manuali della build cache, dal 2026-06-28 e' attivo un cleanup notturno automatico.
Script
/opt/obelica/infra/cron/docker-cleanup.sh
Operazioni eseguite:
docker builder prune -f --filter until=48h --reserved-space 5GB
rimuove la build cache non usata da piu' di 48 ore, lasciando almeno 5 GB di cache recente per non rallentare i deploy.docker image prune -f
rimuove le immagini dangling (layer orfani senza tag).
Scheduling
Aggiunto al crontab di bona:
# Docker cleanup every night at 02:00
0 2 * * * /opt/obelica/infra/cron/docker-cleanup.shL'orario e' prima del backup (04:00) e prima dei cron applicativi, per evitare conflitti con build o dump.
Log
/opt/obelica/logs/docker-cleanup.log
Risultato prima esecuzione (2026-06-28)
| Voce | Prima | Dopo |
|---|---|---|
| Disco root | 61 GB usati / 16 GB liberi / 80% | 43 GB usati / 35 GB liberi / 56% |
| Build cache Docker | 28.08 GB | ~2.4 GB |
| Spazio liberato | - | ~25.7 GB |
Tutti i container sono rimasti running; smoke test e health check OK.
Note operative
- Lo script non rimuove volumi, container o immagini in uso.
- Il parametro
--reserved-space 5GBsostituisce il vecchio--keep-storagedeprecato. - Se in futuro il disco dovesse crescere troppo anche con questo cron, valutare
l'aggiunta di
docker image prune -a -f --filter "until=168h"nello script, tenendo presente che rimuove anche immagini base non attualmente usate da container live.