Avant tout, éditez un fichier .env.local
en reprenant les valeurs déclarées dans .env.internet
.
Ensuite, démarrer le projet via docker compose
:
docker compose build
docker compose up -d
En développement, lancez le mode watch
:
docker compose watch
Pour exécuter une commande, exemple ici cat composer.json
, sur le conteneur du service symfony
, lancez:
docker compose exec symfony cat composer.json
Pour sauter directement sur le conteneur, ouvrez un shell comme suit:
docker compose exec symfony bash
Pour pouvoir naviguer sur le site, il va vous falloir créer des utilisateurs avec leurs données. On peut réaliser ceci grâce aux data fixtures:
# Depuis le conteneur du service `symfony`:
bin/console doctrine:fixture:load --purge-with-truncate --no-interaction
Nous allons produire un fichier au format SQL qui sera utilisé directement par le conteneur Docker de PostgreSQL en local.
Commençons par nettoyer le dossier source:
rm -f .docker/scripts/*
Il faut d'abord générer un dump au format SQL. Pour cela, jouer cette commande depuis la base existante:
```bash
pg_dump $DATABASE_URL --schema=public --if-exists --clean --no-owner --no-privileges --exclude-table=public.spatial_ref_sys | grep -i -v 'extensions' > ./.docker/postgres/scripts/001-precontentieux-prod-$(date +'%Y-%m-%d').sql
On note ici que pour éliminer le bruit autour des extensions, on filtre à la volée les clauses qui les concernent.
Il reste à redémarrer le conteneur docker pour PostgreSQL :
docker compose rm --stop --force postgres
# Suppression de données de Postgre, pour forcer la recréation et la lecture des fichiers d'entrée
rm -Rf .docker/postgres/data/*
docker compose up -d postgres
Pour lancer un test fonctionnel, on utilise Panther et Firefox.
Pour pouvoir les lancer depuis le conteneur Docker:
# Firefox est déjà installé sur l'image de base ✅
./vendor/bin/bdi detect drivers
./vendor/bin/phpunit tests/Functional/
# Ou un test spécifique, pour un jeu de données précis:
./vendor/bin/phpunit --filter DepotBrisPorteTest::testDepotDossierBrisPorte@desktop
Si le test ne passe pas, c'est très compliqué de débugger en headless depuis un conteneur. Dans ce cas on rejoue le test depuis la machine host :
# Aliaser les noms de service Docker comme étant locaux:
echo "127.0.0.1 postgres" | sudo tee -a /etc/hosts
echo "127.0.0.1 mailpit" | sudo tee -a /etc/hosts
# Installer `geckodriver` https://github.com/symfony/panther?tab=readme-ov-file#installing-chromedriver-and-geckodriver
# Ex sur MacOS :
brew install geckodriver
PANTHER_NO_HEADLESS=1 ./vendor/bin/phpunit tests/Functional/
En cas d'erreur suivante :
Fatal error: Uncaught Facebook\WebDriver\Exception\Internal\WebDriverCurlException: Curl error thrown for http DELETE to /session/a0be33fe-07d6-4f9b-8c03-24fc29795ae8
Failed to connect to 127.0.0.1 port 4444 after 0 ms: Couldn't connect to server in /app/vendor/php-webdriver/webdriver/lib/Exception/Internal/WebDriverCurlException.php:20
Ensuite suivie de :
RuntimeException: The port 9080 is already in use.
Il faut prendre soin de supprimer le process zombie qui écoute le port désiré par panther
:
lsof -nP -t -i:9080 | xargs kill -9