Un système complet de vente et distribution d'ebooks avec gestion sécurisée des téléchargements.
- Catalogue d'ebooks avec recherche, filtrage et pagination
- Panier d'achat et processus de commande complet
- Système de paiement sécurisé via Stripe/PayPal
- Distribution automatique des ebooks après achat
- Liens de téléchargement temporaires et sécurisés (valides 48h)
- Limitation du nombre de téléchargements (max 3 par défaut)
- Emails automatiques avec instructions de téléchargement
- Interface administrateur pour gérer les ebooks et les commandes
- Multi-langue (français et anglais)
- Responsive design pour tous les appareils
- Déploiement automatique vers l'hébergement via GitHub Actions
- React avec TypeScript
- Vite pour le bundling
- Tailwind CSS pour le styling
- shadcn/ui pour les composants UI
- React Router pour la navigation
- React Context pour la gestion d'état
- Node.js avec Express
- MongoDB pour la base de données
- JWT pour l'authentification
- Nodemailer pour l'envoi d'emails
- Mongoose pour l'ORM
- Bcrypt pour le hachage des mots de passe
- GitHub Actions pour l'intégration continue et le déploiement
- SSH pour le transfert sécurisé des fichiers vers l'hébergement
- Node.js (v18+)
- MongoDB (local ou Atlas)
- Un compte SMTP pour l'envoi d'emails (ex: Gmail, SendGrid)
- Un compte Stripe ou PayPal pour les paiements (en production)
git clone https://github.com/Christ-Roy/ebook-store-blueprint.git
cd ebook-store-blueprint# Installation des dépendances frontend
npm install
# Installation des dépendances backend
cd server
npm install
cd ..Créez un fichier .env dans le dossier server en vous basant sur le fichier .env.example :
cp server/.env.example server/.envModifiez le fichier .env avec vos propres paramètres :
# Configuration du serveur
PORT=5000
NODE_ENV=development
# MongoDB
MONGODB_URI=mongodb://localhost:27017/ebook-store
# JWT
JWT_SECRET=votre_clé_secrète_très_longue_et_aléatoire
JWT_EXPIRES_IN=30d
JWT_COOKIE_EXPIRES_IN=30
# Email
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USERNAME=votre-email@gmail.com
EMAIL_PASSWORD=votre-mot-de-passe-app
EMAIL_FROM=Ebook Store <votre-email@gmail.com>
# Téléchargements
DOWNLOAD_LINK_EXPIRY=48h
MAX_DOWNLOADS=3
# URL frontend
FRONTEND_URL=http://localhost:3000
# Chemin des ebooks
EBOOKS_PATH=../assets/ebooks
# Démarrer le serveur
cd server
npm start
# Dans un autre terminal, importer les ebooks
curl -X POST http://localhost:5000/api/ebooks/importOu bien connectez-vous en tant qu'administrateur et utilisez l'interface d'administration pour importer les ebooks.
# Dans un terminal, démarrer le serveur backend
cd server
npm run dev
# Dans un autre terminal, démarrer le frontend
npm run devL'application sera accessible à l'adresse : http://localhost:3000
Le projet est configuré pour un déploiement automatique via GitHub Actions. À chaque push sur la branche principale, l'application est automatiquement:
- Construite avec Vite
- Déployée sur le serveur d'hébergement via SSH
Pour configurer le déploiement automatique, vous devez ajouter les secrets suivants dans votre dépôt GitHub:
SSH_PRIVATE_KEY: Votre clé SSH privée pour l'accès au serveurHOSTINGER_HOST: L'adresse IP de votre serveurHOSTINGER_USERNAME: Votre nom d'utilisateur SSHHOSTINGER_PORT: Le port SSH (généralement 22 ou 65002)HOSTINGER_PATH: Le chemin vers le répertoire de déploiement (généralement/public_html/)
ebook-store-blueprint/
├── assets/ # Ressources statiques
│ └── ebooks/ # Fichiers des ebooks
│ ├── content/ # Contenu des ebooks (PDF, EPUB)
│ ├── covers/ # Images de couverture
│ └── metadata/ # Métadonnées des ebooks (JSON)
├── public/ # Fichiers publics frontend
├── server/ # Backend Node.js/Express
│ ├── controllers/ # Contrôleurs API
│ ├── middlewares/ # Middlewares
│ ├── models/ # Modèles Mongoose
│ ├── routes/ # Routes API
│ └── utils/ # Utilitaires
├── src/ # Frontend React
│ ├── components/ # Composants React
│ ├── context/ # Contextes React
│ ├── hooks/ # Hooks personnalisés
│ ├── i18n/ # Traductions
│ ├── lib/ # Bibliothèques et utilitaires
│ └── pages/ # Pages/routes de l'application
├── .github/workflows/ # Configuration GitHub Actions
└── README.md # Documentation
-
Après l'achat : Lorsqu'un utilisateur achète un ebook, le système :
- Enregistre la commande en base de données
- Génère un token unique pour chaque ebook acheté
- Crée un lien de téléchargement temporaire (48h par défaut)
- Envoie un email avec les liens de téléchargement
-
Téléchargement : Lorsqu'un utilisateur accède au lien de téléchargement :
- Le système vérifie la validité du token
- Vérifie que le lien n'a pas expiré
- Vérifie que le nombre maximum de téléchargements n'est pas atteint
- Incrémente le compteur de téléchargements
- Envoie le fichier au client
-
Sécurité :
- Les fichiers des ebooks ne sont pas accessibles directement
- Les tokens sont uniques et temporaires
- L'adresse IP est enregistrée à chaque téléchargement
- Le nombre de téléchargements est limité
- Parcourir le catalogue : Visitez la page d'accueil ou le catalogue pour parcourir les ebooks disponibles.
- Filtrer et rechercher : Utilisez les filtres par catégorie ou la barre de recherche pour trouver des ebooks spécifiques.
- Ajouter au panier : Ajoutez les ebooks souhaités à votre panier.
- Paiement : Procédez au paiement avec Stripe ou PayPal.
- Téléchargement : Après le paiement, vous serez redirigé vers une page de confirmation avec des liens de téléchargement. Ces liens seront également envoyés par email.
- Historique : Consultez votre historique de commandes et téléchargez à nouveau vos ebooks dans la limite du nombre de téléchargements autorisés.
- Gestion des ebooks : Ajoutez, modifiez ou désactivez des ebooks.
- Gestion des commandes : Consultez et gérez les commandes des utilisateurs.
- Statistiques : Visualisez les statistiques de ventes, les ebooks les plus populaires, etc.
- Utilisateurs : Gérez les comptes utilisateurs.
-
Préparez les fichiers :
- Placez le fichier PDF/EPUB dans
assets/ebooks/content/ - Ajoutez l'image de couverture dans
assets/ebooks/covers/
- Placez le fichier PDF/EPUB dans
-
Mettez à jour les métadonnées :
- Modifiez le fichier
assets/ebooks/metadata/ebooks.jsonen ajoutant un nouvel objet :
- Modifiez le fichier
{
"id": "eb006",
"title": "Titre de l'ebook",
"fileName": "nom-du-fichier",
"author": "Nom de l'auteur",
"description": "Description détaillée de l'ebook",
"price": 19.99,
"discountPrice": 14.99,
"coverImage": "/assets/ebooks/covers/nom-du-fichier.jpg",
"filePath": "/assets/ebooks/content/nom-du-fichier.pdf",
"fileSize": "2.5 MB",
"pages": 180,
"format": "PDF",
"language": "Français",
"datePublished": "2025-04-15",
"isbn": "979-8-XXXXXXXX-X-X",
"category": "finance",
"tags": ["finance", "investissement", "débutant"]
}- Importez les métadonnées :
- Utilisez l'API d'importation ou l'interface d'administration
Pour modifier la durée de validité des liens ou le nombre maximum de téléchargements, modifiez les variables d'environnement :
DOWNLOAD_LINK_EXPIRY=72h # Valable 72 heures
MAX_DOWNLOADS=5 # 5 téléchargements maximum
Ce projet est distribué sous licence MIT. Voir le fichier LICENSE pour plus d'informations.
- Images de couverture : Unsplash
- Icônes : Lucide Icons
- Composants UI : shadcn/ui
Pour toute question ou assistance, veuillez ouvrir une issue sur GitHub ou contacter le support à support@votre-domaine.com.