Files
mini-cms/forum-project
2025-11-01 16:42:38 +01:00
..

📰 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 dimages (compatible S3).
Il permet de créer, modifier, supprimer et consulter des articles, avec un espace utilisateur (photo, bio, profil) et un panneau dadministration 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 dimages 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 darticles (titre, contenu, image).
  • Stockage dimages sur MinIO (bucket bucketforum).
  • Affichage sur la page daccueil avec ordre chronologique.
  • Mise en page : Titre → Image → Contenu.
  • Affichage des métadonnées (photo de lauteur, nom, date, lien profil).
  • Images redimensionnées proprement, non recadrées.

Administration

  • Tableau de bord admin avec :
    • nombre total darticles et dutilisateurs,
    • gestion (suppression) des utilisateurs,
    • suppression et modification darticles,
    • bouton “Publier un article” stylisé.
  • Suppression en cascade : lorsquun 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

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 darticles

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 laffichage

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.