Initial commit - Mini CMS complet (PHP + Docker + MinIO)

This commit is contained in:
Aya Tess tess
2025-11-01 16:42:38 +01:00
commit 9a57013505
3035 changed files with 131442 additions and 0 deletions

252
forum-project/README.md Normal file
View 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 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
```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 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.