#!/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=/Users/pierre/.ssh/id_rsa_mbpi HOST_PORT=22 SOURCE_CONTAINER=$1 DEST_CONTAINER=$2 API_PATH="/var/www/geosector/api" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR="${API_PATH}_backup_${TIMESTAMP}" PROJECT="default" echo "🔄 Copie de l'API 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 API existe ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $API_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 $API_PATH $BACKUP_DIR" echo "✅ Sauvegarde créée dans $BACKUP_DIR" else echo "⚠️ Le dossier API n'existe pas sur la destination" fi # Sauvegarder spécifiquement le dossier logs echo "📋 Sauvegarde du dossier logs..." # Vérifier si le dossier logs existe ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $API_PATH/logs" if [ $? -eq 0 ]; then # Le dossier logs existe, le sauvegarder ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- mkdir -p /tmp/geosector_logs_backup" ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- cp -r $API_PATH/logs /tmp/geosector_logs_backup/" echo "✅ Dossier logs sauvegardé temporairement" else echo "⚠️ Le dossier logs n'existe pas sur la destination" fi # Copier le dossier API 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 $API_PATH" ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- mkdir -p $API_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 $API_PATH . | incus exec $DEST_CONTAINER --project $PROJECT -- tar -xf - -C $API_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 $API_PATH" echo "✅ Restauration réussie" else echo "❌ Échec de la restauration" fi exit 1 fi # Pas de fichiers temporaires à nettoyer avec cette approche # Restaurer le dossier logs echo "📋 Restauration du dossier logs..." # Vérifier si la sauvegarde des logs existe ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d /tmp/geosector_logs_backup/logs" if [ $? -eq 0 ]; then # La sauvegarde des logs existe, la restaurer ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- mkdir -p $API_PATH/logs" ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- cp -r /tmp/geosector_logs_backup/logs/* $API_PATH/logs/" ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- rm -rf /tmp/geosector_logs_backup" echo "✅ Dossier logs restauré" else echo "⚠️ Aucune sauvegarde de logs à restaurer" 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 $API_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 $API_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 $API_PATH -type f -exec chmod 644 {} \;" # Appliquer des permissions spécifiques pour le dossier logs (pour permettre à PHP-FPM de l'utilisateur nobody d'y écrire) ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $API_PATH/logs" if [ $? -eq 0 ]; then # Changer le groupe du dossier logs à nobody (utilisateur PHP-FPM) ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chown -R nginx:nobody $API_PATH/logs" # Appliquer les permissions 775 pour le dossier ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chmod -R 775 $API_PATH/logs" # Appliquer les permissions 664 pour les fichiers ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $API_PATH/logs -type f -exec chmod 664 {} \;" echo "✅ Droits spécifiques appliqués au dossier logs (nginx:nobody avec permissions 775/664)" else echo "⚠️ Le dossier logs n'existe pas" fi 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 $API_PATH" if [ $? -eq 0 ]; then echo "✅ Copie réussie" else echo "❌ Erreur: Le dossier API n'a pas été copié correctement" fi echo "✅ Opération terminée! L'API 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"