Deploy & release¶
Releaseproces op hoofdlijnen¶
Het releaseproces is manueel en bestaat uit de volgende stappen:
flowchart LR
A[develop-branch gereed] --> B[bin/merge-push.sh]
B --> C[develop → main merge + push]
C --> D[website:offline]
D --> E[deploy via server]
E --> F[migraties: ./bin/doctrine m:m -n]
F --> G[cache:warmup: ./cli.php c:w]
G --> H[website:online]
Branches samenvoegen en pushen¶
bin/merge-push.sh controleert eerst of er geen uncommitted wijzigingen zijn en of pull.rebase = true geconfigureerd is. Daarna:
- Checkout
develop→ pull - Checkout
main→ pull - Merge
developintomain→ pushmain - Terug naar
develop→ pushdevelop
Vereiste: alle wijzigingen zijn gecommit vóór het script gestart wordt.
Website offline/online zetten¶
Tijdens een deploy wordt de shop tijdelijk offline gezet via de Symfony Console-commands:
# Offline zetten (standaard 30 minuten)
./cli.php website:offline
# Optioneel: met aangepast tijdstip
./cli.php website:offline "+1 hour"
# Terug online zetten
./cli.php website:online
Implementatie: src/Atraxion/Common/Command/WebsiteOfflineCommand.php en WebsiteOnlineCommand.php. De offline-status wordt bijgehouden als een bestand op APP_PUBLIC_DIR/appconfig/offline (aangemaakt/verwijderd door website_offline() / website_online()). Bezoekers zien een offline-pagina; de API retourneert HTTP 503 JSON.
Privileged IP-adressen kunnen de shop nog bezoeken terwijl hij offline is (is_offline(true) — controleert IP).
Bestanden die niet worden uitgerold¶
.deployignore bevat patronen die bij een rsync-deploy worden overgeslagen:
_data/**— databasedumps (grote binaire data).htaccess— lokale Apache-rewrite-config (niet uitrollen naar productie).git*,.clinerules,.phpstorm.meta.php— dev-bestandenINSTALL.md,README.md,LICENSE,AGENTS.md,CLAUDE.mdupdate_mysql.sh_static/css/sprite-brand*,_static/css/sprite-vehicle-brand.css
Na de deploy¶
Na het uitrollen op de server:
# Doctrine-migraties draaien
./bin/doctrine m:m -n
# Cache opwarmen (verplicht na migraties die cms_text raken)
./cli.php cache:warmup
Zonder cache:warmup blijven trans()-aanroepen leeg zolang de Memcached-cache de oude staat bevat. Zie Caching.
Shopupdating-map en exports¶
_shopupdating/ bevat:
cronjobs/— batch- en cron-scripts (zie Cronjob-overzicht)exports/— tijdelijk gegenereerde exportbestanden (stockexports naar platformen enz.)maintenance/— handmatige onderhoudsscripts voor 3D-scans, afbeeldingen en velgenrenderingindex_checkAllLevs.php/index_checkLevFile.php— aliassen naar de leveranciersstock-scriptsindex_stockForExport.php— alias voor stockexportupload-tracking.php/upload-tracking.phtml— handmatige bulk-upload van tracking-nummers naar factuurregels via een HTML-formuliervoerdoor.php— handmatige tool om een enkelvoudige order naar Odoo te forwarden (?order={orderId})
Sentry en releases¶
Bij een nieuwe deploy worden Sentry-meldingen van class-not-found / unknown-column / EntityManagerClosed die onmiddellijk na de deploy optreden beschouwd als deploy-artefacten (tijdelijk, veroorzaakt door APCu/OPcache-flush of race-conditions). Deze zijn geen echte bugs.