# Méthodologie de Copie pour Déploiement

## Vue d'ensemble

Ce document décrit la méthodologie recommandée pour copier l'intégralité du contenu d'un projet vers un environnement de déploiement sans écraser les fichiers existants.

## Contexte

Lors du déploiement du projet COOP-CA AMIFOND, il est nécessaire de copier tous les fichiers (y compris les fichiers cachés) depuis le dossier de développement vers le dossier de production, tout en préservant les fichiers de configuration existants.

## Structure Type

```
/coopca-amifond.com/
├── amifond-webapp/          # Dossier source (développement)
│   ├── backend/
│   ├── frontend/
│   ├── docs/
│   ├── .git/               # Fichiers cachés
│   ├── .gitignore
│   └── ...
└── website/                 # Dossier destination (production)
    └── backend/
        ├── passenger_wsgi.py    # Fichiers existants à préserver
        ├── public/
        └── tmp/
```

## Méthodes de Copie

### 1. Méthode Recommandée : rsync

```bash
# Simulation d'abord (dry-run) pour voir ce qui sera copié
rsync -av --ignore-existing --dry-run amifond-webapp/ website/

# Si le résultat convient, exécuter la copie réelle
rsync -av --ignore-existing amifond-webapp/ website/
```

**Avantages :**
- ✅ Prévisualisation avec `--dry-run`
- ✅ Préservation des fichiers existants
- ✅ Copie des fichiers cachés incluse
- ✅ Affichage détaillé des opérations
- ✅ Préservation des permissions et dates

### 2. Méthode Alternative : cp avec options

```bash
# Copie non-destructive (sans écrasement)
cp -rn amifond-webapp/* website/ 2>/dev/null || true
cp -rn amifond-webapp/.* website/ 2>/dev/null || true

# OU copie interactive (demande confirmation)
cp -ri amifond-webapp/* website/
cp -ri amifond-webapp/.* website/
```

## Options Détaillées

### rsync
- `-a` : mode archive (préserve permissions, propriétaire, dates)
- `-v` : verbose (affiche les fichiers traités)
- `--ignore-existing` : ignore les fichiers déjà présents
- `--dry-run` : simulation sans modification

### cp
- `-r` : récursif (copie les dossiers)
- `-n` : no-clobber (ne pas écraser)
- `-i` : interactif (demande confirmation)

## Vérifications Pré-Copie

### 1. Identifier les Conflits Potentiels

```bash
# Lister les fichiers qui existent dans les deux dossiers
find amifond-webapp -type f -exec basename {} \; | sort > /tmp/source_files
find website -type f -exec basename {} \; | sort > /tmp/dest_files
comm -12 /tmp/source_files /tmp/dest_files
```

### 2. Vérifier l'Espace Disque

```bash
# Taille du dossier source
du -sh amifond-webapp/

# Espace disponible dans la destination
df -h /path/to/website/
```

## Procédure Recommandée

### Étape 1 : Préparation
```bash
# Se placer dans le bon répertoire
cd /path/to/coopca-amifond.com/

# Vérifier la structure
ls -la
```

### Étape 2 : Simulation
```bash
# Dry-run pour voir ce qui sera copié
rsync -av --ignore-existing --dry-run amifond-webapp/ website/
```

### Étape 3 : Sauvegarde (Optionnel)
```bash
# Créer une sauvegarde du dossier destination
tar -czf website_backup_$(date +%Y%m%d_%H%M%S).tar.gz website/
```

### Étape 4 : Copie
```bash
# Exécution de la copie
rsync -av --ignore-existing amifond-webapp/ website/
```

### Étape 5 : Vérification
```bash
# Vérifier que les fichiers importants sont présents
ls -la website/
ls -la website/backend/
ls -la website/frontend/

# Vérifier les permissions
ls -la website/backend/manage.py
```

## Cas Particuliers

### Fichiers de Configuration

Certains fichiers nécessitent une attention particulière :

```bash
# Fichiers à NE PAS écraser (exemples)
website/backend/passenger_wsgi.py    # Configuration serveur
website/backend/.env                 # Variables d'environnement production
website/backend/config/settings.py   # Possibles modifications production
```

### Fichiers Cachés Importants

```bash
# S'assurer que ces fichiers sont copiés
.git/                   # Historique Git
.gitignore             # Règles d'exclusion
.env.example           # Template environnement
.vscode/               # Configuration IDE (optionnel)
```

## Dépannage

### Problème : Permission Denied
```bash
# Solution : Ajuster les permissions
chmod -R 755 website/
chown -R user:group website/
```

### Problème : Espace Insuffisant
```bash
# Solution : Nettoyer ou déplacer des fichiers
# Supprimer les fichiers temporaires
find website/ -name "*.tmp" -delete
find website/ -name "__pycache__" -exec rm -rf {} +
```

### Problème : Conflits de Fichiers
```bash
# Solution : Examiner manuellement et décider
diff -u website/file amifond-webapp/file
```

## Bonnes Pratiques

1. **Toujours faire un dry-run** avant la copie réelle
2. **Sauvegarder** les fichiers critiques avant modification
3. **Vérifier les permissions** après copie
4. **Tester l'application** après déploiement
5. **Documenter** les modifications spécifiques à la production

## Sécurité

- ⚠️ **Attention aux fichiers sensibles** (`.env`, clés, certificats)
- ⚠️ **Vérifier les permissions** des fichiers copiés
- ⚠️ **Ne pas copier** les fichiers de développement en production

## Automatisation

### Script de Déploiement

```bash
#!/bin/bash
# deploy.sh - Script de déploiement automatisé

set -e  # Arrêt en cas d'erreur

SOURCE_DIR="amifond-webapp"
DEST_DIR="website"
BACKUP_DIR="backups"

echo "🚀 Début du déploiement..."

# Créer dossier de sauvegarde
mkdir -p "$BACKUP_DIR"

# Sauvegarde
echo "📦 Sauvegarde en cours..."
tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).tar.gz" "$DEST_DIR"

# Dry-run
echo "🔍 Simulation de la copie..."
rsync -av --ignore-existing --dry-run "$SOURCE_DIR/" "$DEST_DIR/"

# Confirmation
read -p "Continuer avec la copie réelle ? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    echo "📋 Copie en cours..."
    rsync -av --ignore-existing "$SOURCE_DIR/" "$DEST_DIR/"
    echo "✅ Déploiement terminé avec succès !"
else
    echo "❌ Déploiement annulé"
    exit 1
fi
```

---

**Date de création :** 23 septembre 2025  
**Version :** 1.0  
**Auteur :** Équipe COOP-CA AMIFOND  
**Dernière mise à jour :** 23 septembre 2025
