# ============================================================================ # Pile de test de la branche V7.9. # ============================================================================ # Noms de conteneurs, réseau, volume et ports publiés sont suffixés « test » : # cette pile tourne EN PARALLÈLE de la pile principale (pta-db, pta-php, …) # sans lui prendre ni ses conteneurs, ni ses données, ni ses ports. # # `docker compose up -d --build` suffit : le service db-migrate applique # lui-même les migrations SQL, dont celle du tableau de bord V7.9. # # Ce répertoire n'a volontairement pas de fichier .env (il est ignoré par git) : # les valeurs par défaut ci-dessous s'appliquent donc telles quelles, et les # ports publiés (9080 / 9081 / 9306) ne peuvent pas entrer en conflit avec la # pile principale (8080 / 8081). Si vous y copiez le .env de la pile principale, # pensez à y changer APP_PORT et PMA_PORT. # # ATTENTION — deux familles de ports à ne pas confondre : # # · ports PUBLIÉS sur la machine hôte, dans les blocs `ports:` : # 9080 application 9081 phpMyAdmin 9306 MariaDB # Ceux-là se changent librement, ce sont eux qu'on tape dans un navigateur # ou dans un client SQL. # # · ports JOINTS À L'INTÉRIEUR du réseau Docker, dans les blocs # `environment:` (PTA_DB_PORT, DB_PORT, PMA_PORT) : MariaDB y écoute # TOUJOURS sur 3306, quel que soit le port publié. Y mettre autre chose # coupe l'accès à la base et l'application renvoie « Connexion à la base # impossible ». # ============================================================================ services: db: image: mariadb:11.4 container_name: pta-db-test restart: unless-stopped environment: MARIADB_DATABASE: ${DB_NAME:-pta} MARIADB_USER: ${DB_USER:-pta} MARIADB_PASSWORD: ${DB_PASSWORD:-pta} MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-pta} TZ: ${TZ:-Europe/Paris} command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: - mariadb_data_test:/var/lib/mysql # Ce fichier n'est exécuté QUE lors de l'initialisation d'un volume vide. - ./database/pta_prod_schema_mariadb.sql:/docker-entrypoint-initdb.d/01-pta-schema.sql:ro ports: # Base joignable depuis la machine hôte pour un client SQL externe, sur la # boucle locale uniquement. À l'intérieur du réseau Docker, les services # continuent de joindre MariaDB sur son port natif 3306. - "${DB_BIND:-127.0.0.1}:${DB_PORT_HOST:-9306}:3306" healthcheck: test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -uroot -p\"$${MARIADB_ROOT_PASSWORD}\" --silent"] interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - pta-test # Service jetable : applique les migrations SQL puis s'arrête. Le service php # ne démarre qu'après sa sortie en succès, si bien qu'une migration en échec # empêche l'application de tourner sur une base incomplète. db-migrate: image: mariadb:11.4 container_name: pta-db-migrate-test restart: "no" environment: DB_HOST: db # Port joint À L'INTÉRIEUR du réseau Docker : MariaDB y écoute sur 3306. # Le port publié sur l'hôte (9306) n'a pas cours ici. DB_PORT: 3306 DB_NAME: ${DB_NAME:-pta} # Les migrations créent tables et vues : elles passent par le compte # d'administration, jamais par le compte applicatif. DB_USER: root DB_PASSWORD: ${DB_ROOT_PASSWORD:-pta} TZ: ${TZ:-Europe/Paris} volumes: - ./database:/migrations:ro - ./docker/db/apply-migrations.sh:/usr/local/bin/apply-migrations.sh:ro entrypoint: ["/bin/sh", "/usr/local/bin/apply-migrations.sh"] depends_on: db: condition: service_healthy networks: - pta-test php: build: context: . dockerfile: Dockerfile target: php container_name: pta-php-test restart: unless-stopped environment: PTA_DB_HOST: db # Port joint À L'INTÉRIEUR du réseau Docker, où MariaDB écoute sur 3306. # Ce n'est pas le port publié sur l'hôte : pour joindre la base depuis la # machine, utiliser 127.0.0.1:9306, publié par le service db ci-dessus. PTA_DB_PORT: 3306 PTA_DB_NAME: ${DB_NAME:-pta} PTA_DB_USER: ${DB_USER:-pta} # Le défaut doit rester identique à MARIADB_PASSWORD du service db : # deux défauts différents rendent la pile inutilisable sans fichier .env. PTA_DB_PASS: ${DB_PASSWORD:-pta} # Aucun détail technique n'est renvoyé au navigateur tant que ce drapeau # n'est pas explicitement passé à 1. Ne jamais l'activer en production. PTA_DEBUG: ${PTA_DEBUG:-0} TZ: ${TZ:-Europe/Paris} depends_on: db: condition: service_healthy db-migrate: condition: service_completed_successfully networks: - pta-test nginx: build: context: . dockerfile: Dockerfile target: nginx container_name: pta-nginx-test restart: unless-stopped ports: - "${APP_BIND:-0.0.0.0}:${APP_PORT:-9080}:80" depends_on: - php networks: - pta-test phpmyadmin: image: phpmyadmin:5.2.2 container_name: pta-phpmyadmin-test restart: unless-stopped environment: PMA_HOST: db # Port interne au réseau Docker, jamais un port publié. PMA_PORT: 3306 # PMA_USER / PMA_PASSWORD sont volontairement absents : leur présence fait # basculer phpMyAdmin en auth_type=config, c'est-à-dire une session déjà # authentifiée pour quiconque atteint le port. Sans eux, phpMyAdmin exige # un identifiant et un mot de passe MariaDB à chaque connexion. UPLOAD_LIMIT: 64M TZ: ${TZ:-Europe/Paris} ports: # phpMyAdmin n'écoute que sur la boucle locale : il donne un accès complet # à la base. Pour y accéder à distance, passer par un tunnel SSH # (voir README_DOCKER.md), plutôt que d'ouvrir ce port sur le réseau. - "${PMA_BIND:-127.0.0.1}:${PMA_PORT:-9081}:80" depends_on: db: condition: service_healthy networks: - pta-test networks: pta-test: driver: bridge volumes: mariadb_data_test: