« Symfony Docker » : différence entre les versions

Aucun résumé des modifications
Ligne 1 : Ligne 1 :
== '''Docker avec les commandes <code>composer</code>, <code>symfony</code> et <code>bin/console</code>''' ==
Pour pouvoir exécuter des commandes '''<code>composer</code>''', '''<code>symfony</code>''' et '''<code>bin/console</code>''' depuis votre machine locale tout en les faisant affecter le conteneur Docker, voici une approche optimale basée sur des '''volumes montés''' et des '''alias pratiques'''.
-----
=== '''1. Montage des volumes pour synchroniser les fichiers''' ===
L’idée est de '''monter votre code local dans le conteneur''' pour que les modifications soient immédiatement visibles des deux côtés.
==== '''Solution 1 : Utilisation de <code>docker-compose.yml</code> (recommandé)''' ====
<syntaxhighlight lang="yaml">version: '3.8'
services:
  app:
    build: .
    volumes:
      - ./:/var/www/html  # Monte le projet Symfony (y compris vendor/)
      - ~/.composer:/tmp/composer  # Cache Composer (optionnel)
    working_dir: /var/www/html
    ports:
      - "8000:8000"  # Symfony CLI ou PHP-FPM
    tty: true
    stdin_open: true</syntaxhighlight>
==== '''Explications :''' ====
* <code>./:/var/www/html</code> : Synchronise le code local avec le conteneur (y compris <code>vendor/</code>).
* <code>~/.composer:/tmp/composer</code> : Cache Composer pour éviter de retélécharger les dépendances.
* <code>working_dir</code> : S’assure que les commandes s’exécutent dans <code>/var/www/html</code>.
-----
=== '''2. Exécuter des commandes dans le conteneur depuis l’hôte''' ===
==== '''Méthode 1 : <code>docker-compose exec</code> (pour les commandes ponctuelles)''' ====
<syntaxhighlight lang="bash"># Commande Composer (ex: ajouter un bundle)
docker-compose exec app composer require mon/bundle-local
# Commande Symfony CLI (ex: lancer le serveur)
docker-compose exec app symfony serve -d
# Commande Console (ex: migrer la base)
docker-compose exec app php bin/console make:migration</syntaxhighlight>
==== '''Méthode 2 : Alias shell pour simplifier (dans <code>~/.bashrc</code> ou <code>~/.zshrc</code>)''' ====
<syntaxhighlight lang="bash"># Alias pour Composer
alias dc-composer="docker-compose exec app composer"
# Alias pour Symfony CLI
alias dc-symfony="docker-compose exec app symfony"
# Alias pour la Console Symfony
alias dc-console="docker-compose exec app php bin/console"</syntaxhighlight>
'''Utilisation :'''
<syntaxhighlight lang="bash">dc-composer require mon/bundle-local
dc-console make:migration
dc-symfony serve -d</syntaxhighlight>
-----
=== '''3. Cas particulier : Développement d’un bundle local''' ===
Si vous développez un bundle en local et qu’il est lié via <code>composer.json</code> en <code>&quot;type&quot;: &quot;path&quot;</code>, assurez-vous que : 1. '''Le chemin est correct''' dans <code>composer.json</code> : <code>json    {        &quot;require&quot;: {            &quot;mon/bundle-local&quot;: &quot;*&quot;,            &quot;symfony/framework-bundle&quot;: &quot;^6.0&quot;        },        &quot;repositories&quot;: [            {                &quot;type&quot;: &quot;path&quot;,                &quot;url&quot;: &quot;./packages/mon-bundle-local&quot;            }        ]    }</code> 2. '''Le volume est bien monté''' dans <code>docker-compose.yml</code> : <code>yaml    volumes:      - ./:/var/www/html      - ./packages/mon-bundle-local:/var/www/html/packages/mon-bundle-local  # Si le bundle est dans un sous-dossier</code> 3. '''Reconstruire l’autoload''' après modification du bundle : <code>bash    docker-compose exec app composer dump-autoload</code>
-----
=== '''4. Optimisation pour le dev : Xdebug + volumes''' ===
Si vous utilisez '''Xdebug''' ou souhaitez un rechargement automatique :
<syntaxhighlight lang="yaml"># docker-compose.yml (extrait)
services:
  app:
    environment:
      XDEBUG_MODE: "develop,debug"
    volumes:
      - ./:/var/www/html
      - ~/.composer:/tmp/composer</syntaxhighlight>
-----
=== '''Récapitulatif des bonnes pratiques''' ===
{| class="wikitable"
|-
! Besoin
! Solution
|-
| '''Exécuter <code>composer</code>'''
| <code>docker-compose exec app composer require mon/bundle</code>
|-
| '''Lancer <code>bin/console</code>'''
| <code>docker-compose exec app php bin/console make:migration</code>
|-
| '''Utiliser Symfony CLI'''
| <code>docker-compose exec app symfony serve -d</code>
|-
| '''Développer un bundle local'''
| Monter le dossier du bundle + <code>composer dump-autoload</code> après modification
|-
| '''Optimiser l’expérience dev'''
| Alias shell + volumes montés + Xdebug
|}
-----
==== '''Conclusion''' ====
* ✅ '''Pour les commandes <code>composer</code>/<code>symfony</code>/<code>console</code>''' : Utilisez <code>docker-compose exec</code>.
* ✅ '''Pour le dev de bundles locaux''' : Montez le dossier et utilisez <code>composer dump-autoload</code>.
* ✅ '''Pour simplifier les commandes''' : Créez des alias (<code>dc-composer</code>, <code>dc-console</code>).
Cette approche permet un '''développement fluide''' sans avoir à reconstruire l’image à chaque modification. 🚀
== '''composer dump-autoload''' ==
== '''composer dump-autoload''' ==