- Script audit-production.sh pour audit complet - Script sync-from-production.sh pour synchronisation facile - Guide WORKFLOW.md pour processus de modification - README pour le dossier scripts - Documentation complète du workflow Git
195 lines
11 KiB
Bash
Executable File
195 lines
11 KiB
Bash
Executable File
#!/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 "═════════════════════════════════════════════════════════════"
|