252 lines
6.2 KiB
Markdown
252 lines
6.2 KiB
Markdown
# 📰 Mini CMS — Projet PHP / PDO / MySQL / MinIO / Docker
|
||
|
||
## Description
|
||
|
||
Mini CMS est un projet web de type **Forum / CMS simplifié**, développé en **PHP avec PDO**, utilisant **MySQL** pour la base de données et **MinIO** pour le stockage d’images (compatible S3).
|
||
Il permet de **créer, modifier, supprimer et consulter des articles**, avec un espace utilisateur (photo, bio, profil) et un **panneau d’administration complet**.
|
||
|
||
Ce projet respecte les consignes du **TP : Mini-Projet de Développement Web — CMS Simplifié**.
|
||
|
||
---
|
||
|
||
## ️ Technologies utilisées
|
||
|
||
- 🐘 **PHP 8.2** (avec PDO)
|
||
- 🗄️ **MySQL 8.1**
|
||
- ☁️ **MinIO** (stockage d’images S3)
|
||
- 🐳 **Docker & Docker Compose**
|
||
- 🎨 **HTML5 / CSS3 / Poppins**
|
||
- 🔐 **Sessions / Rôles (admin & auteur)**
|
||
- 💾 **AWS SDK for PHP** (pour communiquer avec MinIO)
|
||
|
||
---
|
||
|
||
## Fonctionnalités principales
|
||
|
||
### Utilisateurs
|
||
- Inscription et connexion sécurisées (`password_hash()` + `password_verify()`).
|
||
- Photo de profil personnalisable (.jpg / .png).
|
||
- Bio (description personnelle).
|
||
- Suppression ou mise à jour de la photo (photo 👤 par défaut si supprimée).
|
||
- Affichage des profils publics avec photo, bio, et liste des articles publiés.
|
||
|
||
### Articles
|
||
- Création, modification et suppression d’articles (titre, contenu, image).
|
||
- Stockage d’images sur **MinIO (bucket `bucketforum`)**.
|
||
- Affichage sur la page d’accueil avec ordre chronologique.
|
||
- Mise en page : **Titre → Image → Contenu**.
|
||
- Affichage des métadonnées (photo de l’auteur, nom, date, lien profil).
|
||
- Images redimensionnées proprement, non recadrées.
|
||
|
||
### Administration
|
||
- Tableau de bord admin avec :
|
||
- nombre total d’articles et d’utilisateurs,
|
||
- gestion (suppression) des utilisateurs,
|
||
- suppression et modification d’articles,
|
||
- bouton “Publier un article” stylisé.
|
||
- Suppression **en cascade** : lorsqu’un utilisateur est supprimé, ses articles le sont aussi.
|
||
|
||
### Sécurité
|
||
- Connexion sécurisée à la base via **PDO**.
|
||
- Requêtes préparées pour éviter les injections SQL.
|
||
- Hashage des mots de passe.
|
||
- Vérification de rôle pour restreindre les accès admin.
|
||
- Validation et échappement des champs utilisateurs.
|
||
|
||
---
|
||
|
||
## Installation et exécution
|
||
|
||
### Prérequis
|
||
- **Docker** et **Docker Compose** installés.
|
||
- Le fichier `.env` déjà configuré dans le dossier `infrastructure`.
|
||
|
||
### ⚙️ Étapes
|
||
|
||
#### 1️⃣ Cloner le projet
|
||
```bash
|
||
git clone https://github.com/ton_compte/forum-project.git
|
||
cd infrastructure
|
||
|
||
### Lancer le docker
|
||
docker-compose up --build -d
|
||
|
||
2// Lancer les conteneurs
|
||
docker-compose up --build -d
|
||
|
||
|
||
Démarre :
|
||
|
||
php_app → Apache + PHP
|
||
|
||
mysql_container → MySQL
|
||
|
||
minio_container → stockage
|
||
|
||
4// Vérifier les conteneurs
|
||
docker ps
|
||
|
||
5// Vérifier MySQL
|
||
docker exec -it mysql_container mysql -umyuser -pmypassword forum_database
|
||
SHOW TABLES;
|
||
|
||
6// Vérifier MinIO
|
||
|
||
Accède à http://localhost:9001
|
||
|
||
Login : minioadmin / Password : minioadmin
|
||
Tu dois voir le bucket bucketforum.
|
||
|
||
7// Accéder au site web
|
||
|
||
http://localhost:8080
|
||
|
||
>> Comptes par défaut
|
||
Rôle Identifiant Mot de passe
|
||
Admin admin ayadmin933
|
||
Auteur ayauteur auteur
|
||
Auteur aya ayabmk933
|
||
Auteur tess ayabmk933
|
||
|
||
Structure du projet
|
||
infrastructure/
|
||
├── docker-compose.yml
|
||
├── .env
|
||
[init-schema.sql
|
||
├── init-minio.sh
|
||
├── setup-mysql/
|
||
│ └── schema.sql
|
||
forum-project/
|
||
├── index.php
|
||
├── article.php
|
||
├── add_article.php
|
||
├── edit_article.php
|
||
├── dashboard.php
|
||
├── login.php
|
||
├── register.php
|
||
├── profile.php
|
||
├── profile_view.php
|
||
├── config.php
|
||
├── header.php
|
||
├── footer.php
|
||
├── uploads/
|
||
│ └── profiles/
|
||
└── vendor/
|
||
|
||
>>Base de données
|
||
utilisateurs
|
||
Champ Type
|
||
id INT AUTO_INCREMENT
|
||
username VARCHAR
|
||
password VARCHAR
|
||
role ENUM('admin','auteur')
|
||
profile_picture TEXT
|
||
bio TEXT
|
||
date_inscription DATETIME
|
||
posts
|
||
Champ Type
|
||
id INT AUTO_INCREMENT
|
||
title VARCHAR
|
||
content TEXT
|
||
image_url TEXT
|
||
user_id INT (FK → utilisateurs.id)
|
||
date_creation DATETIME
|
||
|
||
Quand un utilisateur est supprimé, tous ses articles le sont aussi.
|
||
|
||
>> Configuration MinIO (PHP)
|
||
require 'vendor/autoload.php';
|
||
use Aws\S3\S3Client;
|
||
|
||
$s3Client = new S3Client([
|
||
'version' => 'latest',
|
||
'region' => 'us-east-1',
|
||
'endpoint' => 'http://minio:9000',
|
||
'use_path_style_endpoint' => true,
|
||
'credentials' => [
|
||
'key' => 'minioadmin',
|
||
'secret' => 'minioadmin'
|
||
]
|
||
]);
|
||
$bucketName = 'bucketforum';
|
||
|
||
>> Commandes utiles
|
||
Redémarrer le projet
|
||
|
||
docker-compose down && docker-compose up -d
|
||
|
||
Ouvrir un terminal PHP
|
||
|
||
docker exec -it php_app bash
|
||
|
||
Installer le SDK AWS
|
||
|
||
docker exec -it php_app composer require aws/aws-sdk-php
|
||
|
||
Vérifier le bucket MinIO
|
||
|
||
docker exec -it php_app php -r "require 'vendor/autoload.php'; use Aws\S3\S3Client;
|
||
\$s3=new S3Client(['version'=>'latest','region'=>'us-east-1','endpoint'=>'http://minio:9000','use_path_style_endpoint'=>true,'credentials'=>['key'=>'minioadmin','secret'=>'minioadmin']]);
|
||
print_r(\$s3->listObjects(['Bucket'=>'bucketforum']));"
|
||
|
||
>> Design
|
||
|
||
Couleurs : rose / orange / violet
|
||
|
||
Police : Poppins
|
||
|
||
Boutons : dégradés et arrondis
|
||
|
||
Icônes :
|
||
👤 Profil 🕒 Date ✍️ Auteur 📰 Article
|
||
|
||
>< Sécurité
|
||
|
||
Requêtes PDO préparées
|
||
|
||
Hash des mots de passe (bcrypt)
|
||
|
||
Validation stricte des images
|
||
|
||
Sessions sécurisées
|
||
|
||
Contrôle des rôles (admin/auteur)
|
||
|
||
>? Améliorations futures
|
||
|
||
Chat entre utilisateurs
|
||
|
||
Recherche d’articles
|
||
|
||
Pagination
|
||
|
||
Export CSV/PDF
|
||
|
||
Mode sombre
|
||
|
||
><> Dépannage rapide
|
||
Problème Solution
|
||
$pdo non défini Vérifie require_once 'config.php'
|
||
Connexion MySQL impossible Vérifie .env
|
||
Images non visibles Vérifie $s3Client / bucket
|
||
Page blanche Active ini_set('display_errors',1);
|
||
Conteneurs ne démarrent pas docker-compose down && up
|
||
|
||
>> Bonnes pratiques
|
||
|
||
Toujours valider les champs
|
||
|
||
Utiliser htmlspecialchars() pour l’affichage
|
||
|
||
Limiter la taille des uploads
|
||
|
||
Nettoyer les fichiers inutiles du bucket
|
||
|
||
Sauvegarder régulièrement :
|
||
|
||
docker exec -it mysql_container mysqldump -umyuser -pmypassword forum_database > backup.sql
|
||
|
||
>>Projet réalisé dans le cadre du TP — Mini-Projet CMS Simplifié<<
|
||
|
||
Architecture claire (PHP + PDO),
|
||
CRUD complet, gestion de rôles, design moderne et cohérent. |