#!/bin/bash # ============================================================================ # Correction permissions UID après bascule postgres:16-alpine -> postgis/postgis:16-3.5 # Le conteneur boucle en restart : "could not open log file ... Permission denied" # Cause : changement d'UID de l'utilisateur postgres entre l'image Alpine (musl) # et l'image Debian (glibc) sous-jacente à postgis/postgis. # ============================================================================ set -euo pipefail echo "==> 1. Identifier l'UID/GID postgres DANS la nouvelle image" # On lance un conteneur jetable avec la même image pour lire son UID interne, # sans dépendre du conteneur en échec qui boucle en restart. NEW_UID=$(docker run --rm postgis/postgis:16-3.5 id -u postgres) NEW_GID=$(docker run --rm postgis/postgis:16-3.5 id -g postgres) echo " UID postgres (nouvelle image) : $NEW_UID" echo " GID postgres (nouvelle image) : $NEW_GID" echo "==> 2. Stopper le conteneur qui boucle en restart" cd /root/wordpress docker compose stop postgres echo "==> 3. Corriger les permissions sur les volumes concernés" # pg-logs-std : cause de l'échec actuel # pg-conf-std : même cause potentielle, à corriger par précaution # postgres_data : à corriger aussi -- sinon le prochain démarrage échouera # différemment une fois le problème de logs résolu (même cause, autre symptôme) # Volumes Docker "local" sont physiquement sous /var/lib/docker/volumes//_data # On passe par un conteneur utilitaire pour ne pas dépendre du chemin hôte exact # (peut varier si docker tourne en snap, comme mentionné dans l'architecture v4) docker run --rm \ -v pg-logs-std:/var/log/postgresql \ -v pg-conf-std:/etc/postgresql \ -v postgres_data:/var/lib/postgresql/data \ postgis/postgis:16-3.5 \ chown -R "${NEW_UID}:${NEW_GID}" \ /var/log/postgresql \ /etc/postgresql \ /var/lib/postgresql/data echo "==> 4. Vérification des permissions appliquées" docker run --rm \ -v pg-logs-std:/var/log/postgresql \ -v pg-conf-std:/etc/postgresql \ -v postgres_data:/var/lib/postgresql/data \ postgis/postgis:16-3.5 \ bash -c "ls -la /var/log/postgresql | head -5; echo '---'; ls -la /etc/postgresql | head -5; echo '---'; ls -la /var/lib/postgresql/data | head -5" echo "==> 5. Redémarrage du conteneur postgres" docker compose up -d postgres echo "==> 6. Attente du démarrage" for i in $(seq 1 30); do if docker exec wordpress-postgres pg_isready -U pgz_admin -d wpz_postgres > /dev/null 2>&1; then echo " PostgreSQL prêt après ${i}s" break fi if [ "$i" -eq 30 ]; then echo " ÉCHEC : PostgreSQL toujours pas prêt après 30s" echo " Vérifier : docker logs wordpress-postgres --tail 50" exit 1 fi sleep 1 done echo "==> 7. Vérification des données" docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \ "SELECT count(*) AS partitions FROM pg_inherits WHERE inhparent = 'adsb.positions'::regclass;" docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \ "SELECT count(*) AS receivers FROM adsb.receivers;" echo "" echo "Si les comptes ci-dessus correspondent à avant (185 partitions, 1 receiver)," echo "les données sont intactes. On peut alors activer PostGIS :" echo " docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \"CREATE EXTENSION IF NOT EXISTS postgis;\"" echo "Puis redémarrer adsb2pg et webapp :" echo " cd /data/adsb && docker compose start adsb2pg webapp"