support lancement dans container

This commit is contained in:
Jephté Clain 2024-10-12 08:53:13 +04:00
parent a03de2a099
commit b42f558e81
1 changed files with 84 additions and 17 deletions

View File

@ -15,17 +15,47 @@ LAUNCHERPATH=.launcher.php
# Chemin relatif des scripts PHP wrappés
WRAPPEDPATH=
# Nom du service dans docker-compose.yml
COMPOSE_SERVICE=web
# Montages dans docker-compose.yml
# les répertoires relatifs le sont par rapport au répertoire du projet
COMPOSE_MOUNTS=(
devel:/data/php74-template
.:/var/www/app
)
###############################################################################
case "${RUNPHP_MODE:-auto}" in
auto)
RUNPHP_MODE=host
if [ -f /.dockerenv ]; then
RUNPHP_MODE=docker
elif [ -f /proc/1/cgroup ]; then
grep -q ':/docker/' /proc/1/cgroup && RUNPHP_MODE=docker
elif [ -f /proc/self/mountinfo ]; then
grep -q ' /docker/' /proc/self/mountinfo && RUNPHP_MODE=docker
fi
;;
docker) RUNPHP_MODE=docker;;
host) RUNPHP_MODE=host;;
direct) RUNPHP_MODE=direct;;
*) RUNPHP_MODE=host;;
esac
MYDIR="$(dirname -- "$0")"
MYNAME="$(basename -- "$0")"
if [ ! -L "$0" ]; then
echo "\
$0
Ce script doit être lancé en tant que lien symbolique avec un nom de la forme
'monscript.php' et lance le script PHP du même nom situé dans le même répertoire
avec l'utilisateur www-data
avec l'utilisateur www-data"
if [ "$RUNPHP_MODE" == host ]; then
echo "\
----------------------------------------
Vérification des liens..."
cd "$MYDIR"
for i in *.php*; do
@ -42,12 +72,49 @@ Vérification des liens..."
ln -s "$dest" "$link" || exit 1
fi
done
fi
exit 0
fi
MYTRUESELF="$(readlink -f "$0")"
MYTRUEDIR="$(dirname -- "$MYTRUESELF")"
PROJDIR="$(cd "$MYTRUEDIR${PROJPATH:+/$PROJPATH}"; pwd)"
if [ "$RUNPHP_MODE" == host ]; then
cwd="$(pwd)"
found=
workdir=
for mounts in "${COMPOSE_MOUNTS[@]}"; do
hdir="${mounts%%:*}"
ddir="${mounts#*:}"
hdir="$(cd "$PROJDIR/$hdir"; pwd)"
if [ "$cwd" == "$hdir" ]; then
found=1
workdir="$ddir"
break
elif [ "${cwd#$hdir/}" != "$cwd" ]; then
found=1
workdir="$ddir/${cwd#$hdir/}"
break
fi
done
if [ -z "$found" ]; then
echo "Impossible de mapper le répertoire courant avec les montages du container"
exit 1
fi
args=(
docker compose run
${RUNPHP_BUILD:+--build}
--rm
--workdir "$workdir"
"$COMPOSE_SERVICE"
exec "$MYNAME"
"$@"
)
cd "$PROJDIR"
exec "${args[@]}"
fi
launcher="$MYTRUEDIR/$LAUNCHERPATH"
class="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.phpc"
script="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.php"