7.9 KiB
Executable File
Distribuzione e Aggiornamenti NetGescon
Questo documento descrive il flusso operativo reale oggi in uso e separa chiaramente cio che e gia attivo da cio che resta roadmap.
1. Flusso attivo oggi
La catena corretta e una sola:
- sviluppo e verifica in Day0;
- commit e push su Gitea
main; - staging allineato dal contenuto pubblicato su Gitea;
- controllo e applicazione aggiornamento dal pannello browser oppure via comando
php artisan; - backup pre-update locale, con seconda copia opzionale o obbligatoria su Google Drive secondo configurazione del nodo.
Questo significa che Day0 e il workspace autorevole, mentre staging va trattato come nodo remoto anche quando gira sulla stessa macchina fisica.
2. Cosa e gia implementato
Sono gia presenti e funzionanti i seguenti componenti:
- comando
php artisan netgescon:updateper controllare e applicare un pacchetto pubblicato; - comando
php artisan netgescon:preupdate-backupper creare snapshot ripristinabile prima di ogni update; - pagina browser Supporto > Modifiche, che esegue prima il backup e poi l update in background con file di progresso persistente;
- supporto Google Drive per la seconda copia del backup pre-update;
- esclusione di
.env,storage/e.git/dalla sovrascrittura del pacchetto; - verifica hash SHA256 e pulizia cache a fine applicazione.
3. Significato del canale free
Nel sistema attuale il canale free e un segnaposto tecnico di compatibilita, non una decisione commerciale definitiva.
In pratica oggi esiste una sola distribuzione operativa. La distinzione free e licensed rimane nel codice per non rompere il motore update e per preparare scenari futuri, ma non va interpretata come modello commerciale gia definito.
4. Preparazione baseline e backup manuale
Se serve congelare una baseline completa del nodo attuale, usare:
bash scripts/ops/netgescon-baseline-freeze.sh \
--app-dir /var/www/netgescon \
--version 0.8.0-baseline
Produce:
- archivio codice;
- copia
.env; - dump database best-effort;
- metadati baseline.
Per il backup pre-update applicativo usare invece:
php artisan netgescon:preupdate-backup --differential --tag=manuale
Con copia anche su Google Drive:
php artisan netgescon:preupdate-backup \
--differential \
--tag=manuale \
--drive \
--admin-id=ID_AMMINISTRATORE
Se il nodo richiede obbligatoriamente la seconda copia Drive:
php artisan netgescon:preupdate-backup \
--differential \
--tag=manuale \
--drive \
--require-drive \
--admin-id=ID_AMMINISTRATORE
5. Pubblicazione da Day0 verso Gitea
Prima di aggiornare staging, il contenuto deve essere allineato a Gitea.
Sequenza minima:
git status
git add .
git commit -m "Messaggio coerente con il lotto Day0"
git push origin main
Solo dopo il push il nodo staging deve essere considerato aggiornabile tramite il suo flusso di pull/apply.
6. Configurazione del nodo staging
Le variabili principali sono:
NETGESCON_UPDATE_URL=https://updates.netgescon.it
NETGESCON_UPDATE_CHANNEL=free
NETGESCON_NODE_CODE=staging-01
NETGESCON_PREUPDATE_DRIVE_ENABLED=true
NETGESCON_PREUPDATE_REQUIRE_DRIVE=false
NETGESCON_UPDATE_RESOLVE=
Note:
NETGESCON_UPDATE_CHANNEL=freeoggi indica il percorso operativo standard, non la licenza del cliente;NETGESCON_PREUPDATE_DRIVE_ENABLED=trueabilita il tentativo di seconda copia su Drive quando l amministratore del nodo ha credenziali Google valide;NETGESCON_PREUPDATE_REQUIRE_DRIVE=trueblocca l update se la seconda copia non viene completata;NETGESCON_UPDATE_RESOLVEserve solo in casi DNS particolari, ad esempioupdates.netgescon.it:443:192.168.0.53.
6.1 Diagnostica reale 2026-05-09
Stato verificato sul nodo Day0 e sui container demo/prod live:
updates.netgescon.itvia DNS pubblico risolve a195.110.133.76ma il client va in timeout su443;- forzando
updates.netgescon.it:443 -> 192.168.0.53ilhealthrisponde correttamente; - per questo motivo sui nodi live va mantenuto
NETGESCON_UPDATE_RESOLVE=updates.netgescon.it:443:192.168.0.53finche il DNS interno o il routing non sono riallineati.
Comando rapido di verifica dal nodo client:
curl -I -sS --max-time 12 \
--resolve updates.netgescon.it:443:192.168.0.53 \
https://updates.netgescon.it/api/v1/distribution/health
Se il health risponde ma il manifest no, il problema non e piu DNS client ma server update interno.
6.2 Segnale di errore da riconoscere
Caso osservato sulla macchina 192.168.0.53:
GET /api/v1/distribution/health->200 OKGET /api/v1/distribution/updates/manifest?channel=free->404 Not Found
Questo indica uno di questi casi:
- il checkout deployato sulla
.53non include ancora le routeupdates/manifesteupdates/package; - il controller
DistributionControllere una versione vecchia che espone solohealthe le route migrazione amministratori; storage/app/distribution/<channel>/manifest.jsonnon esiste ancora sul server update.
Finche uno di questi tre punti resta aperto, il client non puo completare il controllo aggiornamenti anche se NETGESCON_UPDATE_RESOLVE e corretto.
7. Aggiornamento da browser
Il percorso operativo preferito per staging e il pannello browser in Supporto > Modifiche.
La pagina esegue questa sequenza:
- verifica permessi utente;
- crea backup pre-update locale;
- se configurato, carica anche la copia Google Drive;
- avvia
netgescon:update --applyin background; - salva avanzamento e log in
storage/app/support/update-jobs/; - aggiorna il riepilogo ultimo backup e l esito dell operazione.
Questo e il percorso da preferire per l accettazione operativa lato staging, perche lascia traccia applicativa e stato avanzamento leggibile da interfaccia.
8. Aggiornamento da comando
Se serve eseguire la stessa procedura senza browser:
php artisan netgescon:update --channel=free
php artisan netgescon:update --channel=free --apply
La modalita licensed rimane disponibile solo come compatibilita tecnica o scenario futuro:
php artisan netgescon:update --channel=licensed --apply --code=CLIENTA --auth=tokenA
9. Sicurezza minima gia coperta
- hash SHA256 del pacchetto verificato prima dell apply;
- backup
.envlocale durante l update; - snapshot pre-update con manifest file e indice record;
- esclusione dei percorsi sensibili dalla sovrascrittura;
composer install --no-dev --optimize-autoloaderquando il pacchetto contiene file Composer;php artisan optimize:clearsempre a fine apply;php artisan migrate --forcese il manifest dichiaramigrate_required=true.
10. Roadmap reale
I passaggi sotto restano obiettivi successivi, non prerequisiti del flusso attuale:
- firma manifest con chiave privata e verifica lato nodo;
- audit centralizzato di download e apply;
- packaging/release automatizzati da pipeline Gitea;
- rollback completo codice piu database con retention formalizzata.
11. Checklist server update .53
Quando si lavora direttamente sulla macchina 192.168.0.53, l agent remoto deve verificare in questo ordine:
routes/api.phpcontiene siaGET /updates/manifestsiaGET /updates/packagenel gruppoRoute::prefix('v1/distribution').app/Http/Controllers/Api/DistributionController.phpcontiene i metodiupdatesManifest()eupdatesPackage()oltre ahealth().config/distribution.phpesiste ed e coerente con il motore update del workspace Day0.storage/app/distribution/free/manifest.jsonesiste.- il pacchetto zip referenziato dal manifest esiste davvero sotto
storage/app/distribution/free/. - dopo ogni modifica:
php artisan optimize:clear. - validazione finale:
curl -sS -D - --max-time 12 https://updates.netgescon.it/api/v1/distribution/health -o /tmp/health.out
curl -sS -D - --max-time 12 'https://updates.netgescon.it/api/v1/distribution/updates/manifest?channel=free' -o /tmp/manifest.out
head -n 40 /tmp/manifest.out