Laravel 13 installeren op een Debian 13-server met nginx
5 hoofdstukken · 1 uur 15 · Gemiddeld · Composer, Debian · geverifieerd op 7 september 2026
Op Debian 13 komt PHP 8.4 uit de officiële repository's: een externe repository heb je niet nodig. Installeer PHP en zijn extensies, dan Composer (met controle van de checksum), maak het project met composer create-project laravel/laravel, geef schrijfrechten op storage/ en bootstrap/cache/ en laat de nginx-root naar public/ wijzen. Controleer het resultaat: de homepage moet 200 antwoorden en /.env moet 403 antwoorden.
Deze gids doorloopt de volledige installatie van een Laravel 13-applicatie op een Debian 13-server, van een kaal systeem tot een pagina die door nginx wordt geserveerd. Elke stap is op 2 september 2026 uitgevoerd op een schone Debian 13 “trixie”, en het eindresultaat is gecontroleerd: HTTP 200 op de homepage, het bestand .env niet bereikbaar vanaf het web.
Artikel uit het leertraject Webontwikkeling. Vijf stappen hebben hun eigen uitgewerkte hoofdstuk, te vinden in de zijbalk. Hieronder staat de volledige reeks, met precies genoeg om tot het einde te komen.
Wat je nodig hebt voor je begint
- Een Debian 13-server “trixie” die via SSH bereikbaar is. Debian 12 werkt ook, met PHP 8.2.
- Een gebruiker zonder root-rechten die over
sudobeschikt. Installeer en deploy nooit als root. - Een ontwikkelmachine aan jouw kant. Op macOS is het commando
laraveldat niet gevonden wordt het klassieke struikelblok. - Een domeinnaam die naar de server wijst, als je HTTPS wilt.
Maak de gebruiker aan die de applicatie gaat dragen, als dat nog niet gebeurd is:
sudo adduser deploy
sudo usermod -aG sudo deploy1. PHP en zijn extensies
Debian 13 levert PHP 8.4 mee, waardoor je de externe Sury-repository niet nodig hebt:
sudo apt update
sudo apt install -y php-cli php-fpm \
php-mbstring php-xml php-curl php-zip \
php-bcmath php-intl php-mysql php-sqlite3 \
unzip curl ca-certificates
php -v # PHP 8.4.24Welke extensies precies nodig zijn, de instellingen in php.ini en de werkwijze om een andere PHP-versie te installeren staan in het hoofdstuk over PHP.
2. Composer
Installeer hem en controleer daarbij de checksum van het installatieprogramma, zoals de officiële documentatie voorschrijft:
EXPECTED="$(curl -sS https://composer.github.io/installer.sig)"
curl -sS https://getcomposer.org/installer -o composer-setup.php
ACTUAL="$(php -r 'echo hash_file("sha384", "composer-setup.php");')"
if [ "$EXPECTED" = "$ACTUAL" ]; then
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
fi
rm composer-setup.php
composer --version # Composer version 2.10.33. Het Laravel-project aanmaken
Als gebruiker deploy, nooit als root:
su - deploy
composer create-project laravel/laravel /home/deploy/app --no-interaction
cd /home/deploy/app
php artisan --version # Laravel Framework 13.30.1create-project genereert het bestand .env, maakt de application key aan en draait de migraties op de standaard SQLite-database. Voor een MySQL- of MariaDB-database, waarvan de installatie een eigen hoofdstuk heeft, vul je de verbinding in en draai je de migraties opnieuw:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=un_mot_de_passe_solidephp artisan migrate --force4. Rechten op de bestanden
Dit is de stap die men overslaat en die de witte pagina, of een 500-fout, oplevert. De betrokken mappen zijn storage_path() en bootstrap/cache, beschreven in de paden van de applicatie, plus database/ zolang de applicatie de bij de installatie aangemaakte SQLite-database gebruikt: de sessiedriver schrijft erin bij elk bezoek. De webserver moet in deze drie mappen kunnen schrijven, en alleen in deze:
sudo chown -R deploy:www-data /home/deploy/app/storage /home/deploy/app/bootstrap/cache /home/deploy/app/database
sudo chmod -R 775 /home/deploy/app/storage /home/deploy/app/bootstrap/cache /home/deploy/app/databaseStaat het project in de persoonlijke map van een gebruiker, dan moet nginx die kunnen doorlopen:
sudo chmod o+x /home/deployDat is het meest verspreide en het gevaarlijkste advies: het maakt je applicatie wijzigbaar vanaf elk account op de server. 775 met de juiste groep volstaat, en dat is ook wat voor de controle is gebruikt.
5. nginx en PHP-FPM
Dit onderdeel installeert nginx. Geef je de voorkeur aan Apache, gebruikelijker bij shared hosting, volg dan het hoofdstuk over Apache in de plaats: de rest van de gids blijft geldig.
sudo apt install -y nginx php-fpmNoteer het exacte pad van de socket, het bevat het versienummer van PHP:
grep -h '^listen' /etc/php/8.4/fpm/pool.d/www.conf
# listen = /run/php/php8.4-fpm.sockMaak het bestand voor de site aan. De root wijst naar public/, nooit naar de projectmap zelf:
server {
listen 80;
server_name exemple.com;
root /home/deploy/app/public;
index index.php;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Activeer de site, schakel de standaardsite uit en controleer de syntaxis:
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful6. De installatie controleren
Twee controles volstaan om te weten of de installatie overeind blijft:
curl -s -o /dev/null -w "page d'accueil : %{http_code}\n" http://127.0.0.1/
curl -s -o /dev/null -w ".env : %{http_code}\n" http://127.0.0.1/.envpage d'accueil : 200
.env : 403De tweede controle is de belangrijkste. Een 200 op /.env zou betekenen dat je databasegegevens en je APP_KEY publiek leesbaar zijn. Het blok location ~ /\.(?!well-known).* houdt dat tegen, en daarom moet de root van de site public/ zijn.
7. Naar productie
De ontwikkelconfiguratie laat informatie lekken. Drie regels in de .env:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://exemple.comDaarna de caches, die je na elke deployment opnieuw opbouwt:
composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan about --only=environment # Debug Mode moet OFF tonenDeze instelling wordt uitgewerkt in het artikel over de debugmodus.
Voeg HTTPS toe met Certbot, dat zelf de nginx-configuratie aanpast:
Als de applicatie publieke formulieren aanbiedt, voorzie dan ook een bescherming tegen geautomatiseerde inzendingen.
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d exemple.comTot slot de scheduler, als de applicatie er gebruik van maakt:
sudo crontab -u deploy -e
# * * * * * cd /home/deploy/app && php artisan schedule:run >> /dev/null 2>&1Voor cache, sessies en queues op Redis ga je verder met het hoofdstuk over Redis.
Veelgemaakte fouten
chmod o+x /home/deploy, anders geeft nginx een permissiefout.