Initial commit - Mini CMS complet (PHP + Docker + MinIO)
This commit is contained in:
252
forum-project/README.md
Normal file
252
forum-project/README.md
Normal file
@@ -0,0 +1,252 @@
|
||||
# 📰 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.
|
||||
Reference in New Issue
Block a user