Introduction
GMod télécharge les assets custom via son protocole natif lent (20 Ko/s) sauf si tu lui dis d'utiliser un serveur HTTP externe. Cette technique s'appelle FastDL. Le concept : tu héberges les .bsp, .mdl, .vtf sur un serveur web (Nginx), tu compresses en .bz2, et tu pointes ton GMod dessus via sv_downloadurl.
Bénéfices : connexion 30-50x plus rapide, charge réseau négligeable sur le serveur de jeu.
Prérequis
- Un serveur GMod chez VeryCloud
- Un VPS séparé (peut être un VPS Linux léger VeryCloud, 2 vCPU / 2 Go suffit)
- Un nom de domaine pointant vers le VPS (ex :
fastdl.tonserveur.fr) - Connaissances bash de base
Étape 1 : Installer Nginx sur le VPS
Sur ton VPS Debian/Ubuntu :
apt update && apt install -y nginx
systemctl enable --now nginx
Vérifie : curl http://localhost doit renvoyer la page par défaut.
Étape 2 : Préparer le répertoire FastDL
mkdir -p /var/www/fastdl
chown -R www-data:www-data /var/www/fastdl
C'est ici qu'iront tes assets .bz2.
Étape 3 : Configurer le vhost Nginx
Crée /etc/nginx/sites-available/fastdl :
server {
listen 80;
server_name fastdl.tonserveur.fr;
root /var/www/fastdl;
autoindex off;
location / {
try_files $uri =404;
# Optimisations FastDL
sendfile on;
tcp_nopush on;
gzip off; # Les fichiers sont deja en .bz2
access_log off; # Spam = inutile
}
# Bloquer les acces vers des fichiers sensibles
location ~ /\. {
deny all;
}
}
Active et reload :
ln -s /etc/nginx/sites-available/fastdl /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Étape 4 : SSL avec Let's Encrypt (recommandé)
apt install -y certbot python3-certbot-nginx
certbot --nginx -d fastdl.tonserveur.fr
Certbot édite ton vhost pour HTTPS automatiquement. GMod supporte parfaitement HTTPS pour FastDL.
Étape 5 : Exporter les assets depuis ton GMod
Sur ton serveur GMod (panel Wisp → Files), les fichiers à inclure dans FastDL :
/garrysmod/maps/*.bsp
/garrysmod/models/**/*.mdl
/garrysmod/models/**/*.vtx
/garrysmod/models/**/*.vvd
/garrysmod/models/**/*.phy
/garrysmod/materials/**/*.vtf
/garrysmod/materials/**/*.vmt
/garrysmod/sound/**/*.wav
/garrysmod/sound/**/*.mp3
Télécharge ces dossiers via SFTP.
Étape 6 : Compresser en .bz2
Sur ton VPS FastDL, place les fichiers téléchargés dans /var/www/fastdl/ en conservant la structure :
/var/www/fastdl/
├── maps/
├── models/
├── materials/
└── sound/
Puis script pour compresser :
#!/bin/bash
# /usr/local/bin/fastdl-compress.sh
cd /var/www/fastdl
find . -type f \( \
-name "*.bsp" -o \
-name "*.mdl" -o \
-name "*.vtx" -o \
-name "*.vvd" -o \
-name "*.phy" -o \
-name "*.vtf" -o \
-name "*.vmt" -o \
-name "*.wav" -o \
-name "*.mp3" \
\) -exec bash -c '
if [ ! -f "$1.bz2" ] || [ "$1" -nt "$1.bz2" ]; then
bzip2 -k -f "$1"
echo "Compressed: $1"
fi
' _ {} \;
chown -R www-data:www-data /var/www/fastdl
Lance-le : bash /usr/local/bin/fastdl-compress.sh
Tu gardes les fichiers originaux + leurs .bz2. Le serveur web sert le .bz2, GMod le décompresse côté client à la volée.
Étape 7 : Configurer GMod pour utiliser FastDL
Sur ton serveur GMod, édite /garrysmod/cfg/server.cfg :
sv_downloadurl "https://fastdl.tonserveur.fr"
sv_allowdownload 0
sv_allowupload 0
Restart. Désormais GMod redirige les clients vers ton FastDL pour les assets.
Étape 8 : Lister les ressources à forcer
Pour forcer le téléchargement (sinon GMod ne télécharge que ce qui est utilisé immédiatement) :
/garrysmod/lua/autorun/server/fastdl.lua
Contenu :
if SERVER then
resource.AddFile("models/player/customchar.mdl")
resource.AddFile("materials/customchar/skin.vtf")
resource.AddSingleFile("sound/customsound.wav")
-- etc.
end
Ou pour ajouter un workshop content :
resource.AddWorkshop("2876543210")
Étape 9 : Tester
Demande à un ami de se connecter à ton serveur (ou rejoins toi-même depuis un nouvel ordi pour ne pas avoir les fichiers en cache).
Tu dois voir des logs Nginx :
tail -f /var/log/nginx/access.log
Et le téléchargement client est rapide (plusieurs Mo/s au lieu de 20 Ko/s).
Étape 10 : Automatiser la sync
Idéalement, ton FastDL doit refléter ton serveur GMod en permanence. Un cron de sync :
#!/bin/bash
# /usr/local/bin/fastdl-sync.sh
rsync -azP -e "ssh -i /root/.ssh/wisp_key -p 2022" \
[email protected]:/garrysmod/maps/ \
/var/www/fastdl/maps/
rsync -azP -e "ssh -i /root/.ssh/wisp_key -p 2022" \
[email protected]:/garrysmod/models/ \
/var/www/fastdl/models/
# Re-compresser
/usr/local/bin/fastdl-compress.sh
Cron toutes les 6h :
0 */6 * * * /usr/local/bin/fastdl-sync.sh
Dépannage
Les joueurs téléchargent toujours via le serveur GMod (lent)
sv_downloadurlmal configuré (vérifie console :cvarlist sv_downloadurl)- URL retourne 404 — test :
curl -I https://fastdl.tonserveur.fr/maps/rp_downtown_v4c_v2.bsp.bz2
404 Not Found sur Nginx
- Le
.bz2manque — relance le script de compression - Permission Linux :
chown -R www-data:www-data /var/www/fastdl
Fichier .bz2 corrompu côté client
- Re-compresse depuis l'original
- Vérifie l'intégrité :
bzip2 -tv fichier.bz2
HTTPS mais GMod n'accepte pas
- Vérifie que le certificat est valide (
curl -v https://fastdl.tonserveur.fr/) - GMod accepte Let's Encrypt sans problème, mais pas les self-signed
Commandes utiles
# Verifier qu'un fichier est disponible
curl -I https://fastdl.tonserveur.fr/maps/rp_downtown_v4c_v2.bsp.bz2
# Voir les logs en live
tail -f /var/log/nginx/access.log | grep fastdl
# Forcer le re-download cote client (in-game)
# Vide le cache /garrysmod/download/
Conclusion
FastDL Nginx = obligatoire pour tout serveur GMod sérieux avec des assets custom. Setup en 1-2h, gain de temps de connexion énorme, et soulagement de ton serveur de jeu qui n'a plus à servir les téléchargements. Pour les addons workshop, Steam s'en charge automatiquement — le FastDL ne concerne que les fichiers locaux.
Pour aller plus loin : CDN Cloudflare devant ton FastDL (gratuit, ultra-rapide), monitoring du throughput, automatisation complète via webhook.


















