# đ 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 ! đ**