11 KiB
NetGescon - Runbook Distribuzione Remota
Documento operativo unico per uscire dalla macchina locale e gestire NetGescon in rete con:
- macchina Git self-hosted,
- distribuzione aggiornamenti,
- canali
freeelicensed.
Questo runbook e pensato per essere eseguito sulla macchina remota dove stai preparando l'ambiente.
Stato operativo reale da usare oggi
Prima di ogni altra sezione, vale questa regola pratica:
- il codice si aggiorna nel repository locale
netgescon-day0 - si esegue commit Git e push su Gitea interno
- staging e gli altri nodi si allineano dal repository Gitea
Quindi il runbook remoto non sostituisce il flusso Git, ma lo completa.
Il deploy manuale diretto verso staging non e il percorso standard da descrivere come primario.
Stato Aggiornato (10-03-2026)
Modifiche gia implementate nel progetto per distribuzione/update:
- Config distribuzione:
config/distribution.php - Comando client update:
app/Console/Commands/NetgesconDistributionPullCommand.php - Registrazione comando:
bootstrap/app.php - Endpoint API update in
app/Http/Controllers/Api/DistributionController.phperoutes/api.php.
GET /api/v1/distribution/updates/manifestGET /api/v1/distribution/updates/package
- Script operativi:
scripts/ops/netgescon-baseline-freeze.shscripts/ops/netgescon-publish-manifest.sh- stack git:
scripts/ops/git-stack/*
- Manuale architettura:
docs/01-git-machine-blueprint-2026.md - Baseline creato:
storage/backups/netgescon-baselines/0.8.0-baseline_20260310-095558/
Nota tecnica verificata:
- era presente un errore sintassi che bloccava
php artisaninapp/Providers/Filament/AdminFilamentPanelProvider.php; - il file e stato corretto, e ora
php artisan listrisponde regolarmente.
Ordine Manuali Per Riavvio Lavoro
Quando riparti dopo stop chat/agent, usa questo ordine:
docs/RUNBOOK-DISTRIBUZIONE-REMOTA-NETGESCON.md(questo file)docs/01-git-machine-blueprint-2026.md(scelte architetturali)docs/distribuzione-update-netgescon.md(focus update pipeline)docs/ai/SESSION_HANDOFF.md(stato ultima sessione)docs/ai/TOPICS_INDEX.mde topic corrente indocs/ai/topics/*.md
1. Obiettivo
Portare NetGescon in produzione di distribuzione con:
- Server Git multi-progetto.
- Server update (manifest + pacchetti).
- Aggiornamento automatico nodi (staging e poi altri nodi).
- Base pronta per licensing con scadenza e moduli premium.
Nota attuale:
- il punto 1 oggi e gia sostanzialmente rappresentato dal repository Gitea interno
origin - i punti 2, 3 e 4 restano parzialmente predisposti ma non sono il flusso principale gia in esercizio
2. Architettura consigliata
Domini consigliati:
git.netgescon.it-> Forgejo/Giteaupdates.netgescon.it-> API update/licensingstorage.netgescon.it-> MinIO (opzionale ma consigliato)
Servizi:
- Forgejo (o Gitea)
- PostgreSQL (Forgejo)
- MinIO
- API update/licensing (puo essere il tuo Laravel NetGescon)
- Reverse proxy TLS (Nginx/Caddy)
3. Prerequisiti macchina remota
Pacchetti base:
sudo apt update
sudo apt install -y docker.io docker-compose-plugin curl jq unzip
sudo systemctl enable --now docker
Firewall (esempio):
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2222/tcp
sudo ufw --force enable
4. Bootstrap stack Git/Distribuzione
Nel repo NetGescon hai gia i file base:
scripts/ops/git-stack/docker-compose.ymlscripts/ops/git-stack/.env.example
4.1 Copia stack su macchina remota
mkdir -p /opt/netgescon-git-stack
cd /opt/netgescon-git-stack
# Copia i file dal tuo repo locale/remoto
after_copy=true
Copia dentro /opt/netgescon-git-stack almeno:
docker-compose.yml.env.exampleplaceholder-nginx.conf
4.2 Configura .env
cd /opt/netgescon-git-stack
cp .env.example .env
nano .env
Imposta obbligatoriamente:
GIT_DOMAINSSH_DOMAIN- password DB
- secret Forgejo
- credenziali MinIO
- SMTP
4.3 Avvio servizi
cd /opt/netgescon-git-stack
docker compose --env-file .env up -d
docker compose ps
5. Reverse proxy e TLS
Configura Nginx/Caddy davanti ai servizi docker.
Minimo indispensabile:
- HTTPS valido su
git.netgescon.it - HTTPS valido su
updates.netgescon.it - SSH Git pubblicato su
:2222
Verifica endpoint:
curl -I https://git.netgescon.it
curl -I https://updates.netgescon.it
6. Punto zero (baseline stabile)
Hai gia creato baseline locale:
storage/backups/netgescon-baselines/0.8.0-baseline_20260310-095558
Copialo su remoto (archivio storico):
# Esempio
scp -r storage/backups/netgescon-baselines/0.8.0-baseline_20260310-095558 user@REMOTE:/var/backups/netgescon-baselines/
Questo e il tuo punto di ritorno sicuro.
7. Setup update API su remoto
Questa sezione va considerata secondaria rispetto al flusso Git/Gitea corrente.
Prima di usarla, assicurarsi che:
- il commit corretto sia gia stato pubblicato su Gitea
- staging abbia gia riallineato quel commit dal repository
Nel progetto Laravel (istanza update server) devi avere:
- endpoint manifest/package
- config
distribution.php
Variabili .env lato update server:
NETGESCON_UPDATE_URL=https://updates.netgescon.it
NETGESCON_UPDATE_CHANNEL=free
NETGESCON_LICENSED_PAIRS="CLIENTA:tokenA,CLIENTB:tokenB"
Il valore free qui va letto come valore tecnico corrente di configurazione. Non dimostra da solo che il modello commerciale attivo sia gia definitivamente separato in canali.
Poi:
php artisan optimize:clear
php artisan route:clear
php artisan config:clear
Test endpoint update:
curl -sS "https://updates.netgescon.it/api/v1/distribution/updates/manifest?channel=free" | jq
curl -I -sS "https://updates.netgescon.it/api/v1/distribution/updates/package?channel=free&file=netgescon-0.8.1.zip"
8. Pubblicare il primo aggiornamento
8.1 Crea pacchetto zip release
Genera un file zip release (es. netgescon-0.8.1.zip) contenente solo codice applicativo da distribuire.
Nota: non includere .env, storage/, .git/.
8.2 Pubblica manifest
Script disponibile:
scripts/ops/netgescon-publish-manifest.sh
Esecuzione canale free:
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
Esecuzione canale licensed:
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
9. Aggiornare staging
Flusso corretto oggi:
- sviluppare e testare in
netgescon-day0 - fare commit e push su Gitea
- su staging, eseguire allineamento del repository dal remoto Gitea
- solo dopo l'allineamento, eseguire eventuali comandi Laravel necessari
Questa resta la procedura preferita anche quando esistono script o comandi di update applicativo.
10. Nota sui canali distribuzione
Nel codice esiste gia il supporto ai canali free e licensed, ma operativamente oggi il progetto va trattato come distribuzione unica fino a conferma di una reale attivazione commerciale differenziata.
La documentazione deve quindi:
- descrivere prima il flusso Git/Gitea reale
- marcare i canali distinti come infrastruttura pronta o parzialmente pronta
- evitare di presentare come attiva una segmentazione commerciale non ancora formalizzata
Sul nodo staging configura .env:
NETGESCON_UPDATE_URL=https://updates.netgescon.it
NETGESCON_UPDATE_CHANNEL=free
# per licensed:
# NETGESCON_LICENSED_CODE=CLIENTA
# NETGESCON_LICENSED_AUTH=tokenA
Check update:
php artisan netgescon:update --channel=free
Apply update:
php artisan netgescon:update --channel=free --apply
Per licensed:
php artisan netgescon:update --channel=licensed --apply --code=CLIENTA --auth=tokenA
10. Verifica finale rete
Dopo update staging:
curl -I -sS "https://staging.netgescon.it/up"
curl -I -sS "https://staging.netgescon.it/fornitore/tickets?fornitore=1"
Verifica app:
- Login
- Upload allegati
- Camera/webapp allegati
- Area fornitori nuova UI
- Import e TAG legacy
11. Policy accessi utenti selezionati e scadenza
Raccomandazione implementativa lato update/licensing:
- Tabella
licenses:code,auth,expires_at,revoked_at. - Tabella
license_modules: moduli abilitati per licenza. - Tabella
license_nodes: numero nodi autorizzati. - Endpoint
license/checkprima del download package.
12. Pagamento moduli premium (fase successiva)
Consigliato:
- Stripe subscription + webhook.
- Webhook aggiorna
licenseselicense_modules. - Feature gate lato app in base all'entitlement attivo.
13. Rollback rapido
Se update fallisce:
- Ripristina baseline da
/var/backups/netgescon-baselines/... - Ripristina
.env - Ripristina DB dal dump piu recente
php artisan optimize:clear
14. Checklist go-live
- TLS valido su
git.eupdates. - Backup automatici giornalieri (DB + package + config)
- Accesso admin con 2FA
- Primo aggiornamento staging riuscito
- Test allegati/camera ok
- Canale free e licensed verificati
15. Comandi Riavvio Rapido (Verificati)
Questi comandi sono allineati allo stato attuale del progetto.
15.1 Verifica ambiente prima di lavorare
cd /home/michele/netgescon/netgescon-laravel
php -l app/Providers/Filament/AdminFilamentPanelProvider.php
php artisan list | head -n 40
php artisan list | grep -E "netgescon:update|distribution|gescon:|import:" | head -n 60
15.2 Riavvio continuita AI (facoltativo ma consigliato)
cd /home/michele/netgescon/netgescon-laravel
bash scripts/ai/restart_brief.sh "Distribuzione Netgescon"
bash scripts/ai/continuity_auto.sh --threshold=150 --topic="Distribuzione Netgescon" --note="Ripartenza operativa"
15.3 Verifica update API da rete
curl -sS "https://updates.netgescon.it/api/v1/distribution/updates/manifest?channel=free" | jq
curl -I -sS "https://updates.netgescon.it/api/v1/distribution/updates/package?channel=free&file=netgescon-0.8.1.zip"
15.4 Check/apply update su nodo staging
cd /var/www/netgescon
php artisan netgescon:update --channel=free
php artisan netgescon:update --channel=free --apply
15.5 Smoke test rete staging
curl -I -sS "https://staging.netgescon.it/up"
curl -I -sS "https://staging.netgescon.it/fornitore/tickets?fornitore=1"
Se segui questo runbook, chiudi il ciclo locale e passi a una distribuzione reale in rete, pronta a scalare anche su altri progetti.