Deployment-track Les 6 van 8

🔐 .env & productieconfiguratie

Secrets buiten Git houden, APP_ENV op prod zetten en de DATABASE_URL goed instellen.

⏱ 25 min5 stappen Vereist: Les 5 — Code deployen met Git
Stap 1 / 5

Hoe werkt .env in Symfony?

Symfony laadt omgevingsvariabelen in een vaste volgorde. Begrijp deze volgorde — anders overschrijven bestanden elkaar op de verkeerde manier.

Laadvolgorde (hoog → laag prioriteit)
.env.local Lokale overrides — nooit in Git. Dit gebruik je in productie.
.env.prod.local Productie-overrides — nooit in Git
.env.prod Productie-standaarden — wél in Git (geen secrets)
.env Standaard defaults — wél in Git (geen secrets)
🚫 Nooit secrets in .env in Git

Wachtwoorden, API-keys en APP_SECRET horen in .env.local op de server. Het .env bestand in Git bevat alleen voorbeeld-waarden en defaults.

Stap 2 / 5

.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.

Maak .env.local aan
nano /var/www/mijnapp/.env.local
Minimale productie-inhoud van .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"
💡 DATABASE_URL opbouw

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.

Stap 3 / 5

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.

Genereer een veilige APP_SECRET
openssl rand -hex 32

Dit geeft een 64-karakter hexadecimale string. Kopieer die waarde en plak hem in je .env.local.

Voorbeeld output (gebruik nooit deze exacte waarde)
a3f8c2d1e4b7091f5e2a8c6d4b3f1e9d7c5a2b8f4e1d6c3a9b7f2e5d8c1a4b6
🚨 APP_SECRET nooit hergebruiken

Genereer voor elke Symfony-app een unieke APP_SECRET. Als je APP_SECRET uitlekt, kunnen aanvallers valse sessies aanmaken en CSRF-tokens namaken.

Stap 4 / 5

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.

Dump alle .env-waarden naar een PHP-bestand
composer dump-env prod

Dit genereert .env.local.php — een geoptimaliseerd PHP-bestand dat Symfony razendsnel kan laden.

Controleer de database-verbinding
php bin/console doctrine:schema:validate --env=prod
⚠️ Na elke .env.local wijziging opnieuw dumpen

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.

Stap 5 / 5

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.

Lokaal (APP_DEBUG=1)

• Symfony-debugbalk actief

• Uitgebreide foutmeldingen

• Stack traces met variabelen

• Profiler beschikbaar op /_profiler

• Cache wordt automatisch vernieuwd

Productie (APP_DEBUG=0)

• Geen debugbalk

• Generieke foutpagina's

• Fouten alleen in var/log/

• Geen profiler

• Cache moet handmatig gewist worden

Checklist: app klaar voor productie?
APP_ENV=prod
APP_DEBUG=0
APP_SECRET is uniek en sterk (64 hex-karakters)
DATABASE_URL verwijst naar productiedatabase
.env.local staat NIET in Git (.gitignore)
composer dump-env prod uitgevoerd
cache:clear --env=prod uitgevoerd

Kennischeck

Les 6 afronden

Ga door naar: HTTPS, domein en troubleshooting →