#!/usr/bin/env bash # ============================================================================= # Entrypoint — stack nginx + ja4ebpf # Ordre : nginx → ja4ebpf (uprobes sur nginx/libssl) # ============================================================================= set -eo pipefail log() { echo "[entrypoint:nginx] $(date +%H:%M:%S) $*"; } NGINX_PID="" JA4EBPF_PID="" cleanup() { log "Arrêt des processus…" [ -n "$JA4EBPF_PID" ] && kill "$JA4EBPF_PID" 2>/dev/null || true [ -n "$NGINX_PID" ] && kill "$NGINX_PID" 2>/dev/null || true wait 2>/dev/null || true } trap cleanup EXIT SIGTERM SIGINT # ── 1. Démarrage de nginx ───────────────────────────────────────────────── log "Démarrage de nginx…" nginx NGINX_PID=$(cat /run/nginx/nginx.pid 2>/dev/null || pgrep nginx | head -1) # Attendre que nginx soit opérationnel for i in $(seq 1 20); do if curl -sf http://localhost/health >/dev/null 2>&1; then log "nginx opérationnel (PID $NGINX_PID)" break fi sleep 0.5 done # ── 2. Démarrage de ja4ebpf ─────────────────────────────────────────────── log "Démarrage de ja4ebpf (attache uprobes sur libssl)…" ja4ebpf -config /etc/ja4ebpf/config.yml & JA4EBPF_PID=$! log "Stack démarrée — nginx PID=$NGINX_PID ja4ebpf PID=$JA4EBPF_PID" # ── 3. Supervision ──────────────────────────────────────────────────────── # nginx fonctionne en daemon : surveiller le process master via le PID file. # ja4ebpf tourne en foreground. while true; do # Vérifier que nginx est toujours en vie if ! kill -0 "$NGINX_PID" 2>/dev/null; then NGINX_PID=$(cat /run/nginx/nginx.pid 2>/dev/null || echo "") if [ -z "$NGINX_PID" ] || ! kill -0 "$NGINX_PID" 2>/dev/null; then log "nginx s'est arrêté — fin de l'entrypoint" break fi fi # Vérifier que ja4ebpf est toujours en vie if ! kill -0 "$JA4EBPF_PID" 2>/dev/null; then log "ja4ebpf s'est arrêté (code: $?) — fin de l'entrypoint" break fi sleep 2 done