feat: Migration complète vers architecture v2.0.1
CHANGEMENTS MAJEURS: - Fusion des 3 bases de données (uof_frontal, uof_linet, logs) en une seule base 'cleo' - Migration vers PDO avec pattern Singleton et requêtes préparées - Configuration externalisée via variables d'environnement (.env) - Séparation application (dva-front) et base de données (maria3) SÉCURITÉ: - Suppression des credentials en dur dans le code - Implémentation de la classe Database avec gestion d'erreurs sécurisée - Protection contre les injections SQL via requêtes préparées INFRASTRUCTURE: - Container dva-front : MariaDB supprimé, application PHP uniquement - Container maria3 : Base de données centralisée MariaDB 11.4 - Script de déploiement optimisé (deploy-cleo-fast.sh) CORRECTIONS: - Ajout des tables manquantes (z_sessions, z_stats, marches_listes) - Compatibilité PDO (fetch_assoc → fetch(PDO::FETCH_ASSOC)) - Suppression des commentaires debug dans les réponses AJAX - Permissions fichiers (.env 644, logs 777 avec owner nobody) DOCUMENTATION: - Mise à jour README.md avec architecture actuelle - Migration README.md marqué comme complété - TODO.md avec état d'avancement et prochaines étapes (PROD IN4) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
243
migration/README.md
Normal file
243
migration/README.md
Normal file
@@ -0,0 +1,243 @@
|
||||
# Migration CLEO vers la nouvelle architecture
|
||||
|
||||
## ✅ MIGRATION COMPLÉTÉE (12 septembre 2025)
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Cette migration a transformé l'architecture de CLEO pour :
|
||||
- ✅ **Fusionner 3 bases de données** (`uof_frontal`, `uof_linet`, `logs`) en une seule base `cleo`
|
||||
- ✅ **Sécuriser les connexions** avec PDO et requêtes préparées
|
||||
- ✅ **Externaliser la configuration** dans des variables d'environnement
|
||||
- ✅ **Séparer** application (dva-front) et base de données (maria3)
|
||||
|
||||
## Pré-requis
|
||||
|
||||
- PHP 8.3+
|
||||
- MariaDB/MySQL 5.7+
|
||||
- Accès aux bases existantes (`uof_frontal`, `uof_linet`)
|
||||
- Container `maria3` accessible depuis l'application
|
||||
|
||||
## Structure de la migration
|
||||
|
||||
```
|
||||
migration/
|
||||
├── migrate_to_cleo.sql # Script SQL de migration des données
|
||||
├── deploy_new_architecture.sh # Script de déploiement automatique
|
||||
├── rollback.sh # Script de retour arrière
|
||||
└── README.md # Ce fichier
|
||||
```
|
||||
|
||||
## Étapes de migration
|
||||
|
||||
### 1. Préparation
|
||||
|
||||
```bash
|
||||
# Se placer à la racine du projet
|
||||
cd /home/pierre/dev/cleo
|
||||
|
||||
# Vérifier le fichier .env
|
||||
cp .env.example .env
|
||||
nano .env # Éditer avec vos paramètres
|
||||
```
|
||||
|
||||
Configuration actuelle dans `.env` :
|
||||
```env
|
||||
DB_HOST=13.23.33.4 # IP du container maria3
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=cleo
|
||||
DB_USERNAME=cleo_user
|
||||
DB_PASSWORD=CleoDev2025! # À changer en production
|
||||
```
|
||||
|
||||
### 2. Exécution de la migration
|
||||
|
||||
```bash
|
||||
# Rendre les scripts exécutables
|
||||
chmod +x migration/*.sh
|
||||
|
||||
# Lancer la migration
|
||||
./migration/deploy_new_architecture.sh
|
||||
```
|
||||
|
||||
Le script effectue automatiquement :
|
||||
- ✅ Sauvegarde des fichiers actuels
|
||||
- ✅ Test de connexion à MariaDB
|
||||
- ✅ Migration des bases de données
|
||||
- ✅ Activation des nouveaux fichiers
|
||||
- ✅ Tests de validation
|
||||
|
||||
### 3. Vérification
|
||||
|
||||
Après la migration, vérifier :
|
||||
|
||||
```bash
|
||||
# Connexion à la base
|
||||
mysql -h maria3 -u cleo_user -p cleo
|
||||
|
||||
# Vérifier les tables
|
||||
SHOW TABLES;
|
||||
|
||||
# Compter les enregistrements
|
||||
SELECT 'devis' as table_name, COUNT(*) FROM devis
|
||||
UNION ALL
|
||||
SELECT 'clients', COUNT(*) FROM clients
|
||||
UNION ALL
|
||||
SELECT 'users', COUNT(*) FROM users;
|
||||
```
|
||||
|
||||
Tester l'application :
|
||||
- Connexion utilisateur
|
||||
- Consultation des devis
|
||||
- Création d'un nouveau devis
|
||||
- Export Excel
|
||||
|
||||
### 4. En cas de problème
|
||||
|
||||
Si la migration échoue ou cause des problèmes :
|
||||
|
||||
```bash
|
||||
# Revenir à l'ancienne architecture
|
||||
./migration/rollback.sh
|
||||
```
|
||||
|
||||
Le rollback :
|
||||
- Restaure les fichiers originaux
|
||||
- Conserve les nouveaux fichiers dans `migration/new_architecture_backup/`
|
||||
- L'application revient sur les bases `uof_frontal` et `uof_linet`
|
||||
|
||||
## Changements techniques
|
||||
|
||||
### Fichiers modifiés
|
||||
|
||||
| Fichier | Changement |
|
||||
|---------|------------|
|
||||
| `config/conf.php` | Utilise les variables d'environnement |
|
||||
| `config/Database.php` | Nouvelle classe PDO singleton |
|
||||
| `pub/res/d6/d6_tools.php` | Utilise la classe Database |
|
||||
| `.env` | Configuration externalisée |
|
||||
|
||||
### Structure de la base `cleo`
|
||||
|
||||
```sql
|
||||
-- Tables métier (ex-uof_linet)
|
||||
devis
|
||||
devis_produits
|
||||
devis_histo
|
||||
clients
|
||||
produits
|
||||
produits_familles
|
||||
marches
|
||||
users
|
||||
x_familles
|
||||
x_statuts_devis
|
||||
x_clients_types
|
||||
|
||||
-- Tables système
|
||||
y_pages (ex-uof_frontal)
|
||||
users_entites (ex-uof_frontal)
|
||||
z_logs (ex-base logs ou nouvelle)
|
||||
```
|
||||
|
||||
### Améliorations de sécurité
|
||||
|
||||
1. **Requêtes préparées PDO** : Protection contre les injections SQL
|
||||
2. **Variables d'environnement** : Credentials hors du code
|
||||
3. **Connexion unique** : Pattern Singleton pour la DB
|
||||
4. **Logging amélioré** : Traçabilité des requêtes SQL
|
||||
|
||||
## Environnements
|
||||
|
||||
### DEV/RECETTE (IN3) - ACTIF
|
||||
```
|
||||
Container: dva-front (13.23.33.42)
|
||||
├── Application PHP 8.3
|
||||
├── Nginx (Alpine Linux)
|
||||
├── MariaDB : SUPPRIMÉ (12/09/2025)
|
||||
└── Connexion vers maria3
|
||||
|
||||
Container: maria3 (13.23.33.4)
|
||||
├── MariaDB 11.4
|
||||
├── Base de données : cleo
|
||||
├── Tables migrées : 30+
|
||||
└── Utilisateur : cleo_user
|
||||
```
|
||||
|
||||
**Actions réalisées :**
|
||||
- ✅ Migration des bases `uof_frontal` et `uof_linet` vers `cleo`
|
||||
- ✅ Création des tables manquantes (`z_sessions`, `z_stats`, `marches_listes`)
|
||||
- ✅ Configuration PDO avec pattern Singleton
|
||||
- ✅ Suppression complète de MariaDB sur dva-front
|
||||
- ✅ Script de déploiement optimisé (`deploy-cleo-fast.sh`)
|
||||
|
||||
### PROD (IN4 - futur)
|
||||
```
|
||||
Container: nx4 → Application PHP
|
||||
Container: maria4 → Base de données cleo
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Erreur de connexion à la base
|
||||
|
||||
```bash
|
||||
# Vérifier la connectivité
|
||||
mysql -h maria3 -u cleo_user -p
|
||||
|
||||
# Vérifier les permissions
|
||||
SHOW GRANTS FOR 'cleo_user'@'%';
|
||||
```
|
||||
|
||||
### Erreur PHP après migration
|
||||
|
||||
```bash
|
||||
# Vérifier les logs
|
||||
tail -f log/cleo_debug_*.log
|
||||
|
||||
# Vérifier les permissions des fichiers
|
||||
ls -la config/conf.php
|
||||
ls -la .env
|
||||
```
|
||||
|
||||
### Tables manquantes
|
||||
|
||||
```bash
|
||||
# Réexécuter uniquement la migration SQL
|
||||
mysql -h maria3 -u cleo_user -p cleo < migration/migrate_to_cleo.sql
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
Pour toute question ou problème :
|
||||
1. Consulter les logs dans `/log/`
|
||||
2. Vérifier le fichier `.env`
|
||||
3. Utiliser le rollback si nécessaire
|
||||
4. Documenter l'erreur dans un issue GitHub
|
||||
|
||||
## État post-migration
|
||||
|
||||
### Fichiers créés/modifiés
|
||||
- ✅ `.env` : Configuration externalisée
|
||||
- ✅ `config/Database.php` : Classe PDO singleton
|
||||
- ✅ `config/conf.php` : Utilise les variables d'environnement
|
||||
- ✅ `pub/res/d6/d6_tools.php` : Fonctions utilitaires mises à jour
|
||||
- ✅ `deploy-cleo-fast.sh` : Script de déploiement optimisé (tar.gz)
|
||||
|
||||
### Problèmes résolus durant la migration
|
||||
1. **Tables manquantes** : Création de `z_sessions`, `z_stats`, `marches_listes`
|
||||
2. **Permissions fichiers** : `.env` en 644, logs en 777 avec owner `nobody`
|
||||
3. **Compatibilité PDO** : Remplacement de `fetch_assoc()` par `fetch(PDO::FETCH_ASSOC)`
|
||||
4. **Debug AJAX** : Suppression des commentaires HTML dans les réponses JSON
|
||||
5. **Fonctions manquantes** : Ajout de `checkPsswd()`, `affiche_date()`, etc.
|
||||
|
||||
### Scripts de déploiement
|
||||
```bash
|
||||
# Déploiement rapide (30 secondes)
|
||||
./deploy-cleo-fast.sh
|
||||
|
||||
# Déploiement dev (si besoin)
|
||||
./deploy-cleo-dev.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Migration complétée pour CLEO v2.0.1 - 12 septembre 2025*
|
||||
10
migration/create_marches_listes.sql
Normal file
10
migration/create_marches_listes.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Création de la table marches_listes
|
||||
CREATE TABLE IF NOT EXISTS `marches_listes` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`fk_marche` int(11) DEFAULT NULL,
|
||||
`terme_achat` varchar(255) DEFAULT NULL,
|
||||
`date_created` datetime DEFAULT current_timestamp(),
|
||||
`date_modified` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_fk_marche` (`fk_marche`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
48
migration/create_missing_tables.sql
Normal file
48
migration/create_missing_tables.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- Script pour créer les tables manquantes dans la base cleo
|
||||
-- Date: 2025-09-12
|
||||
|
||||
USE cleo;
|
||||
|
||||
-- Table z_sessions pour la gestion des sessions utilisateurs
|
||||
CREATE TABLE IF NOT EXISTS `z_sessions` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`sid` varchar(255) NOT NULL,
|
||||
`fk_user` int(11) DEFAULT 0,
|
||||
`role` varchar(10) DEFAULT NULL,
|
||||
`data` text,
|
||||
`date_modified` datetime DEFAULT NULL,
|
||||
`ip` varchar(50) DEFAULT NULL,
|
||||
`browser` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`rowid`),
|
||||
UNIQUE KEY `idx_sid` (`sid`),
|
||||
KEY `idx_user` (`fk_user`),
|
||||
KEY `idx_date` (`date_modified`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Ajouter la colonne 'date' manquante dans z_logs si elle n'existe pas
|
||||
ALTER TABLE `z_logs`
|
||||
ADD COLUMN IF NOT EXISTS `date` datetime DEFAULT NULL AFTER `date_histo`;
|
||||
|
||||
-- Index pour améliorer les performances
|
||||
ALTER TABLE `z_logs` ADD INDEX IF NOT EXISTS `idx_date_logs` (`date`);
|
||||
|
||||
-- Table z_stats pour les statistiques (optionnelle pour plus tard)
|
||||
CREATE TABLE IF NOT EXISTS `z_stats` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`date` datetime DEFAULT NULL,
|
||||
`root` varchar(255) DEFAULT NULL,
|
||||
`server_ip` varchar(50) DEFAULT NULL,
|
||||
`server_soft` varchar(255) DEFAULT NULL,
|
||||
`server_name` varchar(255) DEFAULT NULL,
|
||||
`client_ip` varchar(50) DEFAULT NULL,
|
||||
`client_browser` text,
|
||||
`client_origine` text,
|
||||
`client_page` text,
|
||||
`fk_user` int(11) DEFAULT 0,
|
||||
`appname` varchar(50) DEFAULT NULL,
|
||||
`delay` decimal(10,3) DEFAULT 0,
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_date_stats` (`date`),
|
||||
KEY `idx_user_stats` (`fk_user`),
|
||||
KEY `idx_ip_stats` (`client_ip`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
163
migration/deploy_new_architecture.sh
Executable file
163
migration/deploy_new_architecture.sh
Executable file
@@ -0,0 +1,163 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de déploiement de la nouvelle architecture CLEO
|
||||
# Version: 2.0.1
|
||||
# Date: 2025-09-11
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour l'affichage
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo -e "${GREEN} Déploiement CLEO - Nouvelle Architecture ${NC}"
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Vérifier qu'on est dans le bon répertoire
|
||||
if [ ! -f "index.php" ] || [ ! -d "config" ]; then
|
||||
echo -e "${RED}Erreur: Ce script doit être exécuté depuis la racine du projet CLEO${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fonction pour demander confirmation
|
||||
confirm() {
|
||||
read -p "$1 [y/N] " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# 1. Vérification du fichier .env
|
||||
echo -e "${YELLOW}1. Vérification de la configuration...${NC}"
|
||||
if [ ! -f ".env" ]; then
|
||||
echo -e "${RED} Le fichier .env n'existe pas!${NC}"
|
||||
echo " Copie de .env.example vers .env..."
|
||||
cp .env.example .env
|
||||
echo -e "${YELLOW} IMPORTANT: Veuillez éditer le fichier .env avec vos paramètres${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN} ✓ Fichier .env trouvé${NC}"
|
||||
|
||||
# 2. Backup des anciens fichiers
|
||||
echo -e "${YELLOW}2. Sauvegarde des fichiers actuels...${NC}"
|
||||
BACKUP_DIR="backup_$(date +%Y%m%d_%H%M%S)"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Sauvegarder les fichiers critiques
|
||||
if [ -f "config/conf.php" ]; then
|
||||
cp config/conf.php "$BACKUP_DIR/conf.php.bak"
|
||||
echo " - config/conf.php sauvegardé"
|
||||
fi
|
||||
|
||||
if [ -f "pub/res/d6/d6_tools.php" ]; then
|
||||
cp pub/res/d6/d6_tools.php "$BACKUP_DIR/d6_tools.php.bak"
|
||||
echo " - pub/res/d6/d6_tools.php sauvegardé"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} ✓ Sauvegarde effectuée dans $BACKUP_DIR${NC}"
|
||||
|
||||
# 3. Vérification de la connexion à la base de données
|
||||
echo -e "${YELLOW}3. Test de connexion à la base de données...${NC}"
|
||||
|
||||
# Lire les paramètres depuis .env
|
||||
source .env
|
||||
|
||||
# Tester la connexion MySQL
|
||||
mysql -h"$DB_HOST" -u"$DB_USERNAME" -p"$DB_PASSWORD" -e "SELECT 1" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN} ✓ Connexion à MariaDB réussie${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Impossible de se connecter à MariaDB${NC}"
|
||||
echo " Vérifiez les paramètres dans .env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. Exécution du script de migration SQL
|
||||
echo -e "${YELLOW}4. Migration de la base de données...${NC}"
|
||||
if confirm " Voulez-vous exécuter le script de migration SQL?"; then
|
||||
echo " Exécution de migrate_to_cleo.sql..."
|
||||
mysql -h"$DB_HOST" -u"$DB_USERNAME" -p"$DB_PASSWORD" < migration/migrate_to_cleo.sql
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN} ✓ Migration SQL effectuée${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Erreur lors de la migration SQL${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo " Migration SQL ignorée"
|
||||
fi
|
||||
|
||||
# 5. Activation des nouveaux fichiers
|
||||
echo -e "${YELLOW}5. Activation de la nouvelle architecture...${NC}"
|
||||
|
||||
# Remplacer conf.php
|
||||
if [ -f "config/conf_new.php" ]; then
|
||||
mv config/conf.php config/conf_old.php 2>/dev/null || true
|
||||
cp config/conf_new.php config/conf.php
|
||||
echo -e "${GREEN} ✓ config/conf.php mis à jour${NC}"
|
||||
fi
|
||||
|
||||
# Remplacer d6_tools.php
|
||||
if [ -f "pub/res/d6/d6_tools_new.php" ]; then
|
||||
mv pub/res/d6/d6_tools.php pub/res/d6/d6_tools_old.php 2>/dev/null || true
|
||||
cp pub/res/d6/d6_tools_new.php pub/res/d6/d6_tools.php
|
||||
echo -e "${GREEN} ✓ d6_tools.php mis à jour${NC}"
|
||||
fi
|
||||
|
||||
# 6. Vérification des permissions
|
||||
echo -e "${YELLOW}6. Vérification des permissions...${NC}"
|
||||
chmod 644 config/conf.php
|
||||
chmod 644 pub/res/d6/d6_tools.php
|
||||
chmod 600 .env
|
||||
echo -e "${GREEN} ✓ Permissions mises à jour${NC}"
|
||||
|
||||
# 7. Création du répertoire de logs si nécessaire
|
||||
echo -e "${YELLOW}7. Création du répertoire de logs...${NC}"
|
||||
mkdir -p log
|
||||
chmod 755 log
|
||||
echo -e "${GREEN} ✓ Répertoire log créé${NC}"
|
||||
|
||||
# 8. Test de l'application
|
||||
echo -e "${YELLOW}8. Test de connexion à la base CLEO...${NC}"
|
||||
php -r "
|
||||
require_once 'config/Database.php';
|
||||
try {
|
||||
\$db = Database::getInstance();
|
||||
echo ' ✓ Connexion PDO réussie' . PHP_EOL;
|
||||
\$result = \$db->fetchOne('SELECT COUNT(*) as nb FROM users');
|
||||
echo ' ✓ ' . \$result['nb'] . ' utilisateurs trouvés' . PHP_EOL;
|
||||
} catch (Exception \$e) {
|
||||
echo ' ✗ Erreur: ' . \$e->getMessage() . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN} ✓ Tests réussis${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Tests échoués${NC}"
|
||||
echo " Utilisez ./migration/rollback.sh pour revenir en arrière"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo -e "${GREEN} Déploiement terminé avec succès! ${NC}"
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo ""
|
||||
echo "Prochaines étapes:"
|
||||
echo "1. Testez l'application dans votre navigateur"
|
||||
echo "2. Vérifiez les logs dans le répertoire /log"
|
||||
echo "3. En cas de problème, utilisez ./migration/rollback.sh"
|
||||
echo ""
|
||||
echo "Configuration actuelle:"
|
||||
echo " - Base de données: $DB_DATABASE sur $DB_HOST"
|
||||
echo " - Environnement: $APP_ENV"
|
||||
echo " - Debug: $APP_DEBUG"
|
||||
echo ""
|
||||
37
migration/execute_marches_listes.sh
Normal file
37
migration/execute_marches_listes.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Script pour créer la table marches_listes"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "Veuillez exécuter les commandes suivantes :"
|
||||
echo ""
|
||||
echo "1. Connectez-vous à IN3 :"
|
||||
echo " ssh root@195.154.80.116"
|
||||
echo ""
|
||||
echo "2. Connectez-vous au conteneur maria3 :"
|
||||
echo " incus exec maria3 -- bash"
|
||||
echo ""
|
||||
echo "3. Connectez-vous à MariaDB :"
|
||||
echo " mariadb -u root"
|
||||
echo ""
|
||||
echo "4. Sélectionnez la base de données :"
|
||||
echo " USE cleo;"
|
||||
echo ""
|
||||
echo "5. Créez la table marches_listes :"
|
||||
cat << 'EOF'
|
||||
CREATE TABLE IF NOT EXISTS `marches_listes` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`fk_marche` int(11) DEFAULT NULL,
|
||||
`terme_achat` varchar(255) DEFAULT NULL,
|
||||
`date_created` datetime DEFAULT current_timestamp(),
|
||||
`date_modified` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_fk_marche` (`fk_marche`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
EOF
|
||||
echo ""
|
||||
echo "6. Vérifiez que la table est créée :"
|
||||
echo " SHOW TABLES LIKE 'marches_listes';"
|
||||
echo ""
|
||||
echo "7. Quittez MariaDB :"
|
||||
echo " EXIT;"
|
||||
196
migration/migrate_to_cleo.sql
Normal file
196
migration/migrate_to_cleo.sql
Normal file
@@ -0,0 +1,196 @@
|
||||
-- Script de migration vers la base unique CLEO
|
||||
-- Date: 2025-09-11
|
||||
-- Version: 2.0.1
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 1: Création de la base CLEO
|
||||
-- ==============================================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS `cleo`
|
||||
DEFAULT CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE `cleo`;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 2: Migration des tables depuis uof_linet
|
||||
-- ==============================================================================
|
||||
|
||||
-- Tables métier principales
|
||||
CREATE TABLE IF NOT EXISTS `devis` LIKE `uof_linet`.`devis`;
|
||||
INSERT INTO `devis` SELECT * FROM `uof_linet`.`devis`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `devis_produits` LIKE `uof_linet`.`devis_produits`;
|
||||
INSERT INTO `devis_produits` SELECT * FROM `uof_linet`.`devis_produits`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `devis_histo` LIKE `uof_linet`.`devis_histo`;
|
||||
INSERT INTO `devis_histo` SELECT * FROM `uof_linet`.`devis_histo`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `clients` LIKE `uof_linet`.`clients`;
|
||||
INSERT INTO `clients` SELECT * FROM `uof_linet`.`clients`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `produits` LIKE `uof_linet`.`produits`;
|
||||
INSERT INTO `produits` SELECT * FROM `uof_linet`.`produits`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `produits_familles` LIKE `uof_linet`.`produits_familles`;
|
||||
INSERT INTO `produits_familles` SELECT * FROM `uof_linet`.`produits_familles`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `marches` LIKE `uof_linet`.`marches`;
|
||||
INSERT INTO `marches` SELECT * FROM `uof_linet`.`marches`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users` LIKE `uof_linet`.`users`;
|
||||
INSERT INTO `users` SELECT * FROM `uof_linet`.`users`;
|
||||
|
||||
-- Tables de référence (x_*)
|
||||
CREATE TABLE IF NOT EXISTS `x_familles` LIKE `uof_linet`.`x_familles`;
|
||||
INSERT INTO `x_familles` SELECT * FROM `uof_linet`.`x_familles`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `x_statuts_devis` LIKE `uof_linet`.`x_statuts_devis`;
|
||||
INSERT INTO `x_statuts_devis` SELECT * FROM `uof_linet`.`x_statuts_devis`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `x_clients_types` LIKE `uof_linet`.`x_clients_types`;
|
||||
INSERT INTO `x_clients_types` SELECT * FROM `uof_linet`.`x_clients_types`;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 3: Migration de y_pages depuis uof_frontal
|
||||
-- ==============================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `y_pages` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`script` varchar(50) DEFAULT NULL,
|
||||
`titre` varchar(255) DEFAULT NULL,
|
||||
`description` text,
|
||||
`keywords` text,
|
||||
`admin` tinyint(1) DEFAULT 0,
|
||||
`active` tinyint(1) DEFAULT 1,
|
||||
`mail` tinyint(1) DEFAULT 0,
|
||||
`form` tinyint(1) DEFAULT 0,
|
||||
`sidebar` tinyint(1) DEFAULT 0,
|
||||
`chart` tinyint(1) DEFAULT 0,
|
||||
`agenda` tinyint(1) DEFAULT 0,
|
||||
`autocomplete` tinyint(1) DEFAULT 0,
|
||||
`scheduler` tinyint(1) DEFAULT 0,
|
||||
`osm` tinyint(1) DEFAULT 0,
|
||||
`vuejs` tinyint(1) DEFAULT 0,
|
||||
`files` tinyint(1) DEFAULT 0,
|
||||
`layout` varchar(50) DEFAULT 'default',
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_script` (`script`),
|
||||
KEY `idx_admin` (`admin`),
|
||||
KEY `idx_active` (`active`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Import des données depuis uof_frontal.y_pages
|
||||
INSERT INTO `y_pages` SELECT * FROM `uof_frontal`.`y_pages` WHERE admin = 1;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 4: Migration de users_entites depuis uof_frontal
|
||||
-- ==============================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users_entites` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`appname` varchar(50) DEFAULT NULL,
|
||||
`libelle` varchar(255) DEFAULT NULL,
|
||||
`adresse1` varchar(255) DEFAULT NULL,
|
||||
`adresse2` varchar(255) DEFAULT NULL,
|
||||
`cp` varchar(10) DEFAULT NULL,
|
||||
`ville` varchar(100) DEFAULT NULL,
|
||||
`tel1` varchar(20) DEFAULT NULL,
|
||||
`email` varchar(255) DEFAULT NULL,
|
||||
`http_host` varchar(255) DEFAULT NULL,
|
||||
`groupebase` varchar(50) DEFAULT NULL,
|
||||
`genbase` varchar(50) DEFAULT NULL,
|
||||
`table_users_gen` varchar(100) DEFAULT 'users',
|
||||
`active` tinyint(1) DEFAULT 1,
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_appname` (`appname`),
|
||||
KEY `idx_http_host` (`http_host`),
|
||||
KEY `idx_active` (`active`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Import des données depuis uof_frontal.users_entites
|
||||
INSERT INTO `users_entites` SELECT * FROM `uof_frontal`.`users_entites`;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 5: Création de la table z_logs (depuis la base logs si elle existe)
|
||||
-- ==============================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `z_logs` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`fk_user` int(11) DEFAULT 0,
|
||||
`script` varchar(50) DEFAULT NULL,
|
||||
`user_agent` varchar(100) DEFAULT NULL,
|
||||
`http_host` varchar(100) DEFAULT NULL,
|
||||
`ip_client` varchar(50) DEFAULT NULL,
|
||||
`appname` varchar(50) DEFAULT NULL,
|
||||
`commentaire` text,
|
||||
`date_histo` datetime DEFAULT NULL,
|
||||
`notif` tinyint(1) DEFAULT 0,
|
||||
PRIMARY KEY (`rowid`),
|
||||
KEY `idx_user` (`fk_user`),
|
||||
KEY `idx_date` (`date_histo`),
|
||||
KEY `idx_script` (`script`),
|
||||
KEY `idx_appname` (`appname`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Si la base logs existe, importer les données
|
||||
-- INSERT INTO `z_logs` SELECT * FROM `logs`.`z_logs`;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 6: Mise à jour des configurations
|
||||
-- ==============================================================================
|
||||
|
||||
-- Mise à jour de users_entites pour la nouvelle configuration
|
||||
UPDATE `users_entites`
|
||||
SET
|
||||
`genbase` = 'cleo',
|
||||
`groupebase` = 'cleo',
|
||||
`table_users_gen` = 'users'
|
||||
WHERE `active` = 1;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 7: Création de l'utilisateur pour l'application
|
||||
-- ==============================================================================
|
||||
|
||||
-- Créer l'utilisateur s'il n'existe pas
|
||||
CREATE USER IF NOT EXISTS 'cleo_user'@'%' IDENTIFIED BY 'CleoDev2025!';
|
||||
|
||||
-- Donner tous les privilèges sur la base cleo
|
||||
GRANT ALL PRIVILEGES ON `cleo`.* TO 'cleo_user'@'%';
|
||||
|
||||
-- Rafraîchir les privilèges
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- ==============================================================================
|
||||
-- ÉTAPE 8: Vérifications
|
||||
-- ==============================================================================
|
||||
|
||||
-- Afficher le nombre de lignes par table
|
||||
SELECT 'devis' as table_name, COUNT(*) as nb_lignes FROM devis
|
||||
UNION ALL
|
||||
SELECT 'devis_produits', COUNT(*) FROM devis_produits
|
||||
UNION ALL
|
||||
SELECT 'clients', COUNT(*) FROM clients
|
||||
UNION ALL
|
||||
SELECT 'produits', COUNT(*) FROM produits
|
||||
UNION ALL
|
||||
SELECT 'marches', COUNT(*) FROM marches
|
||||
UNION ALL
|
||||
SELECT 'users', COUNT(*) FROM users
|
||||
UNION ALL
|
||||
SELECT 'y_pages', COUNT(*) FROM y_pages
|
||||
UNION ALL
|
||||
SELECT 'users_entites', COUNT(*) FROM users_entites
|
||||
UNION ALL
|
||||
SELECT 'z_logs', COUNT(*) FROM z_logs;
|
||||
|
||||
-- ==============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- ==============================================================================
|
||||
--
|
||||
-- IMPORTANT: Après exécution de ce script:
|
||||
-- 1. Vérifier que toutes les données ont été correctement migrées
|
||||
-- 2. Mettre à jour le fichier .env avec les nouvelles informations de connexion
|
||||
-- 3. Tester l'application avec la nouvelle base
|
||||
-- 4. Si tout est OK, sauvegarder les anciennes bases avant suppression
|
||||
--
|
||||
113
migration/rollback.sh
Executable file
113
migration/rollback.sh
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de rollback pour revenir à l'ancienne architecture
|
||||
# Version: 2.0.1
|
||||
# Date: 2025-09-11
|
||||
|
||||
set -e
|
||||
|
||||
# Couleurs pour l'affichage
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${YELLOW}================================================${NC}"
|
||||
echo -e "${YELLOW} Rollback CLEO - Retour architecture legacy ${NC}"
|
||||
echo -e "${YELLOW}================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Vérifier qu'on est dans le bon répertoire
|
||||
if [ ! -f "index.php" ] || [ ! -d "config" ]; then
|
||||
echo -e "${RED}Erreur: Ce script doit être exécuté depuis la racine du projet CLEO${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fonction pour demander confirmation
|
||||
confirm() {
|
||||
read -p "$1 [y/N] " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
echo -e "${YELLOW}ATTENTION: Cette opération va restaurer l'ancienne configuration${NC}"
|
||||
if ! confirm "Voulez-vous continuer?"; then
|
||||
echo "Rollback annulé"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}1. Restauration des fichiers originaux...${NC}"
|
||||
|
||||
# Restaurer conf.php
|
||||
if [ -f "config/conf_old.php" ]; then
|
||||
mv config/conf.php config/conf_new_backup.php 2>/dev/null || true
|
||||
mv config/conf_old.php config/conf.php
|
||||
echo -e "${GREEN} ✓ config/conf.php restauré${NC}"
|
||||
else
|
||||
# Chercher dans les backups
|
||||
LATEST_BACKUP=$(ls -td backup_* 2>/dev/null | head -1)
|
||||
if [ -n "$LATEST_BACKUP" ] && [ -f "$LATEST_BACKUP/conf.php.bak" ]; then
|
||||
cp "$LATEST_BACKUP/conf.php.bak" config/conf.php
|
||||
echo -e "${GREEN} ✓ config/conf.php restauré depuis $LATEST_BACKUP${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Impossible de restaurer config/conf.php${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Restaurer d6_tools.php
|
||||
if [ -f "pub/res/d6/d6_tools_old.php" ]; then
|
||||
mv pub/res/d6/d6_tools.php pub/res/d6/d6_tools_new_backup.php 2>/dev/null || true
|
||||
mv pub/res/d6/d6_tools_old.php pub/res/d6/d6_tools.php
|
||||
echo -e "${GREEN} ✓ d6_tools.php restauré${NC}"
|
||||
else
|
||||
# Chercher dans les backups
|
||||
LATEST_BACKUP=$(ls -td backup_* 2>/dev/null | head -1)
|
||||
if [ -n "$LATEST_BACKUP" ] && [ -f "$LATEST_BACKUP/d6_tools.php.bak" ]; then
|
||||
cp "$LATEST_BACKUP/d6_tools.php.bak" pub/res/d6/d6_tools.php
|
||||
echo -e "${GREEN} ✓ d6_tools.php restauré depuis $LATEST_BACKUP${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Impossible de restaurer d6_tools.php${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}2. Configuration de la base de données...${NC}"
|
||||
echo -e "${YELLOW} Note: Les bases uof_frontal et uof_linet doivent être disponibles${NC}"
|
||||
echo -e "${YELLOW} La base 'cleo' reste en place pour référence future${NC}"
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}3. Nettoyage...${NC}"
|
||||
|
||||
# Conserver les nouveaux fichiers pour référence
|
||||
if [ ! -d "migration/new_architecture_backup" ]; then
|
||||
mkdir -p migration/new_architecture_backup
|
||||
fi
|
||||
|
||||
# Sauvegarder les nouveaux fichiers
|
||||
[ -f "config/conf_new.php" ] && cp config/conf_new.php migration/new_architecture_backup/
|
||||
[ -f "config/Database.php" ] && cp config/Database.php migration/new_architecture_backup/
|
||||
[ -f "pub/res/d6/d6_tools_new.php" ] && cp pub/res/d6/d6_tools_new.php migration/new_architecture_backup/
|
||||
[ -f ".env" ] && cp .env migration/new_architecture_backup/
|
||||
[ -f ".env.example" ] && cp .env.example migration/new_architecture_backup/
|
||||
|
||||
echo -e "${GREEN} ✓ Nouveaux fichiers sauvegardés dans migration/new_architecture_backup/${NC}"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo -e "${GREEN} Rollback terminé! ${NC}"
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo ""
|
||||
echo "L'application utilise maintenant l'ancienne architecture avec:"
|
||||
echo " - Base uof_frontal pour la configuration"
|
||||
echo " - Base uof_linet pour les données métier"
|
||||
echo ""
|
||||
echo "Les fichiers de la nouvelle architecture sont conservés dans:"
|
||||
echo " - migration/new_architecture_backup/"
|
||||
echo ""
|
||||
echo "Pour réessayer la migration plus tard:"
|
||||
echo " ./migration/deploy_new_architecture.sh"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user