1
0

migration_interactive.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #!/bin/bash
  2. # Script interactif de migration vers MariaDB
  3. set -e # Arrêter en cas d'erreur
  4. # Couleurs
  5. RED='\033[0;31m'
  6. GREEN='\033[0;32m'
  7. YELLOW='\033[1;33m'
  8. BLUE='\033[0;34m'
  9. NC='\033[0m' # No Color
  10. clear
  11. echo -e "${BLUE}"
  12. echo "╔══════════════════════════════════════════════════════════════╗"
  13. echo "║ ║"
  14. echo "║ 🚀 MIGRATION DJANGO → MARIADB ║"
  15. echo "║ ║"
  16. echo "║ Blog Duhaz - Migration Interactive ║"
  17. echo "║ ║"
  18. echo "╚══════════════════════════════════════════════════════════════╝"
  19. echo -e "${NC}"
  20. echo ""
  21. # Fonction pour afficher un message et attendre
  22. pause() {
  23. echo ""
  24. read -p "Appuyez sur Entrée pour continuer..."
  25. echo ""
  26. }
  27. # Fonction pour poser une question oui/non
  28. ask_yes_no() {
  29. while true; do
  30. read -p "$1 (o/n) " yn
  31. case $yn in
  32. [Oo]* ) return 0;;
  33. [Nn]* ) return 1;;
  34. * ) echo "Répondez par o (oui) ou n (non).";;
  35. esac
  36. done
  37. }
  38. # Étape 1: Vérifications préliminaires
  39. echo -e "${YELLOW}═══ Étape 1/7 : Vérifications préliminaires ═══${NC}"
  40. echo ""
  41. if [ ! -f "requirements.txt" ]; then
  42. echo -e "${RED}❌ Erreur: requirements.txt non trouvé${NC}"
  43. echo " Êtes-vous dans le bon répertoire?"
  44. exit 1
  45. fi
  46. if [ ! -f ".env" ]; then
  47. echo -e "${RED}❌ Erreur: Fichier .env non trouvé${NC}"
  48. if [ -f ".env.example" ]; then
  49. echo -e "${YELLOW} 💡 Copiez .env.example vers .env et configurez-le${NC}"
  50. if ask_yes_no "Voulez-vous que je le fasse maintenant?"; then
  51. cp .env.example .env
  52. echo -e "${GREEN}✅ Fichier .env créé${NC}"
  53. echo -e "${YELLOW}⚠️ Éditez maintenant le fichier .env pour configurer MariaDB${NC}"
  54. pause
  55. else
  56. exit 1
  57. fi
  58. else
  59. exit 1
  60. fi
  61. fi
  62. echo -e "${GREEN}✅ Fichiers de configuration présents${NC}"
  63. pause
  64. # Étape 2: Vérification des dépendances Python
  65. echo -e "${YELLOW}═══ Étape 2/7 : Installation des dépendances Python ═══${NC}"
  66. echo ""
  67. if python3 -c "import MySQLdb" 2>/dev/null; then
  68. echo -e "${GREEN}✅ mysqlclient déjà installé${NC}"
  69. else
  70. echo -e "${YELLOW}⚠️ mysqlclient n'est pas installé${NC}"
  71. if ask_yes_no "Voulez-vous installer toutes les dépendances maintenant?"; then
  72. echo "Installation en cours..."
  73. pip3 install -r requirements.txt
  74. echo -e "${GREEN}✅ Dépendances installées${NC}"
  75. else
  76. echo -e "${RED}❌ mysqlclient est requis. Installation annulée.${NC}"
  77. exit 1
  78. fi
  79. fi
  80. pause
  81. # Étape 3: Configuration du fichier .env
  82. echo -e "${YELLOW}═══ Étape 3/7 : Configuration du .env ═══${NC}"
  83. echo ""
  84. echo "Paramètres actuels:"
  85. echo ""
  86. grep "^DB_" .env | while read line; do
  87. key=$(echo $line | cut -d'=' -f1)
  88. value=$(echo $line | cut -d'=' -f2)
  89. if [ "$key" = "DB_PASSWORD" ]; then
  90. echo " $key=****"
  91. else
  92. echo " $key=$value"
  93. fi
  94. done
  95. echo ""
  96. DB_ENGINE=$(grep "^DB_ENGINE" .env | cut -d'=' -f2 || echo "sqlite3")
  97. if [ "$DB_ENGINE" != "mysql" ]; then
  98. echo -e "${RED}⚠️ DB_ENGINE n'est pas configuré sur 'mysql'${NC}"
  99. echo ""
  100. echo "Pour une connexion depuis votre Mac vers le RPI:"
  101. echo "1. Trouvez l'IP de votre RPI : hostname -I"
  102. echo "2. Configurez DB_HOST avec cette IP dans le .env"
  103. echo ""
  104. echo "Exemple de configuration dans .env:"
  105. echo " DB_ENGINE=mysql"
  106. echo " DB_NAME=duhaz_blog"
  107. echo " DB_USER=duhaz_user"
  108. echo " DB_PASSWORD=votre_mot_de_passe"
  109. echo " DB_HOST=192.168.1.100 # IP de votre RPI"
  110. echo " DB_PORT=3306"
  111. echo ""
  112. if ask_yes_no "Voulez-vous éditer le fichier .env maintenant?"; then
  113. ${EDITOR:-nano} .env
  114. echo -e "${GREEN}✅ Fichier .env modifié${NC}"
  115. else
  116. echo -e "${YELLOW}⚠️ Assurez-vous de le configurer avant de continuer${NC}"
  117. exit 1
  118. fi
  119. else
  120. echo -e "${GREEN}✅ DB_ENGINE configuré sur mysql${NC}"
  121. fi
  122. pause
  123. # Étape 4: Test de connexion au serveur MariaDB
  124. echo -e "${YELLOW}═══ Étape 4/7 : Test de connexion MariaDB ═══${NC}"
  125. echo ""
  126. DB_HOST=$(grep "^DB_HOST" .env | cut -d'=' -f2)
  127. DB_PORT=$(grep "^DB_PORT" .env | cut -d'=' -f2)
  128. echo "Test de connexion vers $DB_HOST:$DB_PORT"
  129. echo ""
  130. if ask_yes_no "Voulez-vous lancer le test de connexion?"; then
  131. python3 scripts/test_mariadb_connection.py
  132. if [ $? -eq 0 ]; then
  133. echo -e "${GREEN}✅ Connexion réussie!${NC}"
  134. else
  135. echo -e "${RED}❌ Échec de connexion${NC}"
  136. echo ""
  137. echo "Vérifications à faire sur le Raspberry Pi:"
  138. echo "1. docker ps | grep mariadb"
  139. echo "2. docker logs mariadb"
  140. echo "3. docker port mariadb"
  141. echo ""
  142. echo "Depuis votre Mac:"
  143. echo "1. ping $DB_HOST"
  144. echo "2. telnet $DB_HOST $DB_PORT"
  145. echo ""
  146. exit 1
  147. fi
  148. else
  149. echo -e "${YELLOW}⚠️ Test de connexion ignoré${NC}"
  150. if ! ask_yes_no "Voulez-vous continuer quand même?"; then
  151. exit 1
  152. fi
  153. fi
  154. pause
  155. # Étape 5: Vérification de la base SQLite source
  156. echo -e "${YELLOW}═══ Étape 5/7 : Vérification de la base source ═══${NC}"
  157. echo ""
  158. if [ -f "db.sqlite3" ]; then
  159. SIZE=$(du -h db.sqlite3 | cut -f1)
  160. echo -e "${GREEN}✅ db.sqlite3 trouvé (taille: $SIZE)${NC}"
  161. echo ""
  162. # Compter les enregistrements
  163. echo "Statistiques de la base SQLite:"
  164. python3 -c "
  165. import sqlite3
  166. conn = sqlite3.connect('db.sqlite3')
  167. cursor = conn.cursor()