Deployment-track Les 5 van 8

🐙 Code deployen met Git

Repo clonen, Composer draaien, cache leegmaken en permissies goed zetten.

⏱ 30 min6 stappen Vereist: Les 4 — nginx voor Symfony
Stap 1 / 6

Git installeren en repo clonen

De eenvoudigste manier om code op je server te krijgen is via Git clone. Zorg dat je repo op GitHub staat en publiek is (of gebruik een deploy key voor private repos).

1. Installeer Git
sudo apt install git -y
git --version
2. Clone je repo naar de webmap
cd /var/www
git clone https://github.com/jouwusername/jouwrepo.git mijnapp

Na clonen staat jouw app in /var/www/mijnapp — precies de map die nginx verwacht.

🔁 Komt terug uit de Git-track

git clone heb je geleerd in Git les 1. Het verschil hier: je kloont naar een server in plaats van naar je lokale machine.

Stap 2 / 6

Composer install uitvoeren

In productie gebruik je composer install met extra vlaggen voor veiligheid en snelheid. Nooit composer update in productie!

Installeer dependencies (productie-modus)
cd /var/www/mijnapp
composer install --no-dev --optimize-autoloader --no-interaction
--no-dev

Installeert geen development-packages (PHPUnit, profiler). Kleiner en veiliger in productie.

--optimize-autoloader

Genereert een geoptimaliseerde class-map. Laadt klassen sneller op — essentieel in productie.

--no-interaction

Stelt geen vragen — handig bij geautomatiseerde deploys of CI/CD pipelines.

⚠️ Nooit composer update in productie

composer update upgradet packages en kan breaking changes introduceren. Gebruik altijd composer install met het vastgepende composer.lock bestand.

Stap 3 / 6

Cache leegmaken en opwarmen

Symfony cacht routes, templates en configuratie. Na elke deploy moet je de cache legen en opnieuw opbouwen voor de productieomgeving.

Cache wissen en opnieuw opbouwen
php bin/console cache:clear --env=prod --no-debug
php bin/console cache:warmup --env=prod

cache:clear verwijdert de cache, cache:warmup bouwt hem direct opnieuw op zodat de eerste bezoeker niet hoeft te wachten.

Assets installeren (als je Webpack Encore gebruikt)
php bin/console assets:install public
🔁 Komt terug uit de Symfony-track

php bin/console cache:clear ken je al van lokale ontwikkeling. In productie voeg je --env=prod --no-debug toe voor de juiste omgevingsinstellingen.

Stap 4 / 6

Permissies instellen

Symfony schrijft naar de var/ map (cache, logs). PHP-FPM draait als www-data en moet schrijfrechten hebben op die map.

Stel de juiste eigenaar in voor var/
sudo chown -R www-data:www-data /var/www/mijnapp/var
sudo chmod -R 775 /var/www/mijnapp/var
Stel ook rechten in voor public/ (uploads)
sudo chown -R www-data:www-data /var/www/mijnapp/public
sudo chmod -R 755 /var/www/mijnapp/public
🔑 Permissie-overzicht
Map
Eigenaar
Rechten
var/
www-data
775 (rw-rw-r-x)
public/
www-data
755 (rwxr-xr-x)
src/, config/
deploy
644 (alleen lezen)
Stap 5 / 6

Database-migraties uitvoeren

Als je Doctrine-migraties hebt, voer je die uit op de productiedatabase. Controleer altijd welke migraties worden uitgevoerd voordat je ze uitvoert.

1. Bekijk welke migraties nog niet uitgevoerd zijn
php bin/console doctrine:migrations:status --env=prod
2. Voer de migraties uit
php bin/console doctrine:migrations:migrate --env=prod --no-interaction
⚠️ Maak altijd een backup vóór migraties
mysqldump -u symfony_user -p symfony_db > backup_$(date +%Y%m%d).sql

Een migratie die mislukt halverwege kan data corrupt maken. Een backup kost 10 seconden.

Stap 6 / 6

Deploy-workflow samengevat

Dit is de deploy-volgorde die je elke keer herhaalt bij een update. Sla hem op als script voor automatisering.

Deploy-script (sla op als deploy.sh)
#!/bin/bash
cd /var/www/mijnapp

# 1. Haal nieuwe code op
git pull origin main

# 2. Installeer/update dependencies
composer install --no-dev --optimize-autoloader --no-interaction

# 3. Cache legen
php bin/console cache:clear --env=prod --no-debug

# 4. Migraties uitvoeren
php bin/console doctrine:migrations:migrate --env=prod --no-interaction

# 5. Permissies herstellen
sudo chown -R www-data:www-data var/

echo "Deploy voltooid!"
💡 Volgende stap: .env instellen

Je app staat nu op de server maar werkt nog niet goed — je .env voor productie ontbreekt nog. Dat doe je in les 6.

Kennischeck

Les 5 afronden

Ga door naar: .env en productieconfiguratie →