# Distribuzione e Aggiornamenti NetGescon (senza dipendenza Git locale) Questo documento definisce un flusso pratico per: - congelare una baseline stabile, - pubblicare aggiornamenti da una macchina di distribuzione, - applicare update automatici sui nodi (`free` e `licensed`). ## 1. Punto zero (baseline stabile) Usare lo script baseline sulla macchina attuale funzionante: ```bash bash scripts/ops/netgescon-baseline-freeze.sh \ --app-dir /var/www/netgescon \ --version 0.8.0-baseline ``` Risultato: - snapshot codice (`code.tar.gz`), - backup `.env`, - dump DB best-effort, - file metadati baseline. ## 2. Macchina di distribuzione update La macchina update ospita: - API Laravel giĆ  presenti: `/api/v1/distribution/updates/manifest`, `/api/v1/distribution/updates/package` - storage pacchetti: `storage/app/distribution/{free|licensed}/` ### Variabili principali Aggiungere in `.env` (macchina update server): ```env NETGESCON_LICENSED_PAIRS="CLIENTA:tokenA,CLIENTB:tokenB" ``` Note: - canale `free`: accesso pubblico, - canale `licensed`: richiede `code`+`auth` validi. ## 3. Pubblicazione release Preparare zip release e pubblicare manifest: ```bash bash scripts/ops/netgescon-publish-manifest.sh \ --channel free \ --version 0.8.1 \ --package /var/www/netgescon/storage/app/distribution/free/netgescon-0.8.1.zip \ --base-url https://updates.netgescon.it ``` Per licensed: ```bash bash scripts/ops/netgescon-publish-manifest.sh \ --channel licensed \ --version 0.8.1 \ --package /var/www/netgescon/storage/app/distribution/licensed/netgescon-0.8.1.zip \ --base-url https://updates.netgescon.it ``` Il manifest contiene: `version`, `sha256`, `migrate_required`, `package_url`. ## 4. Nodo client: check/apply update Configurare sul nodo da aggiornare: ```env NETGESCON_UPDATE_URL=https://updates.netgescon.it NETGESCON_UPDATE_CHANNEL=free NETGESCON_NODE_CODE=staging-01 NETGESCON_LICENSED_CODE= NETGESCON_LICENSED_AUTH= ``` Per nodi licensed valorizzare code/auth. ### Verifica update ```bash php artisan netgescon:update --channel=free ``` ### Applicazione update ```bash php artisan netgescon:update --channel=free --apply ``` ### Apply con licensed ```bash php artisan netgescon:update --channel=licensed --apply --code=CLIENTA --auth=tokenA ``` ## 5. Sicurezza minima inclusa - verifica hash SHA256 del pacchetto, - backup `.env` prima dell'applicazione, - esclusione `storage/` e `.env` dalla sovrascrittura, - `php artisan optimize:clear` post update, - migrate automatico se richiesto da manifest. ## 6. Roadmap consigliata (step successivi) 1. Firma manifest con chiave privata (Ed25519) e verifica firma lato client. 2. Endpoint audit update (chi ha scaricato/applicato e quando). 3. UI admin Filament per vedere canale/versione e lanciare update. 4. Rollback automatico completo (codice + DB) con policy di retention.