Technisch artikel
Deployment aanpak voor Laravel 13 op shared hosting
Een nuchtere deploymentaanpak voor Laravel 13 en PHP 8.5 op shared hosting, met managed-runtime stappen alleen waar workers echt beschikbaar zijn.
- deployment
- laravel
- kmo
- release

In dit artikel
Op shared hosting bouw je de release vooraf wanneer Composer of Node niet beschikbaar zijn op de server. Alleen de public-map mag webtoegankelijk zijn. Configuratie, vendor, logs en eventuele backups horen buiten de publieke documentroot.
Controleer het hostingprofiel vóór publicatie: PHP en extensies, documentroot, schrijfbare paden, mail, cache, sessies en uitvoeringslimieten. Zonder shell is een gecontroleerd artifact nodig; de normale gebruikersflow mag niet alsnog Composer, Node of een permanente worker vereisen.
- Bouw vanuit lockfiles en pak geen productiegeheimen in een publiek artifact.
- Controleer cache en configuratie via de toegestane releaseprocedure; overschrijf geen runtimegegevens blind.
- Test na publicatie een leesroute en de relevante echte gebruikersflow, niet alleen /up.
Deployments zijn momenten van waarheid. Alles wat netjes gebouwd is, kan onrustig aanvoelen wanneer release-stappen onduidelijk zijn. Voor KMO projecten is voorspelbaarheid belangrijker dan snelheid.
Deze aanpak vertrekt vanuit Laravel 13, PHP 8.5 en shared hosting als veilige basis. Grotere infrastructuur kan extra stappen krijgen, maar kritieke flows mogen daar niet automatisch van afhangen.
Shared-hosting-first basis
Op shared hosting hoort een release te werken zonder queue worker, externe cache service, Supervisor of shellproces tijdens normale runtime. De applicatie moet via gewone HTTP requests correct blijven reageren.
- Bouw frontend assets voor upload of release
- Laat Composer en Vite buiten runtime vallen
- Cache config, routes en views alleen met expliciete release-stappen
- Houd contactformulieren, betalingen en onderhoudsflows synchroon en request-safe
Managed runtime alleen waar nodig
Een VPS, containerplatform of managed Laravel omgeving kan achtergrondverwerking ondersteunen. Dat is nuttig voor optionele exports, imports of zware notificaties, maar het verandert de basisregel niet: de gebruiker mag niet afhankelijk worden van een worker die shared hosting niet levert.
- Herstart workers alleen waar ze expliciet provisioned zijn
- Gebruik achtergrondverwerking alleen voor optioneel werk
- Documenteer welke flows zonder achtergrondproces blijven werken
- Monitor failures en retries wanneer managed workers actief zijn
Database en rollback
Database migraties blijven het grootste release-risico. Maak wijzigingen backwards compatible waar dat kan en test rollback op staging. Een rollback is geen noodoplossing, maar onderdeel van de releaseflow.
- Vermijd destructieve migraties zonder expliciete keuze
- Deploy code die tijdelijk met oud en nieuw schema kan werken
- Bewaar minstens een vorige release
- Controleer storage, uploads en rechten na elke release
Wat niet in de standaardflow hoort
Complexe infrastructuur is geen kwaliteitslabel. Voor veel Codegenie projecten is een kleine, betrouwbare releaseflow sterker dan een brede pipeline die lokale hostingvoorwaarden negeert.
- Geen queue worker als vereiste voor kritieke flows
- Geen build tooling nodig op de productieserver
- Geen daemon of scheduler als enige manier om user-facing taken af te ronden
- Geen release zonder rollbackpad
Checklist
- Tests groen voor release
- Build artifacts aanwezig
- Environment waarden gecontroleerd
- Migraties beoordeeld op data-impact
- Caches in juiste volgorde ververst
- Rollback getest en bereikbaar
Praktische codevoorbeelden
<?php
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
$laravelRoot = dirname(__DIR__).'/laravel-app';
require $laravelRoot.'/vendor/autoload.php';
/** @var Application $app */
$app = require_once $laravelRoot.'/bootstrap/app.php';
$app->handleRequest(Request::capture());$app = Application::configure(basePath: dirname(__DIR__))
->withRouting(web: __DIR__.'/../routes/web.php')
->create();
$publicPath = dirname(__DIR__).'/../public_html';
if (is_dir($publicPath)) {
$app->usePublicPath($publicPath);
}
return $app;Samenvatting
Een goede Laravel 13 deployment is rustig en voorspelbaar. Shared hosting vraagt geen zwakkere kwaliteit, maar wel discipline: minder runtime-afhankelijkheden, duidelijke release-stappen en geen kritieke achtergrondprocessen.
Wil je je deploymentflow eenvoudiger en veiliger maken, dan begint dat met de vraag welke stappen echt nodig zijn op jouw hostingprofiel. Daarna pas kies je extra infrastructuur.
Laatst bijgewerkt:


