🔐 .env & productieconfiguratie
Secrets buiten Git houden, APP_ENV op prod zetten en de DATABASE_URL goed instellen.
Hoe werkt .env in Symfony?
Symfony laadt omgevingsvariabelen in een vaste volgorde. Begrijp deze volgorde — anders overschrijven bestanden elkaar op de verkeerde manier.
Wachtwoorden, API-keys en APP_SECRET horen in .env.local op de server. Het .env bestand in Git bevat alleen voorbeeld-waarden en defaults.
.env.local aanmaken op de server
Op de server maak je handmatig een .env.local aan met alle productie-specifieke waarden. Dit bestand staat nooit in Git en bestaat alleen op de server.
nano /var/www/mijnapp/.env.local
APP_ENV=prod APP_DEBUG=0 APP_SECRET=verander_dit_naar_een_willekeurige_64char_string DATABASE_URL="mysql://symfony_user:SterkWachtwoord123!@127.0.0.1:3306/symfony_db?serverVersion=10.11.2-MariaDB&charset=utf8mb4"
mysql://symfony_user:wachtwoord@127.0.0.1:3306/symfony_db
Gebruik 127.0.0.1 (niet localhost) — dit zorgt voor TCP in plaats van een Unix-socket die soms problemen geeft.
APP_SECRET genereren
APP_SECRET is een unieke sleutel die Symfony gebruikt voor het beveiligen van sessies en CSRF-tokens. Gebruik nooit de standaardwaarde uit .env.
openssl rand -hex 32
Dit geeft een 64-karakter hexadecimale string. Kopieer die waarde en plak hem in je .env.local.
a3f8c2d1e4b7091f5e2a8c6d4b3f1e9d7c5a2b8f4e1d6c3a9b7f2e5d8c1a4b6
Genereer voor elke Symfony-app een unieke APP_SECRET. Als je APP_SECRET uitlekt, kunnen aanvallers valse sessies aanmaken en CSRF-tokens namaken.
Omgevingsvariabelen dumpen
In productie gebruikt Symfony bij voorkeur een gedumpte versie van de variabelen — een PHP-bestand dat sneller laadt dan het lezen van tekstbestanden.
composer dump-env prod
Dit genereert .env.local.php — een geoptimaliseerd PHP-bestand dat Symfony razendsnel kan laden.
php bin/console doctrine:schema:validate --env=prod
Als je een omgevingsvariabele aanpast in .env.local, moet je opnieuw composer dump-env prod uitvoeren. Het .env.local.php-bestand wordt anders niet bijgewerkt.
APP_DEBUG=0 en wat dat betekent
In productie zet je APP_DEBUG=0. Dit schakelt de foutpagina van Symfony uit — bezoekers zien een generieke foutpagina in plaats van jouw database-credentials in de stacktrace.
• Symfony-debugbalk actief
• Uitgebreide foutmeldingen
• Stack traces met variabelen
• Profiler beschikbaar op /_profiler
• Cache wordt automatisch vernieuwd
• Geen debugbalk
• Generieke foutpagina's
• Fouten alleen in var/log/
• Geen profiler
• Cache moet handmatig gewist worden
Kennischeck
Les 6 afronden
Ga door naar: HTTPS, domein en troubleshooting →