# 🚀 DĂ©ploiement sur Hugging Face Spaces avec Docker Guide complet pour dĂ©ployer le jeu RTS sur Hugging Face Spaces en utilisant le framework Docker. --- ## 📋 PrĂ©requis 1. **Compte Hugging Face** : https://huggingface.co/join 2. **Git installĂ©** localement 3. **Git LFS installĂ©** (pour les gros fichiers) ```bash git lfs install ``` --- ## 🎯 Configuration Actuelle Le projet est **dĂ©jĂ  configurĂ©** pour HF Spaces ! ✅ ### Fichiers de Configuration **1. README.md (Metadata YAML)** ```yaml --- title: RTS Commander emoji: 🎼 colorFrom: blue colorTo: green sdk: docker pinned: false license: mit --- ``` **2. Dockerfile** - Port: 7860 (requis par HF Spaces) - Base: Python 3.11-slim - Server: Uvicorn + FastAPI - WebSocket support: ✅ **3. Structure** ``` web/ ├── Dockerfile ✅ PrĂȘt pour HF Spaces ├── README.md ✅ Avec metadata YAML ├── requirements.txt ✅ DĂ©pendances Python ├── app.py ✅ FastAPI + WebSocket └── static/ ✅ Assets (HTML, JS, CSS, sons) ``` --- ## 🚀 DĂ©ploiement - MĂ©thode 1: Via l'Interface Web (RecommandĂ©) ### Étape 1: CrĂ©er un Space 1. Aller sur https://huggingface.co/spaces 2. Cliquer **"Create new Space"** 3. Remplir le formulaire : - **Space name**: `rts-commander` (ou votre choix) - **License**: MIT - **Select the Space SDK**: **Docker** ⚠ IMPORTANT ! - **Space hardware**: CPU basic (gratuit) ou GPU (payant) - **Visibility**: Public ou Private 4. Cliquer **"Create Space"** --- ### Étape 2: PrĂ©parer le RĂ©pertoire Local ```bash cd /home/luigi/rts/web # VĂ©rifier que tous les fichiers essentiels sont prĂ©sents ls -la # Doit contenir: Dockerfile, README.md, app.py, requirements.txt, static/, backend/ ``` --- ### Étape 3: Initialiser Git et Pousser ```bash # Si ce n'est pas dĂ©jĂ  un repo git git init # Ajouter le remote HF Space (remplacer USERNAME et SPACENAME) git remote add space https://huggingface.co/spaces/USERNAME/SPACENAME # Ajouter tous les fichiers git add . # Commit git commit -m "Initial commit: RTS Commander v2.0" # Pousser vers HF Space git push --set-upstream space main ``` **Note**: Si vous avez dĂ©jĂ  un remote `origin`, utilisez un nom diffĂ©rent comme `space`. --- ### Étape 4: Attendre le Build 1. Aller sur votre Space : `https://huggingface.co/spaces/USERNAME/SPACENAME` 2. HF va automatiquement : - ✅ DĂ©tecter le Dockerfile - ✅ Builder l'image Docker - ✅ Lancer le container sur le port 7860 - ✅ Exposer l'application publiquement **Temps de build**: 2-5 minutes ⏱ --- ### Étape 5: Tester l'Application Une fois le build terminĂ© : 1. Ouvrir l'URL : `https://USERNAME-SPACENAME.hf.space` 2. Le jeu devrait se charger ! 🎼 **Tests rapides** : - ✅ UI se charge - ✅ WebSocket connectĂ© (vĂ©rifier console) - ✅ CrĂ©er des unitĂ©s - ✅ Sons fonctionnent - ✅ Control groups 1-9 - ✅ Multi-langue (EN/FR/çčäž­) --- ## 🚀 DĂ©ploiement - MĂ©thode 2: Via CLI avec `huggingface_hub` ### Installation ```bash pip install huggingface_hub # Login (nĂ©cessite un token) huggingface-cli login ``` ### CrĂ©er le Space ```bash # CrĂ©er un nouveau Space huggingface-cli repo create rts-commander --type space --space_sdk docker # Cloner le Space git clone https://huggingface.co/spaces/USERNAME/rts-commander cd rts-commander # Copier les fichiers du projet cp -r /home/luigi/rts/web/* . # Git add, commit, push git add . git commit -m "Initial commit: RTS Commander v2.0" git push ``` --- ## 🚀 DĂ©ploiement - MĂ©thode 3: Upload Direct (Simple) ### Via l'Interface Web 1. Aller sur votre Space 2. Cliquer **"Files"** → **"Add file"** → **"Upload files"** 3. Glisser-dĂ©poser TOUS les fichiers du rĂ©pertoire `web/` : - `Dockerfile` - `README.md` (avec metadata YAML) - `app.py` - `requirements.txt` - `localization.py` - `ai_analysis.py` - `start.py` - Dossier `backend/` - Dossier `static/` - etc. 4. Cliquer **"Commit changes to main"** 5. HF va automatiquement rebuild ! --- ## ⚙ Configuration AvancĂ©e ### Variables d'Environnement Si vous avez besoin de variables d'environnement : 1. Aller dans **Settings** du Space 2. Section **"Repository secrets"** 3. Ajouter des variables (ex: `API_KEY`, `DEBUG`, etc.) 4. Accessible via `os.environ['VAR_NAME']` dans le code ### Logs et Debugging Pour voir les logs du container : 1. Aller dans votre Space 2. Section **"Logs"** (en bas) 3. Voir les logs en temps rĂ©el (stdout/stderr) **Commandes utiles dans les logs** : ``` INFO: Uvicorn running on http://0.0.0.0:7860 INFO: WebSocket connection accepted ERROR: [Erreurs Ă©ventuelles] ``` --- ## 🐳 Dockerfile OptimisĂ© pour HF Spaces Le Dockerfile actuel est dĂ©jĂ  optimisĂ©, mais voici les dĂ©tails : ```dockerfile # Python 3.11 slim (plus lĂ©ger que full) FROM python:3.11-slim # RĂ©pertoire de travail WORKDIR /app # DĂ©pendances systĂšme (gcc pour compilation de packages Python) RUN apt-get update && apt-get install -y \ gcc g++ make \ && rm -rf /var/lib/apt/lists/* # Installation des dĂ©pendances Python COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copie du code COPY . . # Port 7860 (REQUIS par HF Spaces) EXPOSE 7860 # Variables d'environnement ENV GRADIO_SERVER_NAME="0.0.0.0" ENV GRADIO_SERVER_PORT=7860 # Lancement avec Uvicorn CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"] ``` **Points importants** : - ⚠ **Port 7860** : OBLIGATOIRE pour HF Spaces - ✅ **Host 0.0.0.0** : Pour accepter les connexions externes - ✅ **Uvicorn** : Server ASGI pour FastAPI - ✅ **WebSocket** : SupportĂ© par Uvicorn --- ## 📩 Fichiers Ă  Inclure ### Essentiels (OBLIGATOIRES) ``` web/ ├── Dockerfile ⚠ OBLIGATOIRE ├── README.md ⚠ Avec metadata YAML ├── requirements.txt ⚠ DĂ©pendances ├── app.py ⚠ Point d'entrĂ©e ├── localization.py ├── ai_analysis.py ├── start.py └── ... ``` ### Assets et Code ``` web/ ├── backend/ 📁 Logic backend │ └── app/ ├── static/ 📁 Frontend │ ├── game.js │ ├── hints.js │ ├── sounds.js │ ├── index.html │ ├── styles.css │ └── sounds/ 🔊 Audio files │ ├── fire.wav │ ├── explosion.wav │ ├── build.wav │ └── ready.wav └── ... ``` ### Optionnels ``` web/ ├── docs/ 📚 Documentation (optionnel) ├── tests/ đŸ§Ș Tests (optionnel) ├── docker-compose.yml (non utilisĂ© par HF) └── .dockerignore (recommandĂ©) ``` --- ## 🔧 RĂ©solution de ProblĂšmes ### ProblĂšme 1: Build Failed **Erreur**: `Error building Docker image` **Solutions** : 1. VĂ©rifier que `Dockerfile` est Ă  la racine 2. VĂ©rifier `requirements.txt` (pas de packages cassĂ©s) 3. Voir les logs de build dans l'interface HF 4. Tester le build localement : ```bash cd /home/luigi/rts/web docker build -t rts-test . docker run -p 7860:7860 rts-test ``` --- ### ProblĂšme 2: Container Crashes **Erreur**: Container dĂ©marre puis crash immĂ©diatement **Solutions** : 1. VĂ©rifier les logs dans l'interface HF 2. VĂ©rifier que le port 7860 est bien exposĂ© 3. VĂ©rifier que `app:app` existe dans `app.py` 4. Tester localement : ```bash cd /home/luigi/rts/web python -m uvicorn app:app --host 0.0.0.0 --port 7860 ``` --- ### ProblĂšme 3: WebSocket ne se connecte pas **Erreur**: `WebSocket connection failed` **Solutions** : 1. VĂ©rifier l'URL WebSocket dans `game.js` 2. Pour HF Spaces, utiliser l'URL relative : ```javascript const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; const wsUrl = `${protocol}//${window.location.host}/ws`; ``` 3. VĂ©rifier que Uvicorn supporte WebSocket (dĂ©jĂ  ok) --- ### ProblĂšme 4: Assets ne se chargent pas **Erreur**: `404 Not Found` pour JS/CSS/sons **Solutions** : 1. VĂ©rifier les chemins dans `index.html` : ```html ``` 2. VĂ©rifier que `static/` est bien copiĂ© dans le Dockerfile 3. VĂ©rifier la configuration StaticFiles dans `app.py` : ```python app.mount("/static", StaticFiles(directory="static"), name="static") ``` --- ## 🎼 Configuration SpĂ©cifique au Jeu ### WebSocket URL Dynamique Pour que le jeu fonctionne sur HF Spaces, vĂ©rifier dans `game.js` : ```javascript // ✅ BON : URL dynamique const wsUrl = `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}/ws`; // ❌ MAUVAIS : URL hardcodĂ©e const wsUrl = 'ws://localhost:8000/ws'; ``` ### Taille des Assets HF Spaces gratuit a des limites : - **Espace disque** : ~50 GB - **RAM** : 16 GB (CPU basic) - **CPU** : 2 cores Votre projet est lĂ©ger : - Code : ~5 MB - Sons : 78 KB - **Total** : ~5 MB ✅ Parfait ! --- ## 📊 Performance sur HF Spaces ### CPU Basic (Gratuit) **Specs** : - 2 vCPU - 16 GB RAM - Permanent (ne s'Ă©teint pas) **Performance attendue** : - ✅ Chargement : <2 secondes - ✅ WebSocket : <100ms latency - ✅ Gameplay : 60 FPS - ✅ Sons : Fluides - ✅ Multi-joueurs : 10-20 simultanĂ©s **Conclusion** : CPU basic est **largement suffisant** ! 🎉 --- ## 🔒 SĂ©curitĂ© et Limites ### Rate Limiting HF Spaces peut limiter les requĂȘtes : - **Recommandation** : Ajouter rate limiting dans `app.py` ```python from slowapi import Limiter, _rate_limit_exceeded_handler from slowapi.util import get_remote_address from slowapi.errors import RateLimitExceeded limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) @app.get("/") @limiter.limit("100/minute") async def root(request: Request): # ... ``` ### WebSocket Limits - **Max connections** : ~100-200 (CPU basic) - **Timeout** : 30 minutes d'inactivitĂ© - **Reconnexion** : À implĂ©menter cĂŽtĂ© client --- ## 🌐 Domaine PersonnalisĂ© (Optionnel) Pour utiliser votre propre domaine : 1. Passer Ă  **HF Spaces PRO** ($9/mois) 2. Configurer un CNAME DNS : ``` rts.votredomaine.com CNAME USERNAME-SPACENAME.hf.space ``` 3. Ajouter le domaine dans Settings du Space --- ## 📈 Monitoring ### Logs en Temps RĂ©el ```bash # Via CLI (si huggingface_hub installĂ©) huggingface-cli space logs USERNAME/SPACENAME --follow ``` ### Metrics HF Spaces fournit : - **CPU usage** - **RAM usage** - **Network I/O** - **Requests per minute** Accessible dans **Settings** → **Analytics** --- ## 🚀 DĂ©ploiement Express (TL;DR) **3 commandes pour dĂ©ployer** : ```bash # 1. Aller dans le rĂ©pertoire cd /home/luigi/rts/web # 2. CrĂ©er un Space sur HF avec SDK=Docker # Via web: https://huggingface.co/new-space # 3. Push git remote add space https://huggingface.co/spaces/USERNAME/SPACENAME git push space main ``` **C'est tout ! 🎉** --- ## 📚 Ressources Utiles - **HF Spaces Docs** : https://huggingface.co/docs/hub/spaces - **Docker SDK** : https://huggingface.co/docs/hub/spaces-sdks-docker - **FastAPI Docs** : https://fastapi.tiangolo.com/ - **WebSocket** : https://fastapi.tiangolo.com/advanced/websockets/ --- ## ✅ Checklist Finale Avant de dĂ©ployer, vĂ©rifier : - [ ] `Dockerfile` prĂ©sent et port = 7860 - [ ] `README.md` avec metadata YAML (`sdk: docker`) - [ ] `requirements.txt` Ă  jour - [ ] `app.py` avec `app = FastAPI()` - [ ] WebSocket URL dynamique dans `game.js` - [ ] Tous les assets dans `static/` - [ ] Build Docker local rĂ©ussi - [ ] Compte HF créé - [ ] Space créé avec SDK=Docker --- ## 🎊 RĂ©sultat Attendu AprĂšs dĂ©ploiement rĂ©ussi : **URL** : `https://USERNAME-SPACENAME.hf.space` **Features** : - ✅ Jeu RTS complet - ✅ WebSocket temps rĂ©el - ✅ Sons + Control groups - ✅ Multi-langue (EN/FR/çčäž­) - ✅ Superweapon nuke - ✅ Responsive UI - ✅ 60 FPS gameplay **Accessible** : - 🌐 Publiquement - đŸ“± Sur mobile/desktop - 🚀 Sans installation - 🎼 PrĂȘt Ă  jouer ! --- **Temps total de dĂ©ploiement** : 5-10 minutes ⚡ **FĂ©licitations ! Votre jeu RTS est maintenant en ligne ! 🎉**