Vai al contenuto
Deploy
Sfoglia la documentazione

Deploy zero downtime, push to deploy e rollback

Come Vimonto Deploy pubblica il tuo sito senza downtime: release, script di deploy e variabili, push to deploy, URL di deploy per la CI e rollback rapidi.

Visualizza come Markdown Aggiornato il 7 ottobre 2026

Un deployment mette online una nuova versione del tuo codice sul server. Vimonto Deploy clona il tuo branch in una nuova directory di release, ci esegue il tuo script di deploy e solo allora fa passare il sito alla nuova versione con un unico passaggio atomico. Fino a quel momento i visitatori continuano a ricevere la versione precedente, quindi una build non riuscita non manda mai offline il tuo sito.

Puoi fare il deploy con un pulsante, a ogni push sul tuo branch o dalla CI con un URL di deploy. Le ultime release restano sul server, quindi tornare a una versione precedente richiede pochi secondi.

La pagina Deployment con repository, script di deploy, quick deploy, URL di deploy e l'elenco dei deploy
La pagina Deployment di un sito

Come funziona un deployment zero downtime?

Ogni sito è organizzato su disco per i deploy zero-downtime:

/home/{user}/{directory}/
├── releases/
│   ├── 20261007141502/     una directory per ogni deploy
│   └── 20261007153044/
├── shared/
│   ├── .env                mantenuto tra le release
│   └── storage/            solo Laravel
└── current -> releases/20261007153044

Nginx serve il sito da current. Un deploy esegue questi passaggi, che puoi seguire in tempo reale:

