Une application fullstack utilisant Symfony 7.2 pour le backend, React pour le frontend, et une infrastructure Docker complète.
- Docker et Docker Compose installés sur votre machine
- Git
- Un terminal
- Minimum 4GB de RAM disponible
symfony-react-app/
├── back/ # Backend Symfony
├── front/ # Frontend React
└── docker/ # Configuration Docker
├── nginx/ # Configuration Nginx
├── php/ # Configuration PHP-FPM
└── ...
-
Cloner le projet
git clone [URL_DU_REPO] cd symfony-react-app
-
Configuration des variables d'environnement
Créez un fichier
.env
à la racine du projet backend :cd back cp .env.example .env
Ajustez les variables suivantes dans le fichier
.env
:DATABASE_URL="mysql://user:password@mysql:3306/app_db?serverVersion=8.0"
-
Démarrage des conteneurs Docker
docker-compose up -d
-
Installation des dépendances Backend
docker exec -it php composer install
Note importante: Les dépendances Symfony (dossier vendor) sont installées directement dans le conteneur Docker PHP. Le dossier vendor n'est pas synchronisé avec votre machine locale pour des raisons de performance. Si vous avez besoin d'accéder aux dépendances, utilisez
docker exec -it php bash
pour entrer dans le conteneur. -
Création et migration de la base de données
docker exec -it php php bin/console doctrine:database:create docker exec -it php php bin/console doctrine:migrations:migrate
Une fois l'installation terminée, vous pouvez accéder aux différents services :
- Frontend (React) : http://localhost:3000
- Backend (Symfony) : http://localhost:80
- PHPMyAdmin : http://localhost:8080
- Utilisateur : user (selon votre configuration)
- Mot de passe : password (selon votre configuration)
# Démarrer les conteneurs
docker-compose up -d
# Arrêter les conteneurs
docker-compose down
# Voir les logs
docker-compose logs -f
# Reconstruire les images
docker-compose build
# Accéder au conteneur PHP
docker exec -it php bash
# Créer une migration
docker exec -it php php bin/console make:migration
# Exécuter les migrations
docker exec -it php php bin/console doctrine:migrations:migrate
# Vider le cache
docker exec -it php php bin/console cache:clear
- Framework : Symfony 7.2
- PHP : 8.3
- Base de données : MySQL 8.0
- Bundles principaux :
- doctrine/doctrine-bundle
- symfony/security-bundle
- nelmio/cors-bundle
- Framework : React
- Port : 3000
- Nginx (serveur web)
- PHP-FPM 8.3
- MySQL 8.0
- PHPMyAdmin
- Conteneur Frontend React
Si vous rencontrez des problèmes de permissions avec les fichiers générés par Symfony :
docker exec -it php chown -R www-data:www-data var/
Vérifiez que :
- Le service MySQL est bien démarré
- Les informations de connexion dans le
.env
sont correctes - La base de données existe
Si vous rencontrez des problèmes avec les dépendances :
# Nettoyer le cache Composer dans le conteneur
docker exec -it php composer clear-cache
# Réinstaller toutes les dépendances
docker exec -it php composer install --no-cache
# Vérifier les dépendances installées
docker exec -it php composer show
Pour travailler efficacement sur le projet :
- Le hot-reload est activé sur le frontend (http://localhost:3000)
- Les modifications du backend sont immédiatement prises en compte
- XDebug est configuré pour le débogage (configuration IDE nécessaire)
Pour toute question ou problème :
- Consultez la documentation officielle de Symfony ou React
- Ouvrez une issue sur le dépôt GitHub du projet
L'application utilise JWT (JSON Web Tokens) pour l'authentification. Voici les endpoints disponibles :
Avant de pouvoir utiliser l'authentification JWT, vous devez générer les clés :
# Créer le dossier pour les clés
mkdir -p config/jwt
# Générer la clé privée
openssl genpkey -out config/jwt/private.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -pass pass:your_secret_passphrase
# Générer la clé publique
openssl pkey -in config/jwt/private.pem -out config/jwt/public.pem -pubout -passin pass:your_secret_passphrase
Assurez-vous de :
- Remplacer
your_secret_passphrase
par une passphrase sécurisée - Configurer la même passphrase dans votre fichier
.env.local
- Ne jamais commiter les clés JWT dans Git
-
Login :
POST /api/login_check
{ "email": "user@example.com", "password": "your_password" }
Réponse :
{ "token": "eyJ0eXAiOiJKV1QiLC..." }
-
Register :
POST /api/register
{ "email": "user@example.com", "password": "your_password" }
-
Get User Info :
GET /api/me
Headers requis :Authorization: Bearer {your_jwt_token}
Pour accéder aux routes protégées, incluez le token JWT dans le header Authorization :
Authorization: Bearer {your_jwt_token}
Le token a une durée de validité de 1 heure. Après expiration, vous devrez vous reconnecter.
- Les clés JWT sont stockées dans
config/jwt/
- Les fichiers
.pem
sont ignorés par Git - La passphrase est stockée dans les variables d'environnement
- Chaque environnement (dev, staging, prod) doit avoir ses propres clés
- Les tokens expirent après 1 heure