#!/usr/bin/env bash # # Hook d'initialisation exécuté par l'entrypoint officiel de l'image # nginx:stable-alpine, AVANT le script de templating envsubst (20-envsubst-on-templates.sh). # # Responsabilités : # 1. Valider les variables d'environnement obligatoires (MAINTENANCE_MODE, # MAINTENANCE_IP_LIST, UPSTREAM_HOST). Sortie 1 si invalide. # 2. Appliquer les valeurs par défaut documentées (LISTEN_PORT=8080, SERVER_NAME=_). # 3. Générer le snippet geo $ip_in_list via build-ip-list.sh. # # Le templating envsubst et le `nginx -t` final sont gérés par les scripts # officiels qui s'exécutent ensuite. set -euo pipefail log() { echo "[init] $*" >&2; } fail() { echo "[init] ERROR: $*" >&2; exit 1; } # --- 1. Validation des variables obligatoires --------------------------------- : "${MAINTENANCE_MODE:=}" : "${MAINTENANCE_IP_LIST:=}" : "${UPSTREAM_HOST:=}" case "$MAINTENANCE_MODE" in whitelist|blacklist) ;; "") fail "MAINTENANCE_MODE est requis (valeurs : 'whitelist' ou 'blacklist')." ;; *) fail "MAINTENANCE_MODE='$MAINTENANCE_MODE' invalide (attendu : 'whitelist' ou 'blacklist')." ;; esac if [[ -z "$MAINTENANCE_IP_LIST" ]]; then fail "MAINTENANCE_IP_LIST est requis (liste d'IPv4 séparées par des virgules)." fi if [[ -z "$UPSTREAM_HOST" ]]; then fail "UPSTREAM_HOST est requis (ex: '127.0.0.1:3000')." fi # Sanity check léger sur UPSTREAM_HOST : doit contenir un ':' (host:port). if [[ "$UPSTREAM_HOST" != *:* ]]; then fail "UPSTREAM_HOST='$UPSTREAM_HOST' doit être au format 'host:port'." fi # --- 2. Valeurs par défaut --------------------------------------------------- export LISTEN_PORT="${LISTEN_PORT:-8080}" export SERVER_NAME="${SERVER_NAME:-_}" export MAINTENANCE_MODE export UPSTREAM_HOST # --- 3. Génération du snippet geo -------------------------------------------- snippets_dir="/etc/nginx/snippets" mkdir -p "$snippets_dir" # Chemin fixé par le Dockerfile (COPY ... /usr/local/bin/build-ip-list.sh). # Surchargable via $BUILD_IP_LIST_SCRIPT pour le développement local hors conteneur. build_script="${BUILD_IP_LIST_SCRIPT:-/usr/local/bin/build-ip-list.sh}" if [[ ! -x "$build_script" ]]; then fail "Script attendu introuvable ou non exécutable : $build_script" fi "$build_script" "$snippets_dir/_generated_geo.conf" log "Initialisation OK (mode=$MAINTENANCE_MODE, listen=$LISTEN_PORT, upstream=$UPSTREAM_HOST)."