Passaggio Cosa succede
Recupera codice Il branch viene clonato in una nuova release che prende il nome da data e ora (un clone superficiale dell'ultimo commit). Vengono registrati hash, autore e messaggio del commit.
Esegui lo script di deploy Il .env condiviso viene collegato nella release (e per Laravel anche storage/). Poi il tuo script di deploy viene eseguito nella release, con l'utente del sito.
Metti live current viene fatto puntare alla nuova release con un unico rename atomico. PHP-FPM viene ricaricato così OPcache legge i nuovi file.
Rimuovi le vecchie release Le release vecchie vengono rimosse; vengono mantenute le cinque più recenti.

Dopo il passaggio live, Vimonto Deploy riavvia anche ciò che esegue il tuo codice: i queue worker di Laravel ricevono artisan queue:restart, i processi Node.js vengono riavviati e ogni funzionalità del sito attiva esegue il proprio comando (per esempio horizon:terminate per Horizon).

Al primo deploy di un sito, se il tuo repository ha un .env.example, il .env viene ricostruito su quella base prima che giri lo script di deploy: con le chiavi, l'ordine e i commenti dell'esempio, e con i valori generati da Vimonto Deploy già inseriti. Il log del deploy lo segnala, e la cronologia del .env lo conserva come Costruito su .env.example. Succede una sola volta. Consulta ambiente.

Ogni recupero del codice legge anche i pacchetti nel tuo composer.json e package.json, così il menu delle funzionalità del sito può segnalare gli strumenti usati dalla tua app.

Cosa succede se un deploy fallisce?

Se il recupero del codice o lo script di deploy falliscono, la nuova release viene scartata e current non viene toccato. La pagina del deploy mostra Deploy non riuscito con l'errore e La versione live non è cambiata. Apri Dettagli e log per vedere l'output di ogni passaggio, risolvi il problema e clicca su Rifai il deploy.

Fai il deploy

Clicca su Fai il deploy nell'intestazione del sito, in cima a ogni pagina del sito. Vieni portato alla pagina del deploy, che mostra le fasi, il passaggio in esecuzione e l'avanzamento. Non devi tenere aperta la finestra: il deploy gira sul server, ricevi un messaggio nell'app quando è finito, e un deploy completato o non riuscito invia anche una notifica. Per inviare i risultati dei deploy di un sito anche a un tuo endpoint o ad altri indirizzi email, configura le sue notifiche di deploy.

Per ogni sito gira un solo deploy alla volta. Se ne avvii un altro mentre uno è in corso, vedi C'è già un deploy in corso per seguito dal dominio del sito.

Collega o cambia il repository

Il pannello Repository mostra il repository, il branch e lo stato della Deploy key. Clicca su Collega un repository o Modifica per scegliere un repository da un Git host collegato o per usare un URL Git personalizzato.

  • Git host collegato: la deploy key del sito viene registrata sul repository come deploy key di sola lettura, e rimossa dal vecchio repository quando lo cambi. Un repository appena collegato riceve subito Deploy a ogni push attivato.
  • URL Git personalizzato: usa un URL SSH (git@…) per un repository privato e aggiungi la chiave mostrata in Deploy key di questo sito come deploy key presso il tuo Git host. Usa un URL HTTPS per un repository pubblico. Deploy a ogni push è disattivato, perché solo un Git host collegato può ricevere un webhook da Vimonto Deploy.

Modifica lo script di deploy

Il pannello Script di deploy contiene lo script Bash che costruisce una release, in un editor di codice con evidenziazione della sintassi shell. Parte con uno script adatto al tuo framework, che puoi modificare liberamente e salvare con Salva (oppure ⌘ S, Ctrl S). Il deployment successivo lo usa. Predefinito rimette nell'editor lo script generato; viene salvato solo quando clicchi su Salva.

Lo script predefinito di un sito Laravel è questo:

$VIMONTO_COMPOSER install --no-dev --no-interaction --prefer-dist --optimize-autoloader

if [ -f package.json ]; then
    if [ -f package-lock.json ]; then npm ci; else npm install; fi
    npm run build
fi

$VIMONTO_PHP artisan storage:link --force
$VIMONTO_PHP artisan migrate --force
$VIMONTO_PHP artisan optimize

I siti Symfony svuotano la cache ed eseguono le migration Doctrine quando c'è una cartella migrations. I siti Statamic scaldano anche lo Stache. I siti statici e Node.js installano i pacchetti ed eseguono il comando di build.

Lo script gira con l'utente del sito, nella directory dell'app all'interno della nuova release (la directory root, per un monorepo), con set -e: il primo comando che fallisce interrompe il deploy.

Quali variabili può usare lo script di deploy?

Variabile Valore
$VIMONTO_PHP Il binario PHP della versione PHP del sito, come php8.4.
$VIMONTO_COMPOSER Composer, eseguito con la versione PHP del sito.
$VIMONTO_RELEASE_PATH La directory dell'app nella nuova release.
$VIMONTO_SITE_PATH La directory del sito, come /home/vimonto/shop.example.com.
$VIMONTO_BRANCH Il branch di cui fai il deploy.
$VIMONTO_COMMIT L'hash completo del commit di cui fai il deploy.

Usa $VIMONTO_PHP e $VIMONTO_COMPOSER invece di php e composer, così lo script segue la versione PHP del sito quando la cambi.

Push to deploy

Con un repository di un Git host collegato, il pannello Quick deploy offre Deploy a ogni push. Si attiva da solo quando colleghi il repository, alla creazione o in seguito: Vimonto Deploy aggiunge un webhook al repository su GitHub, GitLab o Bitbucket. Ogni push sul branch del sito avvia allora un deploy; i push su altri branch vengono ignorati. Disattivandolo, il webhook viene rimosso.

Per un repository con un URL Git personalizzato, il pannello ti dice di chiamare invece l'URL di deploy dal tuo Git host o dalla CI.

Deploy dalla CI con l'URL di deploy

Il pannello URL di deploy mostra un URL segreto per il sito a chi può gestire i siti. Una richiesta POST a questo URL fa il deploy del branch del sito:

curl -X POST https://…/deploy/your-secret-token

Usalo come ultimo passaggio di una pipeline GitHub Actions, GitLab CI o di altro tipo, così un deploy parte solo quando i test passano. Le risposte sono semplice JSON:

Stato Messaggio Significato
202 Deploy started. Il deploy è in coda; la risposta include il suo id.
409 A deploy is already running. Riprova quando il deploy in corso è terminato.
422 Il motivo Il sito non è pronto o non ha un repository.
404 Il token è sbagliato.

L'URL accetta 60 richieste al minuto. Chiunque abbia l'URL può avviare un deploy, quindi tienilo segreto. Clicca su Rigenera per crearne uno nuovo; il vecchio URL smette subito di funzionare e il webhook presso il tuo Git host viene aggiornato per te.

Segui un deploy e leggi il suo output

L'elenco Deploy mostra tutti i deploy, dal più recente, 15 per pagina: stato, commit, come è stato avviato (Manuale, Push, URL di deploy, Rollback o API, per i deploy avviati tramite la REST API o la CLI), chi l'ha avviato, l'autore del commit, il branch e quanto è durato. La release live ha il badge Live. Anche la panoramica del sito mostra i deploy più recenti.

Clicca su Visualizza per aprire un deploy. La sua pagina mostra le fasi Recupera, Build e Live, l'avanzamento mentre è in corso e, in Dettagli e log, l'output di ogni passaggio. Il pannello Commit riporta messaggio, commit, autore, branch, release e quando è stato avviato. Usa Precedente e Avanti per spostarti tra i deploy.

Un deploy completato con le sue fasi, i dettagli del commit e il log
Un singolo deploy

Rollback a una release precedente

Dato che le cinque release più recenti restano sul server, puoi rimettere live una release precedente senza ricompilare nulla:

  1. Trova il deploy nell'elenco Deploy e clicca su Rollback, oppure aprilo e clicca su Rollback a questa release.
  2. Conferma. current punta subito di nuovo a quella release, PHP-FPM viene ricaricato e i worker vengono riavviati.

Un rollback compare nell'elenco come Rollback eseguito a …. I rollback richiedono i deploy zero-downtime e funzionano solo per le release ancora presenti sul server.

Deploy sul posto senza zero downtime

Quando Deploy zero-downtime è disattivato (scelta fatta alla creazione del sito o nelle impostazioni del sito), ogni deploy aggiorna sul posto un'unica release, releases/live. Il codice viene recuperato e riallineato al branch, mentre i file ignorati come vendor/ e node_modules/ restano, quindi le build sono più veloci.

I compromessi:

  • I visitatori possono vedere il sito mentre viene compilato.
  • Una build non riuscita non viene scartata: il codice live è quello la cui build è fallita.
  • Non ci sono release vecchie, quindi niente rollback e niente passaggio di pulizia.

Domande frequenti

Devo tenere aperta la pagina del deploy?

No. I deploy girano sul server come task in background. Puoi chiudere la pagina, e chi ha avviato il deploy riceve una notifica quando finisce. Segui tutti i task nella pagina Attività. Ogni deploy e rollback viene anche registrato nel registro di audit.

Un sito con bilanciamento del carico ha dei deploy?

No. Un sito su un load balancer non ha codice, quindi non ha una pagina Deployment. Fai il deploy del sito su ogni app server dietro il load balancer. Consulta bilanciamento del carico.

Quante release vengono mantenute?

Cinque: le release più recenti, inclusa sempre quella live. Quelle più vecchie vengono rimosse dopo ogni deploy riuscito.

Perché il mio push non ha avviato un deploy?

Verifica che Deploy a ogni push sia attivo e che tu abbia fatto push sul branch del sito. I push su altri branch vengono ignorati. Anche un deploy già in corso rifiuta un secondo deploy.

Posso eseguire le migration solo in alcuni deploy?

Lo script di deploy è semplice Bash, quindi puoi usare delle condizioni. Per esempio, controlla $VIMONTO_BRANCH o un file nella release prima di eseguire $VIMONTO_PHP artisan migrate --force.