Aller au contenu

Symfony Docker

De Marmits Wiki
Version datée du 16 juin 2025 à 22:26 par Geo (discussion | contributions) (Page créée avec « == Symfony cache et composer cache avec Docker : == ----- === '''1. Rôle du dossier <code>/var/cache</code> dans Symfony''' === Symfony utilise ce dossier pour : - '''Le cache applicatif''' (ex : compilation des templates Twig, cache des routes, annotations) - '''Le cache système''' (ex : fichiers de configuration compilés comme <code>srcApp_KernelDevDebugContainer.php</code>) '''Problème avec Docker :'''<br /> Par défaut, ce cache est régénéré à c... »)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Symfony cache et composer cache avec Docker :


1. Rôle du dossier /var/cache dans Symfony

Symfony utilise ce dossier pour : - Le cache applicatif (ex : compilation des templates Twig, cache des routes, annotations) - Le cache système (ex : fichiers de configuration compilés comme srcApp_KernelDevDebugContainer.php)

Problème avec Docker :
Par défaut, ce cache est régénéré à chaque démarrage du conteneur → ralentissements (surtout en dev).



2. Stratégies pour optimiser le cache avec Docker

A. Monter /var/cache en volume (pour le dev)

# docker-compose.yml
services:
  php:
    volumes:
      - ./var/cache:/var/www/html/var/cache  # Monte le cache Symfony

Avantages : - Le cache persiste entre les redémarrages du conteneur. - Meilleures performances en développement.

Inconvénients : - Peut causer des problèmes de permissions (solved avec chmod ou entrypoint.sh).



B. Utiliser un volume Docker nommé (prod + dev)

volumes:
  symfony_cache:  # Volume dédié pour le cache

services:
  php:
    volumes:
      - symfony_cache:/var/www/html/var/cache

Bonus : Ajoutez un entrypoint.sh pour fixer les permissions :

#!/bin/bash
set -e

# Fixe les permissions du cache
chown -R www-data:www-data /var/www/html/var

exec "$@"

C. Cache warming en production

Dans votre Dockerfile :

FROM composer AS builder
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader

FROM php:8.2-fpm
COPY --from=builder /app /var/www/html
RUN php bin/console cache:warmup  #  Pré-chauffe le cache

3. Gestion des environnements

Environnement Recommandation
Développement Volume monté (./var/cache:/...) + chmod
Production Volume nommé + cache warming dans l’image
CI/CD Cache éphémère (pas de montage)



4. Exemple complet (docker-compose.yml)

version: '3.8'

volumes:
  symfony_cache:  # Pour le cache
  composer_cache: # Pour Composer

services:
  app:
    build: .
    volumes:
      - ./:/var/www/html
      - symfony_cache:/var/www/html/var/cache
      - composer_cache:/tmp/composer
    environment:
      APP_ENV: dev
      COMPOSER_CACHE_DIR: /tmp/composer

5. Bonnes pratiques

  1. En dev : Montez var/cache pour éviter de tout recompiler.

  2. En prod : Utilisez cache:warmup dans l’image + volume nommé.

  3. Permissions : Résolvez-les via entrypoint.sh ou docker-compose :

    user: "${UID:-1000}:${GID:-1000}"
    



Différence avec Composer Cache

Composer (~/.composer) Symfony (/var/cache)
Type Cache de dépendances Cache applicatif
Montage Toujours utile Surtout en dev
Prod Volume nommé recommandé Warming dans l’image + volume



Résumé

  • Oui, on peut appliquer le même principe de volume monté pour /var/cache.
  • Mais : Symfony a besoin d’une gestion plus active (warming, permissions).
  • Optimisez :
    • Dev → Volume monté + permissions
    • Prod → Cache warming + volumes nommés

Cela garantit des performances optimales dans tous les cas ! 🚀