Introduction
GMod downloads custom assets via its slow native protocol (20 KB/s) unless you tell it to use an external HTTP server. This is FastDL. The concept: host .bsp, .mdl, .vtf on a web server (Nginx), compress to .bz2, point GMod at it via sv_downloadurl.
Benefits: 30-50x faster connections, negligible network load on the game server.
Prerequisites
- A GMod server at VeryCloud
- A separate VPS (a light VeryCloud Linux VPS, 2 vCPU / 2 GB is enough)
- A domain pointing to the VPS (e.g.
fastdl.yourserver.com) - Basic bash skills
Step 1: Install Nginx
apt update && apt install -y nginx
systemctl enable --now nginx
Verify: curl http://localhost returns the default page.
Step 2: Prepare the FastDL directory
mkdir -p /var/www/fastdl
chown -R www-data:www-data /var/www/fastdl
Step 3: Configure the Nginx vhost
Create /etc/nginx/sites-available/fastdl:
server {
listen 80;
server_name fastdl.yourserver.com;
root /var/www/fastdl;
autoindex off;
location / {
try_files $uri =404;
sendfile on;
tcp_nopush on;
gzip off;
access_log off;
}
location ~ /\. {
deny all;
}
}
Activate:
ln -s /etc/nginx/sites-available/fastdl /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Step 4: SSL with Let's Encrypt
apt install -y certbot python3-certbot-nginx
certbot --nginx -d fastdl.yourserver.com
GMod fully supports HTTPS for FastDL.
Step 5: Export GMod assets
From the GMod server (Wisp → Files), files to include in FastDL:
/garrysmod/maps/*.bsp
/garrysmod/models/**/*.mdl, *.vtx, *.vvd, *.phy
/garrysmod/materials/**/*.vtf, *.vmt
/garrysmod/sound/**/*.wav, *.mp3
Download via SFTP.
Step 6: Compress to .bz2
On the FastDL VPS, place files in /var/www/fastdl/ keeping the structure, then compress:
#!/bin/bash
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
Run it. Both originals and .bz2 are kept.
Step 7: Configure GMod for FastDL
Edit /garrysmod/cfg/server.cfg:
sv_downloadurl "https://fastdl.yourserver.com"
sv_allowdownload 0
sv_allowupload 0
Restart. GMod now redirects clients to your FastDL.
Step 8: List resources to force-download
Add to /garrysmod/lua/autorun/server/fastdl.lua:
if SERVER then
resource.AddFile("models/player/customchar.mdl")
resource.AddFile("materials/customchar/skin.vtf")
resource.AddSingleFile("sound/customsound.wav")
end
Or for workshop content:
resource.AddWorkshop("2876543210")
Step 9: Test
Ask a friend to connect (or use a fresh computer without cache).
Watch Nginx logs:
tail -f /var/log/nginx/access.log
Client download should be MB/s instead of 20 KB/s.
Step 10: Automate sync
#!/bin/bash
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/
/usr/local/bin/fastdl-compress.sh
Cron every 6h: 0 */6 * * * /usr/local/bin/fastdl-sync.sh.
Troubleshooting
Players still download via GMod server (slow) — sv_downloadurl misconfigured. URL 404? curl -I https://fastdl.yourserver.com/maps/rp_downtown_v4c_v2.bsp.bz2.
404 on Nginx — .bz2 missing, rerun compression. Permissions: chown -R www-data:www-data /var/www/fastdl.
Client-side corrupted .bz2 — recompress from original. Verify: bzip2 -tv file.bz2.
HTTPS not accepted by GMod — Let's Encrypt is fine, self-signed isn't.
Useful commands
curl -I https://fastdl.yourserver.com/maps/rp_downtown_v4c_v2.bsp.bz2
tail -f /var/log/nginx/access.log | grep fastdl
Conclusion
Nginx FastDL = mandatory for any serious GMod server with custom assets. 1-2h setup, huge connection time gain, offloads your game server. Workshop addons are handled by Steam — FastDL is only for local files.
Going further: Cloudflare CDN in front of FastDL (free, very fast), throughput monitoring, full automation via webhook.


















