# TODO Faire une copie de ce script dans un répertoire de l'application web # (dans le répertoire _cli/ par défaut) et modifier les paramétres si nécessaire #------------------------------------------------------------------------------- #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # S'assurer que le script PHP est lancé avec l'utilisateur www-data # Tous les chemins suivants sont relatifs au répertoire qui contient ce script # Chemin relatif de la racine du projet PROJPATH=.. # Chemin relatif vers le lanceur PHP 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/PROJNAME .:/var/www/app ) ############################################################################### case "${RUNPHP_MODE:-auto}" in auto) RUNPHP_MODE= [ -f /.dockerenv ] && RUNPHP_MODE=docker [ -z "$RUNPHP_MODE" -a -f /proc/self/mountinfo ] && grep -q ' /docker/' /proc/self/mountinfo && RUNPHP_MODE=docker [ -z "$RUNPHP_MODE" -a -f /proc/1/cgroup ] && grep -q ':/docker/' /proc/1/cgroup && RUNPHP_MODE=docker [ -n "$RUNPHP_MODE" ] || RUNPHP_MODE=host ;; 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" if [ "$RUNPHP_MODE" == host ]; then echo "\ ---------------------------------------- Vérification des liens..." cd "$MYDIR" for i in *.php*; do [ -f "$i" ] || continue name="bin/${i%.*}.php" dest="../_cli/_wrapper.sh" link="../bin/${i%.*}.php" if [ -L "$link" ]; then echo "* $name OK" elif [ -e "$link" ]; then echo "* $name KO (not a link)" else echo "* $name NEW" 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 projname="$(basename "$PROJDIR")"; projname="${projname%-app}" cwd="$(pwd)" found= workdir= for mounts in "${COMPOSE_MOUNTS[@]}"; do hdir="${mounts%%:*}" hdir="$(cd "$PROJDIR/$hdir"; pwd)" ddir="${mounts#*:}" ddir="${ddir/PROJNAME/$projname}" 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" [ -f /g/init.env ] && source /g/init.env www_data="${DEVUSER_USERENT%%:*}" [ -n "$www_data" ] || www_data=www-data cmd=(php "$launcher") [ -n "$MEMPROF_PROFILE" ] && cmd+=(-dextension=memprof.so) if [ -f "$class" ]; then cmd+=("$(<"$class")") else cmd+=("$script") fi cmd+=("$@") if [ "$(id -u)" -eq 0 ]; then su-exec "$www_data" "${cmd[@]}" else exec "${cmd[@]}" fi