Projet ECF (Évaluation en Cours de Formation) — Titre professionnel Développeur Web et Web Mobile.
Application web de commande de menus traiteur à domicile, développée en PHP 8.2 sans framework.
| Couche | Technologie |
|---|---|
| Serveur | PHP 8.2 + Apache |
| Base de données relationnelle | MariaDB |
| Base de données documents | MongoDB |
| Envoi d'emails | PHPMailer |
| Calcul distance livraison | OpenRouteService API |
| Gestion des dépendances | Composer |
| CSS | Vanilla (mobile-first, thème clair/sombre/auto) |
| JS | ES Modules natifs |
| Visualisations | Plotly.js |
- Catalogue de menus avec filtres (thème, régime, prix, personnes)
- Commande en ligne avec calcul de frais de livraison (distance routière depuis Bordeaux)
- Espace client : suivi commandes, modification, annulation, avis
- Espace employé : gestion commandes, plats, menus, horaires, modération des avis
- Espace admin : gestion des employés, tableau de bord des ventes (MongoDB)
- Authentification sécurisée : sessions, CSRF, bcrypt, réinitialisation de mot de passe
- Emails transactionnels (confirmation, changement de statut, validation d'avis)
L'environnement de dev tourne intégralement dans Docker via _docker/.
- Docker + Docker Compose
- Composer (ou utilisation via le container)
| Service | Container | Accès local |
|---|---|---|
| Application PHP + Apache | ECF-web |
http://localhost:9080 |
| MariaDB | ECF-mariadb |
localhost:9033 |
| MongoDB | ECF-mongodb |
localhost:9017 |
| phpMyAdmin | ECF-phpmyadmin |
http://localhost:9081 |
| MailHog (SMTP de test) | ECF-mailhog |
http://localhost:9025 |
# 1. Copier et remplir le fichier de configuration
cp config/.env.example config/.env
# 2. Lancer les containers (depuis _docker/)
cd _docker
docker compose up -d
# 3. Initialiser la base de données (depuis le container)
docker exec -it ECF-mariadb mysql -u root -p < ../scripts/create_database.sql
# 4. Installer les dépendances PHP
docker exec -it ECF-web composer installLes emails envoyés par l'application sont capturés par MailHog — aucun email réel n'est expédié.
Consulter l'interface : http://localhost:9025
# Application
APP_ENV=development
APP_URL=http://localhost:9080
# MariaDB
MARIADB_ROOT_PASSWORD=
MARIADB_DATABASE=vite_et_gourmand
MARIADB_USER=
MARIADB_PASSWORD=
# MongoDB
MONGO_ROOT_USER=
MONGO_ROOT_PASSWORD=
MONGO_DATABASE=vite_et_gourmand
# SMTP — MailHog en dev
SMTP_HOST=mailhog
SMTP_PORT=1025
SMTP_USE_AUTH=false
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM_EMAIL=contact@vite-et-gourmand.fr
SMTP_FROM_NAME=Vite & Gourmand
SMTP_DEBUG=false
# OpenRouteService (calcul distance livraison)
ORS_API_KEY=Documentation complète de l'environnement Docker :
_docker/README.md
| Service | Fournisseur |
|---|---|
| Hébergement applicatif | Fly.io — région cdg (Paris) |
| MariaDB | Aiven — free tier |
| MongoDB | MongoDB Atlas — free tier |
| SMTP | Mailtrap |
URL de production : https://ecf.fly.dev
Le déploiement utilise le Dockerfile à la racine du projet. La configuration est dans fly.toml.
- HTTPS forcé, machine auto-stop/start
- Volume persistant monté sur
/var/www/html/public/uploadspour les images uploadées - Health check sur
/health.phptoutes les 30 secondes
# Installer le CLI Fly.io puis :
fly deployÀ configurer via fly secrets set ou l'interface Fly.io :
fly secrets set DB_HOST=<aiven-host> \
DB_NAME=vite_et_gourmand \
DB_USER=<user> \
DB_PASS=<password> \
MONGO_HOST=<atlas-host> \
MONGO_URI=<uri> \
MONGO_DATABASE=vite_et_gourmand \
SMTP_HOST=smtp.mailtrap.io \
SMTP_PORT=587 \
SMTP_USE_AUTH=true \
SMTP_USER=rapi \
SMTP_PASSWORD=<api-key> \
SMTP_FROM_EMAIL=noreply@ecf.rodweb.dev \
ORS_API_KEY=<key>La connexion MariaDB en production utilise SSL avec le certificat Aiven (
config/ssl/aiven-ca.pem), activé automatiquement lorsqueAPP_ENV=production.
ECF/
├── _docker/ Environnement de développement Docker
│ ├── docker-compose.yml
│ ├── Dockerfile Image PHP 8.2 + Apache (dev)
│ ├── config/ php.ini, .env
│ └── README.md
├── _documentation/
│ ├── design / mockups et wireframes
│ ├── MCD_MLD.md
│ ├── Mode d'emploi.pdf
│ └── PROJECT.md
├── config/
│ └── ssl/ Certificat CA Aiven (prod)
├── public/ DocumentRoot
│ ├── site.webmanifest Favicons
│ ├── index.php Point d'entrée unique
│ ├── health.php Health check Fly.io
│ ├── css/
│ ├── js/
│ ├── img/
│ └── uploads/ Images menus et plats (persistées)
├── scripts/
│ ├── create_database.sql Schéma + données initiales
│ ├── test_data.sql Données fictives pour test
│ └── seed_mongodb.php script d'insertion de données pour les graphiques
├── src/
│ ├── Controllers/
│ ├── Models/
│ ├── Core/ Router, Session, Security, Mailer…
│ └── Config/ Database, Smtp, MongoDB
├── templates/ layout.php, partials/, emails/
├── views/ auth/, user/, menus/, orders/, employe/, admin/
├── vendor/ Dépendances Composer
├── Dockerfile Image de production
├── fly.toml Configuration Fly.io
└── composer.jsonDocumentation technique détaillée (architecture, routes, contrôleurs, modèles, CSS, JS) :
_documentation/PROJECT.md
| Champ | Valeur |
|---|---|
admin@vite-et-gourmand.fr |
|
| Mot de passe | Dans le document "Copie à rendre" |
À changer immédiatement après la première connexion en production.