« 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>"type": "path"</code>, assurez-vous que : 1. '''Le chemin est correct''' dans <code>composer.json</code> : <code>json { "require": { "mon/bundle-local": "*", "symfony/framework-bundle": "^6.0" }, "repositories": [ { "type": "path", "url": "./packages/mon-bundle-local" } ] }</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''' == | ||