145 lines
7.1 KiB
Bash
Executable File
145 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Vérification des arguments
|
|
if [ $# -ne 2 ]; then
|
|
echo "Usage: $0 <source_container> <destination_container>"
|
|
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"
|