Naar de inhoud
Deploy
Blader door de documentatie

Zero-downtime deployments, push to deploy en rollbacks

Zo deployt Vimonto Deploy je site zonder downtime: releases, het deployscript en zijn variabelen, push to deploy, deploy-URL's en terugzetten.

Bekijk als Markdown Bijgewerkt op 7 oktober 2026

Een deployment zet een nieuwe versie van je code live op je server. Vimonto Deploy kloont je branch in een nieuwe releasemap, voert daar je deployscript uit en schakelt de site pas daarna in één atomische stap om. Tot dat moment krijgen bezoekers de vorige versie, dus een mislukte build haalt je site nooit offline.

Je kunt deployen met een knop, bij elke push naar je branch, of vanuit CI met een deploy-URL. De laatste paar releases blijven op de server staan, dus teruggaan naar een eerdere versie kost seconden.

De pagina Deployments met de repository, het deployscript, quick deploy, de deploy-URL en de lijst met deploys
De pagina Deployments van een site

Hoe werkt een zero-downtime deployment?

Elke site staat op schijf ingericht voor zero-downtime deploys:

/home/{user}/{directory}/
├── releases/
│   ├── 20261007141502/     één map per deploy
│   └── 20261007153044/
├── shared/
│   ├── .env                blijft tussen releases bewaard
│   └── storage/            alleen Laravel
└── current -> releases/20261007153044

Nginx serveert de site vanuit current. Een deploy doorloopt deze stappen, die je live kunt volgen:

Stap Wat er gebeurt
Code ophalen De branch wordt gekloond in een nieuwe release die naar datum en tijd is genoemd (een shallow clone van de nieuwste commit). De commithash, auteur en het bericht worden vastgelegd.
Deployscript uitvoeren De gedeelde .env wordt in de release gekoppeld (en bij Laravel ook storage/). Daarna draait je deployscript in de release, als de gebruiker van de site.
Live zetten current wordt in één atomische rename naar de nieuwe release gezet. PHP-FPM wordt herladen, zodat OPcache de nieuwe bestanden oppakt.
Oude releases opruimen Oude releases worden verwijderd; de nieuwste vijf blijven bewaard.

Na het live zetten herstart Vimonto Deploy ook wat je code draait: Laravel queue workers krijgen artisan queue:restart, Node.js-processen worden herstart, en elke ingeschakelde sitefunctie voert een eigen commando uit (bijvoorbeeld horizon:terminate voor Horizon).

Heeft je repository een .env.example, dan wordt bij de eerste deploy van een site de .env daarop opnieuw opgebouwd voordat het deployscript draait: met de sleutels, volgorde en opmerkingen van het voorbeeld, en de waarden die Vimonto Deploy genereerde ingevuld. Het deploylogboek meldt dit, en de geschiedenis van de .env bewaart het als Gebouwd op .env.example. Dit gebeurt maar één keer. Zie omgeving.

Bij elke keer ophalen worden ook de pakketten in je composer.json en package.json gelezen, zodat het menu sitefuncties de tools kan markeren die je app gebruikt.

Wat gebeurt er als een deploy mislukt?

Mislukt het ophalen of het deployscript, dan wordt de nieuwe release weggegooid en blijft current ongemoeid. De deploypagina meldt Deploy mislukt met de fout en De live versie is niet veranderd. Open Details en logboek om de uitvoer van elke stap te zien, los het probleem op en klik op Opnieuw deployen.

Nu deployen

Klik op Deployen in de siteheader, bovenaan elke sitepagina. Je gaat naar de eigen pagina van de deploy, met de fasen, de stap die bezig is en de voortgang. Je hoeft het venster niet open te houden: de deploy draait op de server, je krijgt een bericht in de app als hij klaar is, en een afgeronde of mislukte deploy stuurt ook een melding. Wil je de deployresultaten van een site ook naar je eigen endpoint of extra e-mailadressen sturen, stel dan haar deploymeldingen in.

Per site draait er maar één deploy tegelijk. Start je er een terwijl er een bezig is, dan zie je Er loopt al een deploy voor met het domein van de site.

De repository koppelen of wijzigen

Het paneel Repository toont de repository, de branch en de status van de Deploy-sleutel. Klik op Repository koppelen of Wijzigen om een repository te kiezen van een gekoppelde Git-host of een Eigen Git-URL te gebruiken.

  • Gekoppelde Git-host: de deploy-sleutel van de site wordt op de repository geregistreerd als alleen-lezen deploy-sleutel, en van de oude repository verwijderd als je wisselt. Bij een nieuw gekoppelde repository staat Deployen bij elke push meteen aan.
  • Eigen Git-URL: gebruik een SSH-URL (git@…) voor een privé repository en voeg de sleutel onder Deploy-sleutel van deze site toe als deploy-sleutel bij je Git-host. Gebruik een HTTPS-URL voor een openbare repository. Deployen bij elke push staat uit, omdat alleen een gekoppelde Git-host een webhook van Vimonto Deploy kan krijgen.

Het deployscript bewerken

Het paneel Deployscript bevat het Bash-script dat een release bouwt, in een code-editor met shell-markering. Het begint met een script dat bij je framework past. Je kunt het vrij bewerken en opslaan met Opslaan (of ⌘ S, Ctrl S). De volgende deployment gebruikt het. Standaard zet het gegenereerde script terug in de editor; het wordt pas bewaard als je op Opslaan klikt.

Het standaardscript voor een Laravel-site ziet er zo uit:

$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

Symfony-sites legen de cache en voeren Doctrine-migraties uit als er een map migrations is. Statamic-sites warmen ook de Stache op. Statische en Node.js-sites installeren pakketten en voeren het buildcommando uit.

Het script draait als de gebruiker van de site, in de map van de app binnen de nieuwe release (de hoofdmap, bij een monorepo), met set -e: het eerste commando dat mislukt stopt de deploy.

Welke variabelen kan het deployscript gebruiken?

Variabele Waarde
$VIMONTO_PHP De PHP-binary van de PHP-versie van de site, zoals php8.4.
$VIMONTO_COMPOSER Composer, uitgevoerd met de PHP-versie van de site.
$VIMONTO_RELEASE_PATH De map van de app in de nieuwe release.
$VIMONTO_SITE_PATH De map van de site, zoals /home/vimonto/shop.example.com.
$VIMONTO_BRANCH De branch die gedeployd wordt.
$VIMONTO_COMMIT De volledige hash van de commit die gedeployd wordt.

Gebruik $VIMONTO_PHP en $VIMONTO_COMPOSER in plaats van php en composer, zodat het script de PHP-versie van de site volgt als je die wijzigt.

Push to deploy

Bij een repository van een gekoppelde Git-host heeft het paneel Quick deploy de optie Deployen bij elke push. Die staat vanzelf aan als je de repository koppelt, bij het aanmaken of later: Vimonto Deploy voegt een webhook toe aan de repository bij GitHub, GitLab of Bitbucket. Elke push naar de branch van de site start dan een deploy; pushes naar andere branches worden genegeerd. Zet je het uit, dan wordt de webhook weer verwijderd.

Bij een repository met een eigen Git-URL zegt het paneel dat je in plaats daarvan de deploy-URL aanroept vanuit je Git-host of CI.

Deployen vanuit CI met de deploy-URL

Het paneel Deploy-URL toont een geheime URL voor de site, aan wie sites mag beheren. Een POST-verzoek daarnaartoe deployt de branch van de site:

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

Gebruik hem als laatste stap van een pipeline in GitHub Actions, GitLab CI of een andere tool, zodat een deploy pas start als je tests slagen. De antwoorden zijn gewone JSON:

