diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..d2aa81e --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Aligne la propriété du répertoire de données avant de lâcher les privilèges. +# +# /app/data est un bind mount : le `chown` fait au build ne sert à rien, il est +# masqué dès que Docker monte le répertoire de l'hôte par-dessus. Or Docker crée +# ce répertoire en root:root quand il n'existe pas, et le serveur tourne sous +# l'utilisateur `node` — SQLite échoue alors avec « unable to open database file ». + +set -e + +if [ "$(id -u)" = "0" ]; then + mkdir -p /app/data + + # Uniquement si nécessaire : sur un volume nommé la propriété est déjà bonne, + # et un chown -R inutile ferait du bruit à chaque démarrage. + if [ "$(stat -c %u /app/data)" != "$(id -u node)" ]; then + echo "entrypoint: alignement de /app/data sur l'utilisateur node" + chown -R node:node /app/data + fi + + exec su-exec node "$@" +fi + +# Un `user:` explicite dans le compose court-circuite la bascule : on exécute tel quel. +exec "$@"