Files
geo/maria.md
Pierre 242a90720e feat: Début des évolutions interfaces mobiles v3.2.4
- 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>
2025-09-04 16:49:29 +02:00

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

  1. Sauvegarde: Toujours faire une sauvegarde avant la migration
  2. Test: Tester d'abord en environnement de développement
  3. Firewall: Configurer précisément les règles firewall
  4. Monitoring: Surveiller les performances après migration
  5. 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