Status Bericht Betekenis
202 Deploy started. De deploy staat in de wachtrij; het antwoord bevat het id ervan.
409 A deploy is already running. Probeer het opnieuw als de lopende deploy klaar is.
422 De reden De site is niet klaar of heeft geen repository.
404 Het token klopt niet.

De URL accepteert 60 verzoeken per minuut. Iedereen met de URL kan een deploy starten, dus houd hem geheim. Klik op Vernieuwen om een nieuwe te maken; de oude URL werkt dan meteen niet meer, en de webhook bij je Git-host wordt voor je bijgewerkt.

Een deploy volgen en de uitvoer lezen

De lijst Deploys toont elke deploy, de nieuwste bovenaan, 15 per pagina: de status, de commit, hoe hij gestart is (Handmatig, Push, Deploy-URL, Terugzetten of API, voor deploys die zijn gestart via de REST API of de CLI), wie hem startte, de auteur van de commit, de branch en hoe lang hij duurde. De live release heeft een label Live. Het overzicht van de site toont ook de meest recente deploys.

Klik op Bekijken om een deploy te openen. De pagina toont de fasen Ophalen, Bouwen en Live, de voortgang tijdens het draaien, en onder Details en logboek de uitvoer van elke stap. Het paneel Commit toont het bericht, de commit, de auteur, de branch, de release en wanneer hij gestart is. Met Vorige en Volgende ga je naar andere deploys.

Een afgeronde deploy met zijn fasen, commitgegevens en logboek
Eén deploy

Terugzetten naar een eerdere release

Omdat de nieuwste vijf releases op de server blijven, kun je een eerdere weer live zetten zonder iets te bouwen:

  1. Zoek de deploy in de lijst Deploys en klik op Terugzetten, of open hem en klik op Terugzetten naar deze release.
  2. Bevestig. current wijst meteen weer naar die release, PHP-FPM wordt herladen en workers worden herstart.

Een rollback verschijnt in de lijst als Teruggezet naar …. Terugzetten werkt alleen met zero-downtime deploys, en alleen voor releases die nog op de server staan.

Ter plekke deployen zonder zero downtime

Staat Zero-downtime deploys uit (gekozen bij het aanmaken van de site of onder site-instellingen), dan werkt elke deploy één release bij, releases/live, ter plekke. De code wordt opgehaald en teruggezet naar de branch, terwijl genegeerde bestanden zoals vendor/ en node_modules/ blijven staan, dus builds gaan sneller.

De nadelen:

  • Bezoekers kunnen de site zien terwijl hij gebouwd wordt.
  • Een mislukte build wordt niet weggegooid: de live code is de code die niet gebouwd kon worden.
  • Er zijn geen oude releases, dus geen rollback en geen opruimstap.

Veelgestelde vragen

Moet ik de deploypagina open houden?

Nee. Deploys draaien op de server als achtergrondtaken. Je kunt de pagina sluiten, en wie de deploy startte krijgt een melding als hij klaar is. Volg alle taken op de pagina activiteit. Elke deploy en rollback wordt ook vastgelegd in het auditlog.

Heeft een load-balanced site deploys?

Nee. Een site op een load balancer heeft geen code, en dus geen pagina Deployments. Deploy de site op elke app-server erachter. Zie load balancing.

Hoeveel releases worden bewaard?

Vijf: de nieuwste releases, altijd inclusief de live release. Oudere worden na elke geslaagde deploy verwijderd.

Waarom startte mijn push geen deploy?

Controleer of Deployen bij elke push aan staat en of je naar de branch van de site hebt gepusht. Pushes naar andere branches worden genegeerd. Een deploy die al loopt weigert ook een tweede.

Kan ik migraties alleen bij sommige deploys uitvoeren?

Het deployscript is gewoon Bash, dus je kunt voorwaarden gebruiken. Controleer bijvoorbeeld $VIMONTO_BRANCH of een bestand in de release voordat je $VIMONTO_PHP artisan migrate --force uitvoert.