Livraison d ela gestion des opérations v0.4.0
This commit is contained in:
104
api/livre-api.sh
104
api/livre-api.sh
@@ -1,9 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Vérification des arguments
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Usage: $0 <source_container> <destination_container>"
|
||||
echo "Example: $0 dva-geo rca-geo"
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: $0 <environment>"
|
||||
echo " rec : Livrer de DVA (dva-geo) vers RECETTE (rca-geo)"
|
||||
echo " prod : Livrer de RECETTE (rca-geo) vers PRODUCTION (pra-geo)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 rec # DVA → RECETTE"
|
||||
echo " $0 prod # RECETTE → PRODUCTION"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -12,14 +17,31 @@ HOST_USER=root
|
||||
HOST_KEY=/Users/pierre/.ssh/id_rsa_mbpi
|
||||
HOST_PORT=22
|
||||
|
||||
SOURCE_CONTAINER=$1
|
||||
DEST_CONTAINER=$2
|
||||
# Mapping des environnements
|
||||
ENVIRONMENT=$1
|
||||
case $ENVIRONMENT in
|
||||
"rec")
|
||||
SOURCE_CONTAINER="dva-geo"
|
||||
DEST_CONTAINER="rca-geo"
|
||||
ENV_NAME="RECETTE"
|
||||
;;
|
||||
"prod")
|
||||
SOURCE_CONTAINER="rca-geo"
|
||||
DEST_CONTAINER="pra-geo"
|
||||
ENV_NAME="PRODUCTION"
|
||||
;;
|
||||
*)
|
||||
echo "❌ Environnement '$ENVIRONMENT' non reconnu"
|
||||
echo "Utilisez 'rec' pour RECETTE ou 'prod' pour PRODUCTION"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
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)"
|
||||
echo "🔄 Livraison vers $ENV_NAME : $SOURCE_CONTAINER → $DEST_CONTAINER (projet: $PROJECT)"
|
||||
|
||||
# Vérifier si les containers existent
|
||||
echo "🔍 Vérification des containers..."
|
||||
@@ -47,37 +69,24 @@ 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"
|
||||
# Nettoyage sélectif : supprimer seulement le code, pas les données (logs et uploads)
|
||||
echo "🧹 Nettoyage sélectif (préservation de logs et uploads)..."
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $API_PATH -mindepth 1 -maxdepth 1 ! -name 'uploads' ! -name 'logs' -exec rm -rf {} \;"
|
||||
|
||||
# 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"
|
||||
# Copier directement du container source vers le container destination (en excluant logs et uploads)
|
||||
echo "📤 Transfert du code (hors logs et uploads)..."
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $SOURCE_CONTAINER --project $PROJECT -- tar -cf - -C $API_PATH --exclude='uploads' --exclude='logs' . | incus exec $DEST_CONTAINER --project $PROJECT -- tar -xf - -C $API_PATH"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Erreur lors du transfert direct entre containers"
|
||||
echo "❌ Erreur lors du transfert 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 -- rm -rf $API_PATH"
|
||||
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
|
||||
@@ -86,21 +95,7 @@ if [ $? -ne 0 ]; then
|
||||
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
|
||||
echo "✅ Code transféré avec succès (logs et uploads préservés)"
|
||||
|
||||
# Changer le propriétaire et les permissions des fichiers
|
||||
echo "👤 Application des droits et permissions pour tous les fichiers..."
|
||||
@@ -128,6 +123,23 @@ else
|
||||
echo "⚠️ Le dossier logs n'existe pas"
|
||||
fi
|
||||
|
||||
# Vérifier et corriger les permissions du dossier uploads s'il existe
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- test -d $API_PATH/uploads"
|
||||
if [ $? -eq 0 ]; then
|
||||
# S'assurer que uploads a les bonnes permissions
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chown -R nginx:nobody $API_PATH/uploads"
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chmod -R 775 $API_PATH/uploads"
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $API_PATH/uploads -type f -exec chmod 664 {} \;"
|
||||
echo "✅ Droits vérifiés pour le dossier uploads (nginx:nginx avec permissions 775)"
|
||||
else
|
||||
# Créer le dossier uploads s'il n'existe pas
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- mkdir -p $API_PATH/uploads"
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chown -R nginx:nobody $API_PATH/uploads"
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- chmod -R 775 $API_PATH/uploads"
|
||||
ssh -i $HOST_KEY -p $HOST_PORT $HOST_USER@$HOST_IP "incus exec $DEST_CONTAINER --project $PROJECT -- find $API_PATH/uploads -type f -exec chmod 664 {} \;"
|
||||
echo "✅ Dossier uploads créé avec les bonnes permissions (nginx:nginx avec permissions 775/664)"
|
||||
fi
|
||||
|
||||
echo "✅ Propriétaire et permissions appliqués avec succès"
|
||||
|
||||
# Vérifier la copie
|
||||
@@ -139,6 +151,8 @@ 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"
|
||||
echo "✅ Livraison vers $ENV_NAME terminée avec succès!"
|
||||
echo "📤 Source: $SOURCE_CONTAINER → Destination: $DEST_CONTAINER"
|
||||
echo "📁 Sauvegarde créée: $BACKUP_DIR sur $DEST_CONTAINER"
|
||||
echo "🔒 Données préservées: logs/ et uploads/ intouchés"
|
||||
echo "👤 Permissions: nginx:nginx (755/644) + logs (nginx:nobody 775/664)"
|
||||
|
||||
Reference in New Issue
Block a user