Merges the full git history of Inventory_frontend into the monorepo under frontend/. Removes the submodule in favor of a unified repo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
290 lines
8.2 KiB
Bash
290 lines
8.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Script de déploiement automatique pour Inventory V2
|
|
# Usage: ./deploy.sh [backend|frontend|all]
|
|
|
|
set -e # Arrêter en cas d'erreur
|
|
|
|
# Configuration
|
|
PROJECT_DIR="/home/matt/inventory_v2"
|
|
BACKEND_DIR="$PROJECT_DIR/inventory_backend"
|
|
FRONTEND_DIR="$PROJECT_DIR/inventory_frontend"
|
|
LOG_FILE="/tmp/deploy.log"
|
|
|
|
# Couleurs pour les logs
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Fonction de logging
|
|
log() {
|
|
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
# Fonction pour déployer le backend
|
|
deploy_backend() {
|
|
log "Déploiement du backend..."
|
|
|
|
# Sauvegarde automatique de la base de données avant modification
|
|
log "Sauvegarde automatique de la base de données..."
|
|
if command -v pg_dump &> /dev/null; then
|
|
BACKUP_DIR="/home/matt/backups"
|
|
DATE=$(date +"%Y%m%d_%H%M%S")
|
|
BACKUP_FILE="auto_backup_$DATE.sql"
|
|
|
|
# Créer le répertoire de sauvegarde
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Sauvegarde de la base de données
|
|
if pg_dump -h localhost -U inventory_user -d inventory_db > "$BACKUP_DIR/$BACKUP_FILE" 2>/dev/null; then
|
|
# Compresser la sauvegarde
|
|
gzip "$BACKUP_DIR/$BACKUP_FILE"
|
|
log_success "Sauvegarde automatique créée: $BACKUP_DIR/$BACKUP_FILE.gz"
|
|
|
|
# Garder seulement les 10 dernières sauvegardes automatiques
|
|
cd "$BACKUP_DIR"
|
|
ls -t auto_backup_*.sql.gz | tail -n +11 | xargs -r rm
|
|
else
|
|
log_warning "Impossible de créer la sauvegarde automatique (base de données non accessible)"
|
|
fi
|
|
else
|
|
log_warning "pg_dump non trouvé, sauvegarde automatique impossible"
|
|
fi
|
|
|
|
cd "$BACKEND_DIR"
|
|
|
|
# Sauvegarder les modifications locales si nécessaire
|
|
if ! git diff-index --quiet HEAD --; then
|
|
log_warning "Modifications locales détectées, sauvegarde..."
|
|
git stash push -m "Auto-sauvegarde avant déploiement $(date)"
|
|
fi
|
|
|
|
# Pull les dernières modifications
|
|
log "Récupération des dernières modifications..."
|
|
git pull origin master
|
|
|
|
# Installer les dépendances si nécessaire
|
|
if [ ! -d "node_modules" ] || [ "package.json" -nt "node_modules" ]; then
|
|
log "Installation des dépendances..."
|
|
npm install
|
|
fi
|
|
|
|
# Build du projet
|
|
log "Compilation du projet..."
|
|
npm run build
|
|
|
|
# Appliquer les migrations Prisma si nécessaire
|
|
log "Vérification et application des migrations Prisma..."
|
|
npx prisma migrate deploy
|
|
|
|
# Générer le client Prisma
|
|
log "Génération du client Prisma..."
|
|
npx prisma generate
|
|
|
|
# Redémarrer le service backend
|
|
log "Redémarrage du service backend..."
|
|
if systemctl is-active --quiet inventory-backend; then
|
|
sudo systemctl restart inventory-backend
|
|
log_success "Service backend redémarré"
|
|
else
|
|
log_warning "Service backend non trouvé, démarrage manuel requis"
|
|
fi
|
|
|
|
log_success "Backend déployé avec succès"
|
|
}
|
|
|
|
# Fonction pour déployer le frontend
|
|
deploy_frontend() {
|
|
log "Déploiement du frontend..."
|
|
|
|
cd "$FRONTEND_DIR"
|
|
|
|
# Sauvegarder les modifications locales si nécessaire
|
|
if ! git diff-index --quiet HEAD --; then
|
|
log_warning "Modifications locales détectées, sauvegarde..."
|
|
git stash push -m "Auto-sauvegarde avant déploiement $(date)"
|
|
fi
|
|
|
|
# Pull les dernières modifications
|
|
log "Récupération des dernières modifications..."
|
|
git pull origin master
|
|
|
|
# Installer les dépendances si nécessaire
|
|
if [ ! -d "node_modules" ] || [ "package.json" -nt "node_modules" ]; then
|
|
log "Installation des dépendances..."
|
|
npm install
|
|
fi
|
|
|
|
# Build du projet
|
|
log "Compilation du projet..."
|
|
npm run build
|
|
|
|
# Redémarrer le service frontend
|
|
log "Redémarrage du service frontend..."
|
|
if systemctl is-active --quiet inventory-frontend; then
|
|
sudo systemctl restart inventory-frontend
|
|
log_success "Service frontend redémarré"
|
|
else
|
|
log_warning "Service frontend non trouvé, démarrage manuel requis"
|
|
fi
|
|
|
|
log_success "Frontend déployé avec succès"
|
|
}
|
|
|
|
# Fonction pour déployer tout
|
|
deploy_all() {
|
|
log "Déploiement complet..."
|
|
deploy_backend
|
|
deploy_frontend
|
|
log_success "Déploiement complet terminé"
|
|
}
|
|
|
|
# Fonction pour restaurer la base de données
|
|
restore_database() {
|
|
log "Restauration de la base de données..."
|
|
|
|
if [ -z "$1" ]; then
|
|
log_error "Veuillez spécifier le fichier de sauvegarde à restaurer"
|
|
echo "Usage: $0 restore <fichier_sauvegarde>"
|
|
echo "Exemple: $0 restore /home/matt/backups/auto_backup_20241230_143022.sql.gz"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_FILE="$1"
|
|
|
|
if [ ! -f "$BACKUP_FILE" ]; then
|
|
log_error "Fichier de sauvegarde non trouvé: $BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Vérifier si c'est un fichier compressé
|
|
if [[ "$BACKUP_FILE" == *.gz ]]; then
|
|
log "Décompression de la sauvegarde..."
|
|
gunzip -c "$BACKUP_FILE" | psql -h localhost -U inventory_user -d inventory_db
|
|
else
|
|
psql -h localhost -U inventory_user -d inventory_db < "$BACKUP_FILE"
|
|
fi
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log_success "Base de données restaurée avec succès"
|
|
else
|
|
log_error "Erreur lors de la restauration"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Fonction pour lister les sauvegardes disponibles
|
|
list_backups() {
|
|
log "Sauvegardes disponibles:"
|
|
BACKUP_DIR="/home/matt/backups"
|
|
|
|
if [ -d "$BACKUP_DIR" ]; then
|
|
ls -la "$BACKUP_DIR"/*.sql.gz 2>/dev/null | while read -r line; do
|
|
echo " $line"
|
|
done
|
|
else
|
|
log_warning "Aucune sauvegarde trouvée"
|
|
fi
|
|
}
|
|
|
|
# Fonction pour afficher l'aide
|
|
show_help() {
|
|
echo "Script de déploiement automatique pour Inventory V2"
|
|
echo ""
|
|
echo "Usage: $0 [OPTION]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " backend Déployer uniquement le backend"
|
|
echo " frontend Déployer uniquement le frontend"
|
|
echo " all Déployer backend et frontend (défaut)"
|
|
echo " restore Restaurer la base de données"
|
|
echo " backups Lister les sauvegardes disponibles"
|
|
echo " help Afficher cette aide"
|
|
echo ""
|
|
echo "Exemples:"
|
|
echo " $0 backend"
|
|
echo " $0 frontend"
|
|
echo " $0 all"
|
|
echo " $0 restore /home/matt/backups/auto_backup_20241230_143022.sql.gz"
|
|
echo " $0 backups"
|
|
}
|
|
|
|
# Vérification des prérequis
|
|
check_prerequisites() {
|
|
log "Vérification des prérequis..."
|
|
|
|
# Vérifier que git est installé
|
|
if ! command -v git &> /dev/null; then
|
|
log_error "Git n'est pas installé"
|
|
exit 1
|
|
fi
|
|
|
|
# Vérifier que npm est installé
|
|
if ! command -v npm &> /dev/null; then
|
|
log_error "NPM n'est pas installé"
|
|
exit 1
|
|
fi
|
|
|
|
# Vérifier que le répertoire du projet existe
|
|
if [ ! -d "$PROJECT_DIR" ]; then
|
|
log_error "Le répertoire du projet n'existe pas: $PROJECT_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Prérequis vérifiés"
|
|
}
|
|
|
|
# Fonction principale
|
|
main() {
|
|
log "=== Début du déploiement ==="
|
|
|
|
# Vérifier les prérequis
|
|
check_prerequisites
|
|
|
|
# Traitement des arguments
|
|
case "${1:-all}" in
|
|
"backend")
|
|
deploy_backend
|
|
;;
|
|
"frontend")
|
|
deploy_frontend
|
|
;;
|
|
"all")
|
|
deploy_all
|
|
;;
|
|
"restore")
|
|
restore_database "$2"
|
|
;;
|
|
"backups")
|
|
list_backups
|
|
;;
|
|
"help"|"-h"|"--help")
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "Option invalide: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
log "=== Déploiement terminé ==="
|
|
}
|
|
|
|
# Exécution du script
|
|
main "$@" |