#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" TS="$(date +%Y%m%d_%H%M%S)" BK_DIR="$ROOT_DIR/backups/$TS" mkdir -p "$BK_DIR" # 1) Backup configurations actives Nginx mkdir -p "$BK_DIR/nginx_conf" if [[ -d "$ROOT_DIR/lecoffre_node/conf/nginx" ]]; then cp -a "$ROOT_DIR/lecoffre_node/conf/nginx"/*.conf "$BK_DIR/nginx_conf/" 2>/dev/null || true # Inclure éventuels assets utiles if [[ -d "$ROOT_DIR/lecoffre_node/conf/nginx/assets" ]]; then mkdir -p "$BK_DIR/nginx_conf/assets" && cp -a "$ROOT_DIR/lecoffre_node/conf/nginx/assets"/* "$BK_DIR/nginx_conf/assets/" 2>/dev/null || true fi fi # 2) Backup .env.master centralisé if [[ -f "$ROOT_DIR/.env.master" ]]; then cp -a "$ROOT_DIR/.env.master" "$BK_DIR/.env.master" fi # 3) Ports ouverts et services associés { echo "# ss -tulpn" (ss -tulpn || netstat -tulpn) 2>/dev/null || true echo echo "# docker compose ps (lecoffre_node)" (cd "$ROOT_DIR/lecoffre_node" && docker compose ps) || true echo echo "# docker ps --format" docker ps --format '{{.ID}} {{.Names}} {{.Ports}}' || true } > "$BK_DIR/ports_and_services.txt" # 4) Redirections Nginx et applicatives (synthèse) NGINX_MAIN="$ROOT_DIR/lecoffre_node/conf/nginx/dev4.4nkweb.com-https.conf" if [[ -f "$NGINX_MAIN" ]]; then { echo "# Nginx proxy_pass and locations" awk '/location /{loc=$0} /proxy_pass/{print loc"\n "$0"\n"}' "$NGINX_MAIN" || true echo echo "# Explicit redirects (return 301/302)" grep -nE '\breturn\s+30[12]\b' "$NGINX_MAIN" || true } > "$BK_DIR/nginx_redirects_summary.txt" fi # 5) Liste des services lancés via lecoffre_node/docker-compose.yml { echo "# docker compose ls (context lecoffre_node)" (cd "$ROOT_DIR/lecoffre_node" && docker compose ls) || true echo echo "# docker compose ps --services (running)" (cd "$ROOT_DIR/lecoffre_node" && docker compose ps --services --filter status=running) || true } > "$BK_DIR/compose_services.txt" # 6) Sauvegarde du dossier data if [[ -d "$ROOT_DIR/data" ]]; then mkdir -p "$BK_DIR/data" cp -a "$ROOT_DIR/data"/* "$BK_DIR/data/" 2>/dev/null || true fi # 7) Ne garder que 2 historiques cd "$ROOT_DIR/backups" ls -1dt 20* 2>/dev/null | tail -n +3 | xargs -r rm -rf # 8) Vérifier ignores ensure_ignore() { local file="$1"; shift local pattern [[ -f "$file" ]] || return 0 for pattern in "$@"; do if ! grep -qxF "$pattern" "$file" 2>/dev/null; then echo "$pattern" >> "$file" fi done } ensure_ignore "$ROOT_DIR/.gitignore" \ "/home/debian/4NK_env/logs/" \ "/home/debian/4NK_env/backups/" \ "logs/" "backups/" ensure_ignore "$ROOT_DIR/.cursorignore" \ "/home/debian/4NK_env/logs/" \ "/home/debian/4NK_env/backups/" \ "logs/" "backups/" ensure_ignore "$ROOT_DIR/.dockerignore" \ "/home/debian/4NK_env/logs/" \ "/home/debian/4NK_env/backups/" \ "logs/" "backups/" echo "$BK_DIR" > "$ROOT_DIR/backups/LAST_BACKUP" ln -sfn "$BK_DIR" "$ROOT_DIR/backups/latest" echo "[OK] Backup written in $BK_DIR"