#!/bin/bash # ═══════════════════════════════════════════════════════════ # EFFI - Script d'audit de la production # Usage: ./audit-production.sh # Ce script génère un rapport complet de l'état actuel # ═══════════════════════════════════════════════════════════ set -e # Couleurs pour la lisibilité RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "═════════════════════════════════════════════════════════════" echo " 🔍 AUDIT EFFI - Production Server" echo " Date: $(date)" echo " Host: $(hostname)" echo "═════════════════════════════════════════════════════════════" echo "" # Vérifier qu'on est dans le bon dossier if [ ! -f "docker-compose.yml" ]; then echo -e "${RED}❌ Erreur: docker-compose.yml non trouvé${NC}" echo "Lancez ce script depuis le dossier ~/effi" exit 1 fi echo -e "${GREEN}✓ Dossier effi détecté${NC}" echo "" # ═══════════════════════════════════════════════════════════ # 1. ÉTAT DES CONTENEURS # ═══════════════════════════════════════════════════════════ echo "📦 CONTENEURS DOCKER" echo "─────────────────────────────────────────────────────────────" docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null || echo "Aucun conteneur en cours d'exécution" echo "" # ═══════════════════════════════════════════════════════════ # 2. IMAGES UTILISÉES # ═══════════════════════════════════════════════════════════ echo "🐳 IMAGES DOCKER" echo "─────────────────────────────────────────────────────────────" docker compose images 2>/dev/null || echo "Aucune image" echo "" # ═══════════════════════════════════════════════════════════ # 3. STRUCTURE DES FICHIERS # ═══════════════════════════════════════════════════════════ echo "📁 STRUCTURE DES FICHIERS" echo "─────────────────────────────────────────────────────────────" ls -la | grep -E "^-|^d" | grep -v "^d.*\.git" | awk '{print $9, "(" $5 " bytes)"}' echo "" # ═══════════════════════════════════════════════════════════ # 4. VARIABLES D'ENVIRONNEMENT (anonymisées) # ═══════════════════════════════════════════════════════════ echo "⚙️ VARIABLES D'ENVIRONNEMENT" echo "─────────────────────────────────────────────────────────────" if [ -f ".env" ]; then echo "Fichier .env présent" echo "Variables définies:" grep -E "^[A-Z].*=" .env | cut -d= -f1 | sed 's/^/ - /' echo "" echo "⚠️ Pour la sécurité, les valeurs sont masquées" else echo -e "${RED}❌ Fichier .env manquant!${NC}" fi echo "" # ═══════════════════════════════════════════════════════════ # 5. VOLUMES ET STOCKAGE # ═══════════════════════════════════════════════════════════ echo "💾 VOLUMES ET STOCKAGE" echo "─────────────────────────────────────────────────────────────" echo "Dossiers de données:" du -sh *-data 2>/dev/null || echo " Aucun dossier *-data trouvé" du -sh *-storage 2>/dev/null || echo " Aucun dossier *-storage trouvé" echo "" echo "Utilisation disque:" df -h . | tail -1 echo "" # ═══════════════════════════════════════════════════════════ # 6. PORTS EN ÉCOUTE # ═══════════════════════════════════════════════════════════ echo "🌐 PORTS EN ÉCOUTE" echo "─────────────────────────────────────────────────────────────" sudo ss -tlnp | grep -E "3000|3011|3100|5678|5984|6333|8000|8100|8200|9099|11434" || echo "Aucun port Effi détecté" echo "" # ═══════════════════════════════════════════════════════════ # 7. DIFFÉRENCES AVEC LE DÉPÔT GIT (si présent) # ═══════════════════════════════════════════════════════════ if [ -d ".git" ]; then echo "📝 ÉTAT GIT" echo "─────────────────────────────────────────────────────────────" echo "Branche actuelle: $(git branch --show-current 2>/dev/null || echo 'N/A')" echo "Dernier commit: $(git log -1 --pretty=format:'%h - %s (%ar)' 2>/dev/null || echo 'N/A')" # Vérifier s'il y a des modifications non commitées if ! git diff --quiet HEAD 2>/dev/null; then echo "" echo -e "${YELLOW}⚠️ Modifications non commitées détectées:${NC}" git status --short else echo -e "${GREEN}✓ Pas de modifications locales${NC}" fi # Vérifier si on est synchronisé avec le remote if git remote get-url origin >/dev/null 2>&1; then git fetch origin --quiet 2>/dev/null || true LOCAL=$(git rev-parse @ 2>/dev/null || echo "0") REMOTE=$(git rev-parse @{u} 2>/dev/null || echo "0") if [ "$LOCAL" != "$REMOTE" ] && [ "$REMOTE" != "0" ]; then echo "" echo -e "${YELLOW}⚠️ Le dépôt local et Gitea sont désynchronisés${NC}" echo "Commits à pousser:" git log --oneline @{u}.. 2>/dev/null || echo " N/A" fi fi else echo "📝 ÉTAT GIT" echo "─────────────────────────────────────────────────────────────" echo -e "${YELLOW}⚠️ Pas de dépôt Git initialisé${NC}" fi echo "" # ═══════════════════════════════════════════════════════════ # 8. SERVICES EXTERNES (vérification de connectivité) # ═══════════════════════════════════════════════════════════ echo "🔗 CONNECTIVITÉ SERVICES EXTERNES" echo "─────────────────────────────────────────────────────────────" # Vérifier Ollama if curl -s http://192.168.1.11:11434/api/tags >/dev/null 2>&1; then echo -e "${GREEN}✓ Ollama (192.168.1.11:11434) accessible${NC}" else echo -e "${YELLOW}⚠️ Ollama (192.168.1.11:11434) inaccessible${NC}" fi # Vérifier speaches if curl -s http://192.168.1.11:8200/v1/models >/dev/null 2>&1; then echo -e "${GREEN}✓ Speaches STT (192.168.1.11:8200) accessible${NC}" else echo -e "${YELLOW}⚠️ Speaches STT (192.168.1.11:8200) inaccessible${NC}" fi # Vérifier openedai-speech if curl -s http://192.168.1.11:8100/v1/models >/dev/null 2>&1; then echo -e "${GREEN}✓ OpenedAI TTS (192.168.1.11:8100) accessible${NC}" else echo -e "${YELLOW}⚠️ OpenedAI TTS (192.168.1.11:8100) inaccessible${NC}" fi echo "" # ═══════════════════════════════════════════════════════════ # 9. RECOMMANDATIONS # ═══════════════════════════════════════════════════════════ echo "💡 RECOMMANDATIONS" echo "─────────────────────────────────────────────────────────────" # Vérifier si le .env.example est à jour if [ -f ".env.example" ]; then ENV_VARS=$(grep -E "^[A-Z].*=" .env 2>/dev/null | cut -d= -f1 | sort) EXAMPLE_VARS=$(grep -E "^[A-Z].*=" .env.example 2>/dev/null | cut -d= -f1 | sort) if [ "$ENV_VARS" != "$EXAMPLE_VARS" ]; then echo -e "${YELLOW}⚠️ Le fichier .env.example n'est pas synchronisé avec .env${NC}" echo " Variables manquantes dans .env.example:" comm -23 <(echo "$ENV_VARS") <(echo "$EXAMPLE_VARS") | sed 's/^/ - /' else echo -e "${GREEN}✓ .env.example est à jour${NC}" fi else echo -e "${YELLOW}⚠️ Fichier .env.example manquant${NC}" echo " Créez-le avec: cp .env .env.example && éditez pour masquer les valeurs" fi # Vérifier les backups if [ -d "../Effi-BACKUP*" ]; then echo -e "${GREEN}✓ Des sauvegardes locales existent${NC}" else echo -e "${YELLOW}⚠️ Aucune sauvegarde locale détectée${NC}" echo " Créez une sauvegarde avec: cd .. && cp -r Effi Effi-BACKUP-$(date +%Y%m%d)" fi echo "" echo "═════════════════════════════════════════════════════════════" echo " Audit terminé!" echo "═════════════════════════════════════════════════════════════"