
- Création du répertoire scripts/ avec tous les scripts d'installation et de test - Scripts d'installation automatique (install.sh, quick-start.sh) - Scripts de maintenance complète (maintenance.sh) - Scripts de test (test-installation.sh, test-api.sh, test-services.sh, test-integration.sh) - Amélioration du Dockerfile avec healthchecks et sécurité - Mise à jour du docker-compose.yml avec healthchecks et dépendances - Makefile étendu avec nouvelles commandes - Documentation complète mise à jour - Fichier de configuration d'exemple (env.example) - app.py corrigé et fonctionnel
287 lines
6.8 KiB
Bash
Executable File
287 lines
6.8 KiB
Bash
Executable File
#!/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
|