# Deployment

Deployment è un termine della lingua inglese utilizzato in informatica, in particolare nel software, con diverse accezioni specifiche ma con il concetto generico di effettuazione di una distribuzione software. Il deployment del software è l'insieme delle attività che rendono un sistema software disponibile per l'utilizzo.

## Descrizione
### Applicazioni e sistemi software

Il significato più comune del termine "deployment" in informatica è distribuzione o avviamento, ovvero la consegna o rilascio al cliente, con relativa installazione, configurazione e messa in funzione o esercizio, di un'applicazione o di un sistema software tipicamente all'interno di un sistema informatico aziendale (es. rete di computer aziendale). Lo si può di fatto considerare come una fase del ciclo di vita del software, la quale conclude lo sviluppo e il relativo collaudo e dà inizio alla manutenzione. Tipicamente questa operazione è appannaggio dei cosiddetti sistemisti applicativi.
In sostanza il deploy è un processo, formata da fasi diverse, finalizzato a provare e adattare il software perché sia trasferito in produzione (messa in avvio nel sistema di utilizzo).
Quando si installa, configura e avvia un sistema operativo (ad esempio Windows Server 2022) su una macchina server, si esegue un deployment. Nel caso di software non specifico (sistemi operativi, applicazioni di uso domestico, ecc.) il deployment è la distribuzione di immagini, pacchetti di aggiornamento, nuove versioni, ecc.
La differenza tra release (rilascio) e deployment (allestimento) è che il secondo processo è di tipo "tecnico" (spostare una versione del pacchetto da ambiente di collaudo/qualità ad ambiente di produzione/live) mentre il primo è di tipo "commerciale" (attivare la versione deployata affinché sia utilizzabile dagli utenti). In molti casi, i due processi sono simultanei e, spesso, automatici. Il rilascio è una conseguenza del deploy.
Il termine deployment è usato a volte al posto del termine delivery: sebbene i due concetti siano simili, non possono essere totalmente sovrapposti. Deployment è la procedura operativa che consente di giungere alla delivery (consegna ovvero il recapito del software nell'ambiente di effettivo utilizzo cioè in produzione). Poiché l'impatto potenziale dell'installazione può essere traumatico per un'azienda abituata a precedenti sistemi, si hanno varie possibili modalità di installazione o deployment del software:
* L'installazione diretta, in cui si disattiva il vecchio sistema e si sostituisce col nuovo appena creato. Se tale sostituzione presenta dei problemi non previsti in fase di sviluppo, non esiste backup dei vecchi programmi, il che causa enormi problemi. Tale soluzione è adottata soltanto in assenza di alternative valide.
* L'installazione parallela, in cui il lavoro previsto per il nuovo sistema è distribuito in parti uguali su di esso e su quello obsoleto, in modo da far fronte a un eventuale problema del nuovo utilizzando temporaneamente il vecchio. Quando il nuovo sistema raggiunge un discreto livello di affidabilità, sostituisce totalmente il vecchio.
* L'installazione scaglionata, in cui il nuovo sistema è introdotto per gradi, man mano che vengono risolti gli errori riscontrati; esso sostituisce il vecchio secondo varie fasi. Adottando tale soluzione, eventuali problemi avranno conseguenze meno disastrose, interessando soltanto una singola fase. Svantaggio di questo tipo di installazione sono i tempi molto lunghi.
* L'installazione pilota, in cui il nuovo sistema viene utilizzato soltanto per una piccola parte delle attività aziendali e, se regolarmente funzionante, viene esteso a tutta l'azienda. In caso di problemi essi risulteranno ristretti soltanto a quella parte di attività che adotta il nuovo sistema, senza pregiudicare l'intera attività aziendale.
Superata l'installazione e la fase di avviamento, il programma fornirà all'azienda un servizio efficiente e regolare, richiedendo comunque manutenzione, durante la quale vengono risolti i problemi riscontrati e introdotti cambiamenti funzionali atti a migliorare le prestazioni dei programmi. Questa è la fase del mantenimento/manutenzione o assistenza.
Con la diffusione della fruizione di sistemi in modalità SaaS il concetto di deployment è cambiato, dato che non c'è nulla da installare (a meno che il pacchetto abbia un eseguibile di istallazione sul server) e in questo caso dunque si può parlare di configurazione dell'erogazione del servizio (tecnicamente le cartelle/file del sorgente sono o copiate nell'ambiente di produzione con la configurazione aggiornata, oppure si modifica lo stato dell'artefatto nell'applicazione software che governa il rilascio).

### Build

La build (nel gergo software corrisponde a "pacchettizzare") è la fase di sviluppo software che precede il deploy.

### Configurazione

Diretta conseguenza di questo ambito è l'uso di deployment per indicare la procedura di configurazione avanzata (quindi operazioni più complesse richieste da un semplice setup), specie se si eseguono comandi da terminale o ricorrendo a servizi infrastrutturali, comunque eseguendo una procedura centralizzata. In pratica, si tratta di operazioni di avviamento cioè installazione/configurazione (sia sistemistiche che applicative), attuate per rendere utilizzabile e funzionante un sistema (potrebbe anche essere un firmware o un ambiente di pre-avvio). Posto che nei manuali tradotti dall'inglese e anche nel gergo informatico non è quasi mai tradotto (si trova scritto anche "deploy"), si potrebbe usare il termine italiano allestimento.
Spesso, l'amministratore di dominio (sistemista di rete) sceglie di impostare il deploy di un'applicazione in maniera silente, cioè totalmente trasparente per gli utenti, che così si ritrovano il programma o il servizio senza dover eseguire alcuna operazione dal proprio dispositivo di rete.

## Modellizzazione

In molti approcci alla modellizzazione del software o di altri sistemi, incluso quello di UML, il termine "deployment" viene usato per indicare quella parte di un modello che specifica come le funzioni del sistema, descritte altrove nel modello in termini astratti, siano messe in corrispondenza con oggetti concreti (componenti software o hardware).

## Provisioning

Altro termine dell'inglese informatico, contiguo a deployment, è provisioning (lett. "erogazione", "fornitura") usato con il significato di "avviare ed erogare" un sistema IT. Quando non si ha necessità di utilizzare un significato tecnicamente accurato, lo si può tradurre con il generico "installare".
Nelle procedure di sicurezza dei firmware o di componenti critici dei sistemi operativi, il provisioning è l'installazione e/o immediata abilitazione di livelli avanzati dei processi (la gestione dei certificati digitali, la registrazione delle chiavi di crittografia, ecc).
Un altro significato è quello relativo alle procedure di creazione e manutenzione dei diritti (con o senza credenziali di accesso), per le identità (gruppi e/o account) già inseriti nel dominio, delle informazioni agli utenti, ai servizi e alle macchine (propagazione e diffusione dei permessi). Il de-provisioning è il processo inverso, ovvero la riduzione o eliminazione dei permessi di accesso alle applicazioni o ai servizi. Il provisioning degli utenti è un tipo di gestione delle identità che fornisce le autorizzazioni ai servizi e alle applicazioni del dominio.
Microsoft utilizza la parola "provisioning" per intendere il processo di creazione di impostazioni per distribuire (in parole povere: implementare da remoto o centralmente) una determinata configurazione software a macchine di un dominio oppure anche a un dispositivo per uso domestico.
Nel gergo dei sistemisti, eseguire il provisioning dei nuovi (o da rimappare) terminali significa, concretamente: implementare (centralmente e massivamente in automatico o manualmente e fisicamente presso il singolo dispositivo) i processi di creazione utente e account, aggancio al dominio, applicazione regole amministrative aziendali, installazione e configurazione pacchetti applicativi, messa in sicurezza (crittografia, antimalware, disabilitazione diritti e profilazione accessi, strumenti di aggiornamento automatico e protetto, ecc) con relativi collaudi e audit. In pratica, un solo termine sintetizza una procedura articolata.
Nei sistemi operativi o nelle applicazioni o nelle soluzioni in cloud il provisioning è la distribuzione di rilasci, aggiornamenti, evoluzioni, patch, fix ecc. In pratica, è l'installazione in blocco, centralizzata e massiva (ovvero per gli utenti del dominio), di qualche applicazione o servizio.
In ambito hardware il provisioning è la procedura di adeguamento di risorse (di calcolo, di memoria, di connettività, di monitoraggio), in particolare l'incremento, secondo le necessità dei sistemi.
Provisioning è usato anche in telecomunicazione con significati analoghi (lo usano ad esempio i provider o i produttori di dispositivi per indicare che una carta SIM non è stata individuata e registrata sulla rete cellulare).
Ogni componente del sistema IT può essere sottoposto a provisioning, che è una fase del deployment. La configurazione (fine tuning) è un'operazione tipica della fase di provisioning.
Tradurre provisioning con il più comprensibile installazione al posto del termine specialistico distribuzione è accettabile.