La pile de test de la branche ne démarrait pas : « Connexion à la base impossible ». Trois causes cumulées, toutes corrigées. 1. PTA_DB_PORT et DB_PORT étaient passés à 9306. Ces variables désignent le port joint À L'INTÉRIEUR du réseau Docker, où MariaDB écoute sur 3306, et non un port publié sur l'hôte : la connexion était refusée. Elles reviennent à 3306, et le port hôte 9306 est désormais réellement publié par le service db (sur la boucle locale), pour un client SQL externe. 2. Le service db-migrate manquait sur la branche. Le schéma d'initialisation ne contient aucune des tables et vues d'accès V7.8 : sur un volume neuf, l'application refusait de démarrer. db-migrate applique maintenant tous les database/migration_*.sql, dont celle du tableau de bord V7.9 — plus aucune étape SQL manuelle. 3. Le défaut de PTA_DB_PASS (change_me) différait de celui de MARIADB_PASSWORD (pta). Sans fichier .env — et ce répertoire n'en a pas, il est ignoré par git — l'authentification échouait. Les deux défauts sont alignés. Le bandeau du tableau de bord ne prétend plus que « tous les lieux ont des horaires attendus » quand aucun lieu n'est enregistré. Vérifié : volume détruit puis « docker compose up -d --build » seul suffit à obtenir les onze pages en 200, l'atterrissage sur le tableau de bord et les deux migrations appliquées ; un second up les ignore ; la base répond sur 127.0.0.1:9306 ; la pile principale sur 8080 est restée intacte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
165 lines
6.2 KiB
YAML
165 lines
6.2 KiB
YAML
# ============================================================================
|
|
# 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:
|