netgescon-day0/docs/distribuzione-update-netgescon.md

116 lines
2.8 KiB
Markdown

# 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.