Démarrage de la pile par un simple docker compose up
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>
This commit is contained in:
@@ -1,7 +1,36 @@
|
||||
# ============================================================================
|
||||
# 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
|
||||
container_name: pta-db-test
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MARIADB_DATABASE: ${DB_NAME:-pta}
|
||||
@@ -13,9 +42,14 @@ services:
|
||||
- --character-set-server=utf8mb4
|
||||
- --collation-server=utf8mb4_unicode_ci
|
||||
volumes:
|
||||
- mariadb_data:/var/lib/mysql
|
||||
- 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
|
||||
@@ -23,21 +57,54 @@ services:
|
||||
retries: 10
|
||||
start_period: 20s
|
||||
networks:
|
||||
- pta
|
||||
- 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
|
||||
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}
|
||||
PTA_DB_PASS: ${DB_PASSWORD:-change_me}
|
||||
# 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}
|
||||
@@ -45,29 +112,32 @@ services:
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
db-migrate:
|
||||
condition: service_completed_successfully
|
||||
networks:
|
||||
- pta
|
||||
- pta-test
|
||||
|
||||
nginx:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: nginx
|
||||
container_name: pta-nginx
|
||||
container_name: pta-nginx-test
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${APP_BIND:-0.0.0.0}:${APP_PORT:-8080}:80"
|
||||
- "${APP_BIND:-0.0.0.0}:${APP_PORT:-9080}:80"
|
||||
depends_on:
|
||||
- php
|
||||
networks:
|
||||
- pta
|
||||
- pta-test
|
||||
|
||||
phpmyadmin:
|
||||
image: phpmyadmin:5.2.2
|
||||
container_name: pta-phpmyadmin
|
||||
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à
|
||||
@@ -76,18 +146,19 @@ services:
|
||||
UPLOAD_LIMIT: 64M
|
||||
TZ: ${TZ:-Europe/Paris}
|
||||
ports:
|
||||
# phpMyAdmin n'écoute que sur la boucle locale. Pour y accéder à distance,
|
||||
# passer par un tunnel SSH (voir README_DOCKER.md).
|
||||
- "${PMA_BIND:-127.0.0.1}:${PMA_PORT:-8081}:80"
|
||||
# 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
|
||||
- pta-test
|
||||
|
||||
networks:
|
||||
pta:
|
||||
pta-test:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
mariadb_data:
|
||||
mariadb_data_test:
|
||||
|
||||
Reference in New Issue
Block a user