- Préparation de la nouvelle branche pour les évolutions - Mise à jour de la version vers 3.2.4 - Intégration des modifications en cours 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
6.5 KiB
6.5 KiB
Guide de migration MariaDB vers container centralisé
Ce guide détaille la procédure complète pour migrer la base de données geo_app depuis le container applicatif vers le container MariaDB centralisé.
📋 Prérequis
- Container source (geo) avec MariaDB et la base geo_app
- Container cible (maria) avec MariaDB installé
- Réseau incusbr0 configuré entre les containers
- Accès root/sudo sur les deux containers
🔄 Procédure de migration
1. Sur le container SOURCE (geo)
Créer le dump de la base de données
# Se connecter au container source
incus exec geo -- bash
# Créer le dump avec structure et données
mysqldump -u root -p geo_app > /tmp/geo_app_dump.sql
# Vérifier le dump
ls -lh /tmp/geo_app_dump.sql
Copier le dump vers le container CIBLE
# Depuis l'hôte, copier le dump
incus file pull geo/tmp/geo_app_dump.sql ./
incus file push ./geo_app_dump.sql maria/tmp/
2. Sur le container CIBLE (maria)
Se connecter au container et à MariaDB
# Se connecter au container maria
incus exec maria -- bash
# Se connecter à MariaDB
mysql -u root -p
Créer la base de données
-- Créer la base avec l'encodage UTF8MB4 pour le français
CREATE DATABASE IF NOT EXISTS geo_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Vérifier la création
SHOW DATABASES;
Créer l'utilisateur et attribuer les droits
Pour DEV:
-- Créer l'utilisateur pour l'accès distant
CREATE USER IF NOT EXISTS 'geo_app_user_dev'@'%'
IDENTIFIED BY '34GOz-X5gJu-oH@Fa3$#Z';
-- Donner tous les privilèges sur la base geo_app
GRANT ALL PRIVILEGES ON geo_app.* TO 'geo_app_user_dev'@'%';
-- Appliquer les changements
FLUSH PRIVILEGES;
-- Vérifier les permissions
SHOW GRANTS FOR 'geo_app_user_dev'@'%';
Pour RECETTE:
-- Créer l'utilisateur pour l'accès distant
CREATE USER IF NOT EXISTS 'geo_app_user_rec'@'%'
IDENTIFIED BY 'QO:96df*?k-dS3KiO-{4W6m';
-- Donner tous les privilèges sur la base geo_app
GRANT ALL PRIVILEGES ON geo_app.* TO 'geo_app_user_rec'@'%';
-- Appliquer les changements
FLUSH PRIVILEGES;
-- Vérifier les permissions
SHOW GRANTS FOR 'geo_app_user_rec'@'%';
Pour PROD:
-- Créer l'utilisateur pour l'accès distant
CREATE USER IF NOT EXISTS 'geo_app_user_prod'@'%'
IDENTIFIED BY 'QO:96-SrHJ6k7-df*?k{4W6m';
-- Donner tous les privilèges sur la base geo_app
GRANT ALL PRIVILEGES ON geo_app.* TO 'geo_app_user_prod'@'%';
-- Appliquer les changements
FLUSH PRIVILEGES;
-- Vérifier les permissions
SHOW GRANTS FOR 'geo_app_user_prod'@'%';
Importer le dump
# Sortir de mysql si vous y êtes encore
exit
# Importer le dump dans la nouvelle base
mysql -u root -p geo_app < /tmp/geo_app_dump.sql
# Vérifier l'import
mysql -u root -p -e "USE geo_app; SHOW TABLES;"
3. Configuration réseau et firewall
Sur le container MARIA
Configurer MariaDB pour l'accès distant
# Éditer la configuration MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Modifier ou ajouter:
bind-address = 0.0.0.0
# Redémarrer MariaDB
systemctl restart mariadb
Configurer le firewall UFW
# Vérifier l'IP du container source (geo)
# Exemple: 13.23.33.43
# Autoriser l'accès depuis le container geo
ufw allow from 13.23.33.43 to any port 3306
# Ou autoriser tout le réseau incusbr0 (plus flexible)
ufw allow from 13.23.33.0/24 to any port 3306
# Vérifier les règles
ufw status numbered
4. Test de connexion
Depuis le container SOURCE (geo)
# Tester la connexion vers le container maria
# Pour DEV
mysql -h 13.23.33.46 -u geo_app_user_dev -p'34GOz-X5gJu-oH@Fa3$#Z' geo_app -e "SELECT 1;"
# Pour RECETTE
mysql -h 13.23.33.36 -u geo_app_user_rec -p'QO:96df*?k-dS3KiO-{4W6m' geo_app -e "SELECT 1;"
# Pour PROD
mysql -h 13.23.33.26 -u geo_app_user_prod -p'QO:96-SrHJ6k7-df*?k{4W6m' geo_app -e "SELECT 1;"
5. Mise à jour de la configuration API
Modifier le fichier api/src/Config/AppConfig.php pour pointer vers le nouveau serveur MariaDB:
// Configuration DÉVELOPPEMENT
'database' => [
'host' => '13.23.33.46', // IP du container maria
'name' => 'geo_app',
'username' => 'geo_app_user_dev',
'password' => '34GOz-X5gJu-oH@Fa3$#Z',
],
// Configuration RECETTE
'database' => [
'host' => '13.23.33.36', // IP du container maria recette
'name' => 'geo_app',
'username' => 'geo_app_user_rec',
'password' => 'QO:96df*?k-dS3KiO-{4W6m',
],
// Configuration PRODUCTION
'database' => [
'host' => '13.23.33.26', // IP du container maria prod
'name' => 'geo_app',
'username' => 'geo_app_user_prod',
'password' => 'QO:96-SrHJ6k7-df*?k{4W6m',
],
6. Arrêt du service MariaDB local
Sur Alpine Linux (container geo)
# Arrêter le service MariaDB
rc-service mariadb stop
# Vérifier l'arrêt
rc-service mariadb status
# Désactiver le démarrage automatique
rc-update del mariadb
# Pour redémarrer si besoin
rc-service mariadb start
Sur Ubuntu/Debian
# Arrêter le service
systemctl stop mariadb
# ou
systemctl stop mysql
# Vérifier l'arrêt
systemctl status mariadb
# Désactiver le démarrage automatique
systemctl disable mariadb
7. Vérification finale
# Tester l'application web
curl http://localhost/api/health
# Vérifier les logs pour toute erreur
tail -f /var/log/apache2/error.log
# ou
tail -f /var/log/php*.log
🔐 Sécurité
- Les mots de passe utilisés ici sont ceux du fichier AppConfig.php
- En production, utilisez des mots de passe forts et uniques
- Limitez les accès réseau au strict minimum
- Activez SSL/TLS pour les connexions distantes si possible
📝 Notes importantes
- Sauvegarde: Toujours faire une sauvegarde avant la migration
- Test: Tester d'abord en environnement de développement
- Firewall: Configurer précisément les règles firewall
- Monitoring: Surveiller les performances après migration
- Rollback: Garder l'ancienne base accessible pour un rollback rapide si nécessaire
🚨 Dépannage
Erreur de connexion
# Vérifier que MariaDB écoute sur toutes les interfaces
netstat -tlnp | grep 3306
# Vérifier les logs MariaDB
tail -f /var/log/mysql/error.log
Erreur de permissions
-- Recréer les permissions
GRANT ALL PRIVILEGES ON geo_app.* TO 'geo_app_user_dev'@'%';
FLUSH PRIVILEGES;
Test de connectivité réseau
# Ping entre containers
ping 13.23.33.46
# Test du port MySQL
telnet 13.23.33.46 3306