Environnement de développement

Prérequis

Logiciels requis

  • Docker Desktop : Version 20.10 ou supérieure

  • Git : Pour cloner le dépôt

  • Éditeur de code : VS Code, PHPStorm, ou autre

Configuration système

Fichier hosts

Ajouter au fichier /etc/hosts (macOS/Linux) ou C:\Windows\System32\drivers\etc\hosts (Windows) :

127.0.0.1   www.musiqueapproximative.test adminer.musiqueapproximative.test

Docker

Vérifier que Docker est bien installé et démarré :

docker --version
docker-compose --version

Installation

1. Cloner le dépôt

git clone git@github.com:constructions-incongrues/musiqueapproximative.git
cd musiqueapproximative

2. Configuration

Le fichier docker-compose.yml contient la configuration par défaut. Pour personnaliser, créer un fichier .env :

# Base de données
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=musiqueapproximative
MYSQL_USER=app
MYSQL_PASSWORD=app

# PHP
PHP_VERSION=7.4

3. Démarrage

# Démarrage automatique
./start-dev.sh

# Ou manuellement
docker-compose up -d

Le script start-dev.sh effectue :

  1. Build des images Docker

  2. Démarrage des conteneurs

  3. Installation des dépendances

  4. Initialisation de la base de données

4. Base de test

La suite de tests n’écrit jamais dans la base de développement. Elle utilise musiqueapproximative_test, déclarée sous test: dans src/config/databases.yml, et src/test/bootstrap/database.php refuse de démarrer si la connexion pointe ailleurs : les fixtures commencent par des TRUNCATE.

Cette base n’est pas créée par start-dev.sh. Une fois l’environnement démarré :

make test-init PROFILE=musiqueapproximative.localhost

La cible crée la base si elle manque, puis y construit le schéma. Elle est rejouable.

Le PROFILE est obligatoire. Le Makefile inclut etc/$PROFILE/.env et sa valeur par défaut est www.musiqueapproximative.net, c’est-à-dire la production. La cible refuse de s’exécuter si l’hôte de base de données n’est pas le conteneur local, et le dit.

Sans cette base, trois scripts de test échouent sur le refus du bootstrap. Le message est explicite, mais la cause est en amont : ce n’est pas un test cassé, c’est une base absente.

Si le message mentionne un DSN contenant le littéral ${DATABASE_NAME_TEST}, c’est que le .env du profil a été écrit avant que cette variable n’existe. L’ajouter, puis relancer make configure depuis src/.

Structure de l’environnement

Services Docker

Service Description Port

php

PHP-FPM 7.4 avec Symfony

9000

nginx

Serveur web Nginx

8080

db

MySQL/MariaDB

3306

adminer

Interface de gestion de base de données

8081

Volumes

  • ./src/var/www/html : Code source

  • ./var/var/www/var : Données variables

Outils de développement

VS Code

Extensions recommandées :

  • PHP Intelephense

  • Docker

  • EditorConfig

  • GitLens

Configuration dans .vscode/settings.json :

{
  "php.validate.executablePath": "/usr/bin/php",
  "editor.formatOnSave": true
}

PHPStorm

Configuration :

  1. Interpreter : Configurer Docker comme PHP interpreter

  2. Database : Connecter à MySQL via Docker

  3. Symfony Plugin : Installer le plugin Symfony

Debugging

Xdebug

Xdebug est configuré dans le conteneur PHP. Pour l’activer :

# Dans le conteneur
docker-compose exec php bash
export XDEBUG_MODE=debug

Configuration IDE :

  • Port : 9003

  • IDE Key : PHPSTORM

Logs

Les logs sont disponibles dans :

  • Symfony : src/log/

  • Nginx : docker-compose logs nginx

  • PHP : docker-compose logs php

Workflow de développement

  1. Créer une branche : git checkout -b feat/ma-fonctionnalite

  2. Développer : Modifier le code dans src/

  3. Tester : Vérifier dans le navigateur

  4. Commiter : Utiliser Conventional Commits

  5. Pousser : git push origin feat/ma-fonctionnalite

  6. Pull Request : Créer une PR sur GitHub

Troubleshooting

Le site ne s’affiche pas

  1. Vérifier que Docker est démarré

  2. Vérifier que les conteneurs sont actifs : docker-compose ps

  3. Vérifier les logs : docker-compose logs

  4. Vérifier le fichier hosts

Erreur de permission

# Corriger les permissions
chmod -R 777 src/cache src/log

Base de données non accessible

# Vérifier le conteneur MySQL
docker-compose ps db

# Voir les logs
docker-compose logs db

# Redémarrer le conteneur
docker-compose restart db

Cache non vidé

# Vider le cache Symfony
docker-compose exec php php symfony cache:clear

# Ou manuellement
rm -rf src/cache/*
chmod -R 777 src/cache