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:
2025-09-12 15:45:52 +02:00
parent 046c23f2d2
commit 77e7cf5d85
29 changed files with 181755 additions and 467 deletions

105
deploy-cleo-dev.sh Executable file
View File

@@ -0,0 +1,105 @@
#!/bin/bash
# Script de déploiement de Cleo vers l'environnement de développement
cd /home/pierre/dev/cleo
# Configuration du serveur hôte Debian 12
HOST_SSH_HOST=195.154.80.116 # Adresse IP du serveur hôte
HOST_SSH_USER=root # Utilisateur SSH sur le serveur hôte
HOST_SSH_PORT=22 # Port SSH du serveur hôte
HOST_SSH_KEY=/home/pierre/.ssh/id_rsa_mbpi # Clé SSH privée pour accéder au serveur hôte
# Configuration du conteneur Incus hébergeant cette application
CT_PROJECT_NAME=default # Nom du projet Incus où se trouve le conteneur
CT_NAME=dva-front # Nom du conteneur Incus
CT_IP=13.23.33.42 # IP interne du conteneur Incus
CT_SSH_USER=root # Utilisateur SSH dans le conteneur
CT_SSH_PORT=22 # Port SSH interne du conteneur
CT_SSH_KEY=/root/.ssh/id_rsa_in3_pierre # Clé SSH privée pour accéder au conteneur
# Configuration de l'application
DOMAIN_NAME=dcleo.unikoffice.com # Nom de domaine du site
SERVER_PORT=3000 # Port du serveur Node.js
ADMIN_PORT=3001 # Port du serveur d'administration
DEPLOY_DIR=/var/www # Répertoire de déploiement sur le conteneur
APP_NAME=cleo # Nom de l'application et du fichier de config nginx
# Propriétaire et groupe pour les fichiers et dossiers de destination
OWNER=nginx
GROUP=nginx
# Vérifier que les variables nécessaires sont définies
if [ -z "$HOST_SSH_HOST" ] || [ -z "$HOST_SSH_USER" ] || [ -z "$CT_NAME" ] || [ -z "$CT_PROJECT_NAME" ]; then
echo "Erreur: Variables HOST_SSH_HOST, HOST_SSH_USER, CT_NAME et CT_PROJECT_NAME requises dans $ENV_FILE"
exit 1
fi
# Variables pour les alertes (optionnelles)
ALERT_EMAIL=${ALERT_EMAIL:-""}
DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL:-""}
# Utiliser les valeurs par défaut si non définies
HOST_SSH_PORT=${HOST_SSH_PORT:-22}
SERVER_PORT=${SERVER_PORT:-3000}
ADMIN_PORT=${ADMIN_PORT:-3001}
DOMAIN_NAME=${DOMAIN_NAME:-$CT_IP}
DEPLOY_DIR=${DEPLOY_DIR:-/var/www}
APP_NAME=${APP_NAME:-d6soft}
SUB_DIR=${SUB_DIR:-web}
# Afficher les paramètres
echo "=== Paramètres de déploiement ==="
echo "Serveur hôte: $HOST_SSH_USER@$HOST_SSH_HOST:$HOST_SSH_PORT"
echo "Projet Incus: $CT_PROJECT_NAME"
echo "Conteneur: $CT_NAME"
echo "Domaine: $DOMAIN_NAME"
echo "Répertoire de déploiement: $DEPLOY_DIR/$APP_NAME"
echo "Propriétaire: $OWNER"
echo "Groupe: $GROUP"
echo "=================================="
# Définir les options SSH
SSH_OPTS="-p $HOST_SSH_PORT"
SCP_OPTS="-P $HOST_SSH_PORT"
if [ ! -z "$HOST_SSH_KEY" ]; then
SSH_OPTS="$SSH_OPTS -i \"$HOST_SSH_KEY\""
SCP_OPTS="$SCP_OPTS -i \"$HOST_SSH_KEY\""
fi
# 1. Copier les fichiers vers le HOST incus
echo "=== Copie des fichiers vers le HOST Incus ==="
rsync -avz --progress --exclude='.git' --exclude='log/*.log' --exclude='pub/files/upload' -e "ssh $SSH_OPTS" ./ $HOST_SSH_USER@$HOST_SSH_HOST:/tmp/$APP_NAME/
# 2. Créer le répertoire de destination dans le conteneur
echo "=== Création du répertoire de destination dans le conteneur ==="
eval "ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST \"incus project switch $CT_PROJECT_NAME\""
eval "ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST \"incus exec $CT_NAME -- mkdir -p $DEPLOY_DIR/$APP_NAME\""
# 3. Transférer les fichiers vers le conteneur Incus
echo "=== Transfert des fichiers vers le conteneur Incus ==="
eval "ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST \"incus file push --recursive /tmp/$APP_NAME/. $CT_NAME/$DEPLOY_DIR/\""
# 4. Configurer les permissions dans le conteneur
echo "=== Configuration des permissions dans le conteneur ==="
eval "ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST \"incus exec $CT_NAME -- sh -c 'chown -R $OWNER:$GROUP $DEPLOY_DIR/$APP_NAME && \
find $DEPLOY_DIR/$APP_NAME -type d -exec chmod 755 {} \\; && \
find $DEPLOY_DIR/$APP_NAME -type f -exec chmod 644 {} \\; && \
mkdir -p $DEPLOY_DIR/$APP_NAME/log && \
chmod 775 $DEPLOY_DIR/$APP_NAME/log && \
chown $OWNER:$GROUP $DEPLOY_DIR/$APP_NAME/log && \
if [ -d $DEPLOY_DIR/$APP_NAME/pub/files/upload ]; then chmod 775 $DEPLOY_DIR/$APP_NAME/pub/files/upload; fi && \
if [ -d $DEPLOY_DIR/$APP_NAME/server/logs ]; then chmod 775 $DEPLOY_DIR/$APP_NAME/server/logs; fi && \
if [ -d $DEPLOY_DIR/$APP_NAME/mda/backend/logs ]; then chmod 775 $DEPLOY_DIR/$APP_NAME/mda/backend/logs; fi && \
if [ -d $DEPLOY_DIR/$APP_NAME/mda/db ]; then chmod 775 $DEPLOY_DIR/$APP_NAME/mda/db; fi'\""
# 5. Nettoyer les fichiers temporaires sur l'hôte
echo "=== Nettoyage des fichiers temporaires sur l'hôte ==="
eval "ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST \"rm -rf /tmp/$APP_NAME\""
echo "==================================================="
echo "Déploiement terminé avec succès !"
echo "==================================================="
echo "Votre site $APP_NAME est maintenant déployé dans le conteneur $CT_NAME."
echo "Chemin de déploiement: $DEPLOY_DIR/$APP_NAME"
echo "Le dossier log a été créé avec les permissions 775 et appartient à $OWNER:$GROUP"