Files
geo/maria.md
Pierre 2786252307 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

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
```