- Projet : Un petit jeu multijoueur web «Cube» avec authentification, scores, skins et arrière-plans personnalisés.
- Fichiers clés :
server.js,gameConfig.js, dossierpublic/(HTML/CSS/JS clients).
Description
- Ce dépôt contient le serveur Node.js d'un jeu en temps réel utilisant
socket.iopour la logique multijoueur et une API REST minimale pour l'authentification et la gestion des statistiques. - Le serveur gère les comptes (MongoDB), les achievements, les skins et l'upload d'images (analyse via SightEngine si configuré).
Démo locale
- Ouvre un navigateur sur
http://localhost:2220(ou le port que vous aurez configuré).
Prérequis
- Node.js (>= 14 recommandé)
- MongoDB (URI accessible)
- Une clé JWT secrète pour sécuriser les tokens
Variables d'environnement
Créez un fichier .env à la racine avec au minimum :
JWT_SECRET=votre_secret_jwt_long_et_complexe
MONGO_URI=mongodb://utilisateur:mdp@host:port/dbname
# Optionnel pour analyse d'image (SightEngine)
SIGHTENGINE_USER=xxx
SIGHTENGINE_SECRET=yyy
# SMTP (reset password)
SMTP_HOST=smtp.votre-fournisseur.com
SMTP_PORT=587
SMTP_USER=votre_identifiant
SMTP_PASS=votre_mot_de_passe_ou_app_password
MAIL_FROM=no-reply@votredomaine.com
# Option recommandé sur Render gratuit: API Brevo (HTTPS/443)
BREVO_API_KEY=xkeysib-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# true seulement si port 465 (SSL implicite)
SMTP_SECURE=false
# true seulement si votre fournisseur impose STARTTLS obligatoire
SMTP_REQUIRE_TLS=false
# utile sur certains hébergeurs/réseaux (Render) pour forcer IPv4
SMTP_FAMILY=4
# active un test SMTP au démarrage (logs)
SMTP_VERIFY_ON_START=true
# URL publique de l'app (important pour le lien de reset)
SITE_URL=https://votre-service.onrender.com
# Port doublement optionnel
PORT=2220
Sur Render gratuit, si SMTP renvoie ETIMEDOUT, configure BREVO_API_KEY : le serveur bascule automatiquement vers l'API Brevo (HTTPS) pour l'envoi des emails de reset.
Installation
- Installer les dépendances :
npm install
- Lancer le serveur :
node server.js
Le serveur écoute par défaut sur le port 2220 si PORT n'est pas défini.
Structure principale
server.js: logique serveur (Express + Socket.io), API REST et gestion des utilisateurs.gameConfig.js: configuration des achievements, codes secrets, et mappings de skins.public/: client web statique (index.html, styles, assets).
Fonctionnalités
- Authentification (enregistrement / login) avec JWT.
- Parties en temps réel via
socket.io(rejoindre, se déplacer, taguer). - Sauvegarde des statistiques utilisateur (MongoDB).
- Système d'achievements et skins débloquables.
- Upload d'image pour arrière-plan avec analyse (optionnelle) pour filtrer contenu inapproprié.
Personnalisation rapide
- Modifier les récompenses et achievements : éditez
gameConfig.js. - Modifier l'interface : éditez
public/index.htmletpublic/skins.css.
Sécurité & bonnes pratiques
- Ne publiez jamais votre
JWT_SECRETouMONGO_URIen clair dans le dépôt. - Utilisez des mots de passe forts et limitez l'accès à votre base de données.
- Le serveur utilise
helmetet des rate-limiters pour améliorer la sécurité.
Dépannage rapide
- Erreur démarrage liée au JWT : assurez-vous que
JWT_SECRETest défini. - Problème de connexion Mongo : vérifiez
MONGO_URIet la disponibilité de MongoDB. - Si les uploads d'image échouent, vérifiez
SIGHTENGINE_USERetSIGHTENGINE_SECRETou désactivez l'analyse.
Contribution
- Suggestions, corrections ou nouvelles fonctionnalités : ouvrez une issue ou une PR.
- Avant une PR, ajoutez une description claire et, si possible, un petit test manuel décrivant la validation.
Prochaines étapes recommandées
- Ajouter un script
npm startdanspackage.json(si absent). - Ajouter des tests automatés pour les routes critiques.
- Documenter les endpoints API (
/api/register,/api/login,/api/me,/api/leaderboard, etc.).
Star History