#!/usr/bin/env bash # ============================================================================= # provision-analysis.sh — Provisionnement de la VM analysis (ClickHouse + bot-detector + dashboard) # # Installe uniquement Docker et les prérequis pour la stack d'analyse. # Pas de toolchain eBPF, Go, ni serveurs web (uniquement sur les endpoints). # ============================================================================= set -euo pipefail log() { echo "[provision] $(date +%H:%M:%S) $*"; } # ── 1. Mise à jour système + dépôts ────────────────────────────────────────── log "Mise à jour des dépôts..." dnf install -y epel-release dnf-plugins-core dnf config-manager --enable crb dnf update -y --quiet # ── 2. Docker + docker-compose ─────────────────────────────────────────────── log "Installation de Docker..." dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Sur kernel 6.12+ (el10+), nf_tables incompatibilité avec iptables-nft if ! systemctl start docker 2>/dev/null; then log "Docker: fallback iptables=false pour kernel $(uname -r)" mkdir -p /etc/docker echo '{"iptables": false}' > /etc/docker/daemon.json fi systemctl enable --now docker usermod -aG docker vagrant chmod 666 /var/run/docker.sock || true # ── 3. Firewall — ouvrir les ports d'analyse ────────────────────────────────── log "Configuration firewall..." firewall-cmd --add-port=9000/tcp --permanent 2>/dev/null || true # ClickHouse native firewall-cmd --add-port=8123/tcp --permanent 2>/dev/null || true # ClickHouse HTTP firewall-cmd --add-port=8080/tcp --permanent 2>/dev/null || true # bot-detector health firewall-cmd --add-port=8000/tcp --permanent 2>/dev/null || true # dashboard firewall-cmd --reload 2>/dev/null || true # ── 4. Swap (sécurité pour le build Docker des images ML) ──────────────────── log "Configuration swap 4G..." if [ ! -f /swapfile ]; then dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab fi # ── 5. Outils utilitaires ───────────────────────────────────────────────────── log "Installation outils..." dnf install -y curl python3 python3-pip # ── 6. Répertoire de travail ────────────────────────────────────────────────── # Le projet est rsync par Vagrant (config vm.synced_folder dans Vagrantfile) log "Provisionnement analysis terminé !" log "Lancer 'make test-e2e' depuis le host pour démarrer le test distribué."