#!/bin/bash # Script d'installation automatique pour 4NK IA Backend # Usage: ./install.sh [dev|prod] set -e # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonction pour afficher les messages log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Vérification des prérequis check_prerequisites() { log_info "Vérification des prérequis..." # Vérifier Docker if ! command -v docker &> /dev/null; then log_error "Docker n'est pas installé. Veuillez l'installer d'abord." exit 1 fi # Vérifier Docker Compose if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then log_error "Docker Compose n'est pas installé. Veuillez l'installer d'abord." exit 1 fi # Vérifier Python 3 if ! command -v python3 &> /dev/null; then log_error "Python 3 n'est pas installé. Veuillez l'installer d'abord." exit 1 fi log_success "Tous les prérequis sont satisfaits" } # Installation des dépendances système install_system_dependencies() { log_info "Installation des dépendances système..." # Mise à jour des paquets apt-get update # Installation des dépendances essentielles apt-get install -y \ python3 \ python3-pip \ python3-venv \ python3-dev \ build-essential \ libmagic1 \ poppler-utils \ tesseract-ocr \ tesseract-ocr-fra \ libtesseract-dev \ libgl1-mesa-glx \ libglib2.0-0 \ libsm6 \ libxext6 \ libxrender-dev \ libgomp1 \ libgcc-s1 log_success "Dépendances système installées" } # Création de l'environnement virtuel Python setup_python_env() { log_info "Configuration de l'environnement Python..." # Création de l'environnement virtuel python3 -m venv venv # Activation de l'environnement virtuel source venv/bin/activate # Mise à jour de pip pip install --upgrade pip # Installation des dépendances Python pip install -r services/host_api/requirements.txt log_success "Environnement Python configuré" } # Configuration des variables d'environnement setup_environment() { log_info "Configuration des variables d'environnement..." # Création du fichier .env s'il n'existe pas if [ ! -f .env ]; then cat > .env << EOF # Configuration de base TZ=Europe/Paris PUID=1000 PGID=1000 # Base de données PostgreSQL POSTGRES_USER=notariat POSTGRES_PASSWORD=notariat_pwd POSTGRES_DB=notariat # Redis REDIS_URL=redis://redis:6379/0 # MinIO MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin123 MINIO_BUCKET=documents # Neo4j NEO4J_AUTH=neo4j/neo4j123 # OpenSearch OPENSEARCH_PASSWORD=admin123 # Services externes ANYLLM_BASE_URL=http://anythingsqlite:3001 ANYLLM_API_KEY=your_api_key_here OLLAMA_BASE_URL=http://ollama:11434 # API Configuration API_HOST=0.0.0.0 API_PORT=8000 API_WORKERS=4 # Logging LOG_LEVEL=INFO LOG_FORMAT=json # Security SECRET_KEY=your_secret_key_here ACCESS_TOKEN_EXPIRE_MINUTES=30 EOF log_success "Fichier .env créé avec les valeurs par défaut" else log_warning "Fichier .env existe déjà, pas de modification" fi } # Construction des images Docker build_docker_images() { log_info "Construction des images Docker..." # Construction de l'image host-api docker build -t 4nk-ia-backend:latest -f docker/host-api/Dockerfile . # Construction de l'image worker docker build -t 4nk-ia-worker:latest -f docker/worker/Dockerfile . log_success "Images Docker construites" } # Démarrage des services start_services() { local mode=${1:-dev} log_info "Démarrage des services en mode $mode..." if [ "$mode" = "prod" ]; then docker-compose -f infra/docker-compose.yml up -d else docker-compose -f docker-compose.dev.yml up -d fi log_success "Services démarrés" } # Vérification de la santé des services check_services_health() { log_info "Vérification de la santé des services..." # Attendre que les services soient prêts sleep 30 # Vérifier l'API if curl -f http://localhost:8000/api/health > /dev/null 2>&1; then log_success "API backend accessible" else log_warning "API backend non accessible" fi # Vérifier MinIO if curl -f http://localhost:9000/minio/health/live > /dev/null 2>&1; then log_success "MinIO accessible" else log_warning "MinIO non accessible" fi # Vérifier AnythingLLM if curl -f http://localhost:3001/api/health > /dev/null 2>&1; then log_success "AnythingLLM accessible" else log_warning "AnythingLLM non accessible" fi } # Affichage des informations de connexion show_connection_info() { log_info "Informations de connexion:" echo "" echo "🌐 Services Web:" echo " - API Backend: http://localhost:8000" echo " - API Documentation: http://localhost:8000/api-docs" echo " - MinIO Console: http://localhost:9001" echo " - AnythingLLM: http://localhost:3001" echo " - Grafana: http://localhost:3000" echo " - Neo4j Browser: http://localhost:7474" echo "" echo "🔧 Services de base de données:" echo " - PostgreSQL: localhost:5432" echo " - Redis: localhost:6379" echo " - OpenSearch: localhost:9200" echo "" echo "📚 Documentation:" echo " - README: ./README.md" echo " - Changelog: ./CHANGELOG.md" echo " - Contributing: ./CONTRIBUTING.md" echo "" } # Fonction principale main() { local mode=${1:-dev} echo "🚀 Installation de 4NK IA Backend" echo "Mode: $mode" echo "" check_prerequisites install_system_dependencies setup_python_env setup_environment build_docker_images start_services "$mode" check_services_health show_connection_info log_success "Installation terminée avec succès !" echo "" echo "Pour démarrer les services:" echo " ./start-stack.sh" echo "" echo "Pour arrêter les services:" echo " ./stop_notary_system.sh" echo "" } # Gestion des arguments case "${1:-}" in "dev"|"prod"|"") main "$1" ;; "help"|"-h"|"--help") echo "Usage: $0 [dev|prod]" echo "" echo "Options:" echo " dev - Installation en mode développement (défaut)" echo " prod - Installation en mode production" echo " help - Afficher cette aide" ;; *) log_error "Option invalide: $1" echo "Utilisez '$0 help' pour voir les options disponibles" exit 1 ;; esac