Deployment-track Les 7 van 8

🔒 HTTPS, domein & troubleshooting

DNS koppelen, gratis SSL via Let's Encrypt en veelvoorkomende fouten oplossen.

⏱ 30 min6 stappen Vereist: Les 6 — .env & productieconfig
Stap 1 / 6

Een domein koppelen via DNS

Om jouw domein naar de VPS te laten wijzen, voeg je een A-record toe bij de DNS-beheerder van je domein (bijv. TransIP, Cloudflare, NameCheap).

DNS-instellingen (bij je registrar)
TypeNaamWaardeTTL
A @ 123.45.67.89 3600
A www 123.45.67.89 3600

Vervang 123.45.67.89 door jouw VPS IP-adres. @ staat voor het rootdomein (jouwdomein.nl).

⏳ DNS-propagatie duurt 1–48 uur

Na het aanpassen van DNS duurt het even voordat de wijziging wereldwijd zichtbaar is. Controleer met:

nslookup jouwdomein.nl
Stap 2 / 6

Certbot installeren

Certbot is de officiële tool van Let's Encrypt — een gratis, automatisch certificate authority. Het vraagt een SSL-certificaat aan en configureert nginx automatisch.

1. Installeer Certbot
sudo apt install certbot python3-certbot-nginx -y
2. Vraag een certificaat aan (DNS moet al werken!)
sudo certbot --nginx -d jouwdomein.nl -d www.jouwdomein.nl

• Voer je e-mailadres in (voor verlengingsherinneringen)

• Accepteer de gebruiksvoorwaarden

• Certbot past de nginx-config automatisch aan!

3. Test automatische verlenging
sudo certbot renew --dry-run

Certbot verlengt het certificaat automatisch elke 90 dagen via een cron-taak. Deze test controleert of dat werkt.

Stap 3 / 6

HTTP → HTTPS redirect

Certbot voegt automatisch een redirect toe, maar het is goed te begrijpen wat er in je nginx-config staat na de installatie.

Wat Certbot toevoegt aan je server block
server {
    listen 80;
    server_name jouwdomein.nl www.jouwdomein.nl;
    return 301 https://$server_name$request_uri;  # HTTPS redirect
}

server {
    listen 443 ssl;
    server_name jouwdomein.nl www.jouwdomein.nl;

    ssl_certificate /etc/letsencrypt/live/jouwdomein.nl/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jouwdomein.nl/privkey.pem;

    root /var/www/mijnapp/public;
    # ... rest van je config
}
📖 Wat doet 301?

Een 301 Permanent Redirect vertelt browsers en zoekmachines dat HTTP voorgoed verplaatst is naar HTTPS. Browsers onthouden dit en gaan direct naar HTTPS bij een volgend bezoek.

Stap 4 / 6

Troubleshooting: nginx fouten

De meeste problemen na deployment hebben een van deze oorzaken. Werk de checklist systematisch af voordat je verder zoekt.

502 Bad Gateway

nginx kan PHP-FPM niet bereiken.

sudo systemctl status php8.3-fpm
sudo systemctl restart php8.3-fpm
# Check socket pad in nginx config vs. wat FPM gebruikt
ls /run/php/
403 Forbidden

nginx heeft geen leesrechten op de webroot of de index.php ontbreekt.

ls -la /var/www/mijnapp/public/
sudo chown -R www-data:www-data /var/www/mijnapp/public
500 Internal Server Error

Symfony of PHP gooit een fout. Kijk in de logs:

tail -f /var/www/mijnapp/var/log/prod.log
tail -f /var/log/nginx/mijnapp_error.log
Site toont "Welcome to nginx"

De standaard site is nog actief of de server_name in je config klopt niet.

sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
Stap 5 / 6

Troubleshooting: Symfony fouten

Als nginx werkt maar Symfony problemen geeft, zijn dit de meest voorkomende oorzaken.

Witte pagina / blanco scherm

Symfony kan niet schrijven naar var/ of de cache is corrupt.

sudo chown -R www-data:www-data /var/www/mijnapp/var
php bin/console cache:clear --env=prod
Database-verbindingsfout

DATABASE_URL in .env.local klopt niet.

php bin/console doctrine:schema:validate --env=prod
# Controleer .env.local en voer dan opnieuw uit:
composer dump-env prod
Class not found / Autoload errors

composer install is niet uitgevoerd of de autoloader is verouderd.

composer install --no-dev --optimize-autoloader
composer dump-autoload --optimize --no-dev
Routes werken niet (404 op alle pagina's)

try_files in nginx config mist of verwijst verkeerd.

# Controleer dat dit in je server block staat:
# try_files $uri $uri/ /index.php$is_args$args;
cat /etc/nginx/sites-available/mijnapp
Stap 6 / 6

Gefeliciteerd — je app staat live!

✅ Jouw deployment-stack is compleet
Ubuntu VPS — beveiligd
PHP 8.3 + FPM + extensies
nginx + server block
MariaDB + app-database
Code via Git
.env.local met productieconfig
HTTPS met Let's Encrypt
HTTP → HTTPS redirect
Nuttige log-commando's om bij de hand te houden
# Symfony logs volgen
tail -f /var/www/mijnapp/var/log/prod.log

# nginx error log
tail -f /var/log/nginx/mijnapp_error.log

# nginx access log
tail -f /var/log/nginx/mijnapp_access.log

# PHP-FPM log
tail -f /var/log/php8.3-fpm.log

# Systemd status
journalctl -u nginx -f

Kennischeck

Les 7 afronden

Ga door naar: Bonus — Railway PaaS →