- 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>
278 lines
6.5 KiB
Markdown
278 lines
6.5 KiB
Markdown
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Se connecter au container maria
|
|
incus exec maria -- bash
|
|
|
|
# Se connecter à MariaDB
|
|
mysql -u root -p
|
|
```
|
|
|
|
#### Créer la base de données
|
|
```sql
|
|
-- 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:**
|
|
```sql
|
|
-- 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:**
|
|
```sql
|
|
-- 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:**
|
|
```sql
|
|
-- 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# É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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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:
|
|
|
|
```php
|
|
// 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)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```sql
|
|
-- Recréer les permissions
|
|
GRANT ALL PRIVILEGES ON geo_app.* TO 'geo_app_user_dev'@'%';
|
|
FLUSH PRIVILEGES;
|
|
```
|
|
|
|
### Test de connectivité réseau
|
|
```bash
|
|
# Ping entre containers
|
|
ping 13.23.33.46
|
|
|
|
# Test du port MySQL
|
|
telnet 13.23.33.46 3306
|
|
``` |