#!/bin/bash # Vérification des arguments if [ $# -ne 2 ]; then echo "Usage: $0 " echo "Example: $0 dva-geo rca-geo" exit 1 fi HOST_IP="195.154.80.116" HOST_USER=root HOST_KEY=/home/pierre/.ssh/id_rsa_mbpi HOST_PORT=22 SOURCE_CONTAINER=$1 DEST_CONTAINER=$2 APP_PATH="/var/www/geosector/app" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR="${APP_PATH}_backup_${TIMESTAMP}" PROJECT="default" echo "🔄 Copie de l'application Flutter Web de $SOURCE_CONTAINER vers $DEST_CONTAINER (projet: $PROJECT)" # Vérifier si les containers existent echo "🔍 Vérification des containers..." ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus info $SOURCE_CONTAINER --project $PROJECT" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "❌ Erreur: Le container source $SOURCE_CONTAINER n'existe pas ou n'est pas accessible dans le projet $PROJECT" exit 1 fi ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus info $DEST_CONTAINER --project $PROJECT" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "❌ Erreur: Le container destination $DEST_CONTAINER n'existe pas ou n'est pas accessible dans le projet $PROJECT" exit 1 fi # Créer une sauvegarde du dossier de destination avant de le remplacer echo "📦 Création d'une sauvegarde sur $DEST_CONTAINER..." # Vérifier si le dossier APP existe ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $APP_PATH" if [ $? -eq 0 ]; then # Le dossier existe, créer une sauvegarde ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- cp -r $APP_PATH $BACKUP_DIR" echo "✅ Sauvegarde créée dans $BACKUP_DIR" else echo "⚠️ Le dossier APP n'existe pas sur la destination" fi # Copier le dossier APP entre les containers echo "📋 Copie des fichiers en cours..." # Approche directe: utiliser incus copy pour copier directement entre containers echo "📤 Transfert direct entre containers..." # Nettoyer le dossier de destination ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- rm -rf $APP_PATH" ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- mkdir -p $APP_PATH" # Copier directement du container source vers le container destination ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $SOURCE_CONTAINER --project $PROJECT -- tar -cf - -C $APP_PATH . | incus exec $DEST_CONTAINER --project $PROJECT -- tar -xf - -C $APP_PATH" if [ $? -ne 0 ]; then echo "❌ Erreur lors du transfert direct entre containers" echo "⚠️ Tentative de restauration de la sauvegarde..." # Vérifier si la sauvegarde existe ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $BACKUP_DIR" if [ $? -eq 0 ]; then # La sauvegarde existe, la restaurer ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- cp -r $BACKUP_DIR $APP_PATH" echo "✅ Restauration réussie" else echo "❌ Échec de la restauration" fi exit 1 fi # Changer le propriétaire et les permissions des fichiers echo "👤 Application des droits et permissions pour tous les fichiers..." # Définir le propriétaire pour tous les fichiers ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chown -R nginx:nginx $APP_PATH" # Appliquer les permissions de base pour les dossiers (755) ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $APP_PATH -type d -exec chmod 755 {} \;" # Appliquer les permissions pour les fichiers (644) ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $APP_PATH -type f -exec chmod 644 {} \;" echo "✅ Propriétaire et permissions appliqués avec succès" # Vérifier la copie echo "✅ Vérification de la copie..." ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $APP_PATH" if [ $? -eq 0 ]; then echo "✅ Copie réussie" else echo "❌ Erreur: Le dossier APP n'a pas été copié correctement" fi echo "✅ Opération terminée! L'application Flutter Web a été copiée de $SOURCE_CONTAINER vers $DEST_CONTAINER" echo "📁 Une sauvegarde a été créée dans $BACKUP_DIR sur $DEST_CONTAINER" echo "👤 Les fichiers appartiennent maintenant à l'utilisateur nginx"