diff --git a/.gitignore b/.gitignore index 7ad127b45e67cb5b0348aa68f5082cb7018afaf3..c75be66a96499ec2d4a12ca4dda14829540705cd 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,6 @@ vendor/ config/config.ini config/db.ini -composer.lock \ No newline at end of file +composer.lock + +.env \ No newline at end of file diff --git a/composer.json b/composer.json index 9654d2f7e4bfc0280c26ac9b4dbf5d3a9a15223a..7bf10e83481eea9c6ea12dfdf2058be41a4c3411 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,9 @@ "require": { "slim/slim": "2.*", "twig/twig": "~1.0", - "illuminate/database": "4.2.9" + "illuminate/database": "^4.2", + "illuminate/events": "^4.2", + "illuminate/container": "^4.2" }, "autoload":{ "psr-0":{ diff --git a/docker-compose.yml b/docker-compose.yml index bfb5d4edf11f42228d8614b8248167af9083c1f4..cb95ac096d81f0dd9f1a491b1c6461e5218655ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,35 @@ -version: '3.8' services: - php: + php: build: './docker/php' - user: ${UID:-1000}:${GID:-1000} ports: - ${PHP_PORT:-8080}:80 volumes: - ./:/var/www/html - command: php -S 0.0.0.0:80 -t . \ No newline at end of file + command: php -S 0.0.0.0:80 -t . + depends_on: + - mysql + + mysql: + image: mysql:8.0 + ports: + - '3307:3306' + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: root + MYSQL_USER: rootsCAP + MYSQL_PASSWORD: root + volumes: + - ./docker/mysql/data:/var/lib/mysql + - ./docker/mysql/my.cnf:/etc/mysql/my.cnf + + adminer: + image: adminer:latest + ports: + - ${ADMINER_PORT:-8081}:8080 + environment: + ADMINER_DEFAULT_SERVER: mysql + ADMINER_DEFAULT_USER: rootsCAP + ADMINER_DEFAULT_PASSWORD: root + ADMINER_DEFAULT_DB: root + depends_on: + - mysql \ No newline at end of file diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile index f5a8e9f23585f116bd5ec7f4975ca9f0838de11b..41087ad8782c3e31c72caa151d4de68a7f769cd6 100644 --- a/docker/php/Dockerfile +++ b/docker/php/Dockerfile @@ -1,4 +1,4 @@ -FROM php:7.4 +FROM php:8.4 RUN apt update RUN apt install git zip unzip libxml2-dev -y diff --git a/notes.md b/notes.md new file mode 100644 index 0000000000000000000000000000000000000000..96d7044086de92b1dba65ecb1a727f74a451501d --- /dev/null +++ b/notes.md @@ -0,0 +1,234 @@ +# Projet Racoin - Notes d'analyse et de maintenance + +## Fiche d'identification du projet + +**Nom du projet :** Racoin +**URL du dépôt :** https://gitlab.univ-lorraine.fr/sauder2/racoin +**Date de début d'analyse :** 03/03/2025 +**Analysé par :** [Clément JEANDIDIER] + +## Première étape - L'analyse + +### Langages utilisés +- **PHP 7.4** - Langage principal du backend +- **JavaScript** - Utilisé pour les interactions côté client +- **SCSS** - Préprocesseur CSS pour les styles +- **SQL** - Pour les interactions avec la base de données MySQL + +### Frameworks principaux +- **Twig 1.0** - Moteur de templates pour générer les vues HTML +- **Illuminate/Database** - Composant ORM de Laravel pour la gestion de base de données +- **jQuery 1.11.1** - Bibliothèque JavaScript pour simplifier les manipulations du DOM +- **Structure MVC personnalisée** - Architecture de code suivant le pattern Model-View-Controller + +### But général de l'application +C'est une application de petites annonces entre particuliers inspirée de Leboncoin. Elle permet : +- La publication d'annonces par des utilisateurs +- La recherche d'annonces par catégorie, région, département +- La gestion des photos pour les annonces +- La navigation par filtres (catégories, sous-catégories, localisation) +- La consultation détaillée des annonces + +### Première estimation pour faire fonctionner l'application +- **Environnement serveur** : + - Serveur web (Apache ou Nginx) + - PHP 7.4 avec extension pdo_mysql + - MySQL 5.7 + - Composer pour gérer les dépendances + +- **Configuration nécessaire** : + - Mise à jour du docker-compose.yml + - Création du fichier config/config.ini pour la connexion à la base de données + - Importation des scripts SQL (bdd.sql, insert.sql, apikey.sql) + +- **Dépendances PHP requises** : + - illuminate/database + - illuminate/events + - illuminate/container + - twig/twig + +## Deuxième étape - La prise en main + +### Mise en fonctionnement de l'application + +J'ai réussi à faire fonctionner l'application en suivant ces étapes : + +1. **Création d'une configuration Docker** : + - docker-compose.yml avec services PHP, MySQL et Adminer + - Dockerfile pour PHP 7.4 avec les extensions nécessaires + +2. **Configuration de la base de données** : + - Création du fichier config/config.ini pour la connexion + + +3. **Installation des dépendances** : + ```bash + composer require "illuminate/database" + composer require "illuminate/events" + composer require "illuminate/container" + ``` + +4. **Résolution des problèmes de configuration** : + - Correction des chemins d'accès aux fichiers + - Ajustement des paramètres de connexion à la base de données + +### Mode d'emploi pour faire fonctionner l'application + +#### Prérequis +- Docker et docker-compose installés sur votre machine + +#### Étapes d'installation + +1. **Cloner le dépôt** : + ```bash + git clone https://gitlab.univ-lorraine.fr/sauder2/racoin.git + cd racoin + ``` + +2. **Créer le fichier docker-compose.yml** : + ```yaml + services: + php: + build: './docker/php' + ports: + - ${PHP_PORT:-8080}:80 + volumes: + - ./:/var/www/html + command: php -S 0.0.0.0:80 -t . + depends_on: + - mysql + + mysql: + image: mysql:5.7 + ports: + - '3306:3306' + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: root + MYSQL_USER: rootsCAP + MYSQL_PASSWORD: root + volumes: + - ./docker/mysql/data:/var/lib/mysql + + adminer: + image: adminer:latest + ports: + - ${ADMINER_PORT:-8081}:8080 + environment: + ADMINER_DEFAULT_SERVER: mysql + ADMINER_DEFAULT_USER: rootsCAP + ADMINER_DEFAULT_PASSWORD: root + ADMINER_DEFAULT_DB: root + depends_on: + - mysql + ``` + +3. **Créer le Dockerfile pour PHP** : + ```dockerfile + # Fichier à placer dans docker/php/Dockerfile + FROM php:7.4 + + RUN apt update + RUN apt install git zip unzip libxml2-dev -y + + RUN docker-php-ext-install pdo_mysql + + COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + ENV COMPOSER_ALLOW_SUPERUSER=1 + + WORKDIR /var/www/html + ``` + +4. **Créer le fichier de configuration de la base de données** : + +##### driver="mysql" +##### host="mysql" +##### database="root" +##### username="root" +##### password="root" +##### charset="utf8" + + +5. **Lancer les conteneurs Docker** : + ```bash + docker-compose up -d + ``` + +6. **Installer les dépendances PHP** : + ```bash + docker-compose exec php composer require "illuminate/database" + docker-compose exec php composer require "illuminate/events" + docker-compose exec php composer require "illuminate/container" + ``` + + +8. **Accès à l'application** : + - Site web : http://localhost:8080 + - Adminer (gestion de base de données) : http://localhost:8081 + - Système : MySQL + - Serveur : mysql + - Utilisateur : root + - Mot de passe : root + - Base de données : root + +9. **Injection des données** : + - Importer les fichiers SQL dans Adminer (bdd.sql, insert.sql, apikey.sql) dans la section +"Requête SQL". + +### Dépendances non maintenues + +1. **PHP 7.4** + - Support terminé depuis novembre 2022 + - Risques de sécurité potentiels + - Alternative : PHP 8.4 (dernière version stable) + +2. **jQuery 1.11.1** + - Version très ancienne (actuelle : 3.7.x) + - Vulnérabilités de sécurité connues + - Alternative : jQuery 3.7.x ou JavaScript moderne (ES6+) + +3. **Twig 1.0** + - Version obsolète + - Alternative : Twig 3.x + +4**Illuminate/Database (version à confirmer)** + - Si une version ancienne est utilisée, elle pourrait présenter des risques de sécurité + - Alternative : Mettre à jour vers la dernière version compatible + +## Troisième étape - La maintenance + +### Mises à jour recommandées + +1. **Mise à jour de PHP 7.4 vers PHP 8.4** + - Modifier le Dockerfile pour utiliser `FROM php:8.4` + - Tester la compatibilité du code existant + - Mettre à jour les éventuelles fonctionnalités dépréciées + +2. **Mise à jour des dépendances Composer** + - Mettre à jour le fichier composer.json pour spécifier des versions plus récentes + - Exécuter `composer update` pour installer les nouvelles versions + +3**Mise à jour de jQuery** + - Remplacer jquery-1.11.1.min.js par la version 3.7.x + - Tester la compatibilité avec le code JavaScript existant + +### TODO list des améliorations +| Amélioration | Temps estimé (1-10) | Impact estimé (1-10) | Description | +|-------------------------------------|---------------------|----------------------|-------------| +| Mise à jour PHP 7.4 → 8.4 | 1 | 9 | Amélioration de la sécurité, des performances et de la maintenabilité | +| Mise à jour jQuery | 1 | 4 | Correction de vulnérabilités de sécurité et amélioration des performances | +| Implémentation de tests automatisés | 7 | 9 | Assurance de la stabilité lors des futures mises à jour | +| Refactoring MVC | 9 | 8 | Amélioration de la structure du code et de la maintenabilité | +| Modernisation du frontend | 7 | 7 | Amélioration de l'expérience utilisateur et de la compatibilité mobile | +| Amélioration de la sécurité | 7 | 10 | Protection contre les injections SQL, XSS et CSRF | +| Documentation technique | 4 | 6 | Facilitation de la maintenance future et de l'onboarding | +| Optimisation des requêtes SQL | 6 | 8 | Amélioration des performances et réduction de la charge serveur | +| Gestion des erreurs & logging | 3 | 7 | Meilleure détection et résolution des problèmes | + +## Quatrième étape - Améliorations réalisées + + +##### Configuration Docker: Création d'un environnement Docker complet avec PHP, MySQL et Adminer +##### Correction de connexion à la base de données: Création du fichier config.ini avec les paramètres appropriés +##### Installation des dépendances: Configuration de Composer et installation des bibliothèques requises +##### Documentation: Création d'un guide complet d'installation et de déploiement