FastDL avec Nginx pour ton serveur Garry's Mod

FastDL avec Nginx pour ton serveur Garry's Mod

Le téléchargement natif GMod est limité à 20 Ko/s. FastDL via HTTP/Nginx débride à plusieurs Mo/s, divise les temps de connexion par 50 et économise ton serveur GMod. Setup complet sur un VPS VeryCloud.

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_downloadurl mal 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 .bz2 manque — 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.

Ressources

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres