# ✅ Checklist de migration SQLite → MariaDB

## Avant de commencer

- [ ] J'ai un backup de ma base SQLite actuelle (`db.sqlite3`)
- [ ] Le conteneur MariaDB tourne sur mon Raspberry Pi
- [ ] Je peux accéder au Raspberry Pi (SSH ou accès physique)
- [ ] J'ai noté l'IP du Raspberry Pi : `_______________`

## Étape 1 : Configuration de MariaDB (sur le RPI)

- [ ] Connecté au conteneur MariaDB
  ```bash
  docker exec -it mariadb mysql -u root -p
  ```

- [ ] Base de données créée
  ```sql
  CREATE DATABASE IF NOT EXISTS duhaz_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  ```

- [ ] Utilisateur créé avec un mot de passe fort
  ```sql
  CREATE USER IF NOT EXISTS 'duhaz_user'@'%' IDENTIFIED BY 'MON_MOT_DE_PASSE';
  ```

- [ ] Privilèges accordés
  ```sql
  GRANT ALL PRIVILEGES ON duhaz_blog.* TO 'duhaz_user'@'%';
  FLUSH PRIVILEGES;
  ```

- [ ] Port 3306 exposé (si connexion depuis Mac)
  ```bash
  docker port mariadb
  # Doit afficher : 3306/tcp -> 0.0.0.0:3306
  ```

## Étape 2 : Installation des dépendances (sur votre Mac)

- [ ] Navigué vers le projet
  ```bash
  cd /Users/duhaz/projets/blog-duhaz
  ```

- [ ] Dépendances installées
  ```bash
  pip install -r requirements.txt
  ```

- [ ] `mysqlclient` installé correctement
  ```bash
  python -c "import MySQLdb; print('OK')"
  ```

## Étape 3 : Configuration du fichier .env

- [ ] Fichier `.env` modifié avec :
  ```env
  DB_ENGINE=mysql
  DB_NAME=duhaz_blog
  DB_USER=duhaz_user
  DB_PASSWORD=mon_mot_de_passe
  DB_HOST=_______________  # IP du RPI ou "mariadb"
  DB_PORT=3306
  ```

- [ ] Mot de passe saisi correctement (attention aux espaces)

- [ ] Host configuré selon le contexte :
  - `mariadb` si Django tourne sur le même RPI
  - `192.168.x.x` (IP du RPI) si Django tourne sur Mac

## Étape 4 : Test de connexion

- [ ] Test réseau réussi
  ```bash
  telnet IP_DU_RPI 3306
  # Doit se connecter
  ```

- [ ] Test de connexion Python réussi
  ```bash
  python scripts/test_mariadb_connection.py
  # Tous les tests doivent passer ✅
  ```

## Étape 5 : Migration des données

- [ ] Script de migration exécuté
  ```bash
  python scripts/migrate_to_mariadb.py
  ```

- [ ] Export SQLite réussi
  ```
  ✅ Données exportées vers backup/sqlite_data.json
  ```

- [ ] Fichier `.env` vérifié (DB_ENGINE=mysql)

- [ ] Import MariaDB réussi
  ```
  ✅ Données importées avec succès!
  ```

- [ ] Vérification affichée
  ```
  👥 Utilisateurs: X
  📝 Articles: Y
  ```

## Étape 6 : Tests post-migration

- [ ] Serveur de développement lancé
  ```bash
  python manage.py runserver
  ```

- [ ] Page d'accueil accessible (http://localhost:8000)

- [ ] Articles visibles sur le blog

- [ ] Connexion admin fonctionnelle (http://localhost:8000/admin)

- [ ] Création d'un nouvel article de test

- [ ] Modification d'un article existant

- [ ] Médias/images toujours accessibles

## Étape 7 : Vérifications de production

Si vous déployez sur le RPI :

- [ ] Variables d'environnement de production configurées
  ```env
  DEBUG=False
  ALLOWED_HOSTS=duhaz.fr,www.duhaz.fr
  ```

- [ ] Migrations appliquées sur la production
  ```bash
  python manage.py migrate
  ```

- [ ] Static files collectés
  ```bash
  python manage.py collectstatic
  ```

- [ ] Application redémarrée

- [ ] Site web accessible publiquement

- [ ] HTTPS fonctionnel

## Étape 8 : Nettoyage (après confirmation)

⚠️ **NE FAITES CECI QU'APRÈS AVOIR CONFIRMÉ QUE TOUT FONCTIONNE** ⚠️

- [ ] ✅ Tout fonctionne parfaitement depuis au moins 24h

- [ ] Backup final de la base SQLite
  ```bash
  cp db.sqlite3 backup/db.sqlite3.final_backup_$(date +%Y%m%d)
  ```

- [ ] Backup du JSON
  ```bash
  # Le fichier backup/sqlite_data.json est déjà créé
  ```

- [ ] (Optionnel) Suppression de `db.sqlite3` du dossier projet
  ```bash
  # Gardez-le quelques semaines par sécurité !
  mv db.sqlite3 backup/
  ```

## Backups à conserver

Gardez ces fichiers en sécurité :

- [ ] `backup/sqlite_data.json` - Export JSON complet
- [ ] `backup/db.sqlite3.final_backup_YYYYMMDD` - Base SQLite finale
- [ ] Backup MariaDB régulier configuré
  ```bash
  docker exec mariadb mysqldump -u root -p duhaz_blog > backup_$(date +%Y%m%d).sql
  ```

## En cas de problème

### La migration a échoué

1. ❌ Ne paniquez pas !
2. ✅ Votre `db.sqlite3` est intact
3. ✅ Changez `DB_ENGINE` dans `.env` pour revenir à SQLite
4. ✅ Relancez l'application avec SQLite
5. 🔍 Consultez `docs/MIGRATION_MARIADB.md` pour le dépannage

### Performances lentes

- [ ] Index vérifiés sur les colonnes fréquemment requêtées
- [ ] Configuration MariaDB optimisée (my.cnf)
- [ ] Connexions pooling configurées si nécessaire

### Erreurs de charset

- [ ] Base de données en UTF8MB4
  ```sql
  ALTER DATABASE duhaz_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  ```

- [ ] Tables vérifiées
  ```sql
  SHOW TABLE STATUS LIKE '%';
  ```

## Notes importantes

- 🔒 **Sécurité** : Utilisez des mots de passe forts
- 💾 **Backups** : Automatisez les sauvegardes MariaDB
- 🔍 **Monitoring** : Surveillez les logs MariaDB
- 📊 **Performance** : MariaDB est généralement plus rapide que SQLite pour les sites avec du trafic

## Support

- 📚 Documentation complète : `docs/MIGRATION_MARIADB.md`
- 🌐 Configuration réseau : `docs/CONFIGURATION_RESEAU_MARIADB.md`
- ⚡ Aide-mémoire rapide : `MIGRATION_MARIADB_RAPIDE.md`

---

**Date de migration** : _______________

**Signature** : _______________

**Durée totale** : _______________ minutes
