67 lines
2.4 KiB
Bash
67 lines
2.4 KiB
Bash
|
|
#!/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)."
|