Mounting Workshop Content on a GMod Server via Pterodactyl
Garry's Mod lives or dies by Workshop content. Sandbox prop packs, TTT map cycles, DarkRP city schemas, every flavor of GMod community ships its identity as a Workshop collection. The catch is that the Source engine cannot subscribe to Workshop items the way a desktop Steam client can. Servers must authenticate against the Steam Web API and download mounted addons at boot, which means a properly issued API key, a published collection ID, and a precise set of launch parameters baked into the container.
Pterodactyl is the cleanest way to manage that workflow at scale. The official Garry's Mod egg already exposes every relevant variable as a panel input, so once Wings is running on your Debian 12 node, deploying a new GMod server reduces to filling out a form.
Prerequisites
- A working Pterodactyl Panel and at least one Wings daemon node on Debian 12.
- Docker Engine 24 or newer on the node, with the egg image cache populated.
- A Steam account in good standing, used to issue the Web API key.
- A public Workshop collection that contains every addon and map you want mounted.
- UDP 27015 (game) and TCP 27015 (RCON) reachable through the node firewall.
Step 1: Generate a Steam Web API Key
Sign in at steamcommunity.com/dev/apikey and register a key against any domain you control (the server hostname is fine). Steam returns a 32 character hexadecimal token. Treat this token as a secret. It is not scoped, and anyone holding it can query account public data through the Steam APIs.
Inside Pterodactyl, edit the server you are about to deploy and paste the token into the Steam Web API Key startup variable. Wings injects it into the container as the +host_workshop_collection handshake header at boot.
Step 2: Build the Workshop Collection
On the Steam Workshop site, click Create Collection, mark it Public, and add every map and addon you want the server to ship. Copy the numeric ID from the URL (?id=1234567890). The server only ever references the collection ID, never the individual items, so you can add and remove content later without touching Pterodactyl at all.
Step 3: Deploy the Garry's Mod Egg
Create a new server in Pterodactyl using the bundled Garry's Mod egg (ghcr.io/pterodactyl/games:source image). Fill in the relevant startup variables exactly:
SRCDS_APPID=4020SRCDS_GAME=garrysmodSRCDS_MAP=gm_constructMAX_PLAYERS=32GAMEMODE=sandboxSTEAM_API_KEY=YOUR_32_CHAR_HEX_KEYWORKSHOP_ID=1234567890TICKRATE=66The egg's startup command resolves these into the full srcds_run invocation. The two variables that matter most for Workshop mounting are STEAM_API_KEY and WORKSHOP_ID. If either is missing, the server boots silently and clients connect to a stock map with no addons.
Step 4: Verify the Launch Command
Open the egg's startup configuration and confirm the resolved command. The shape that produces a healthy Workshop mounted boot is:
./srcds_run -game garrysmod -console -port 27015 \ +map {{SRCDS_MAP}} +maxplayers {{MAX_PLAYERS}} \ +gamemode {{GAMEMODE}} +host_workshop_collection {{WORKSHOP_ID}} \ -authkey {{STEAM_API_KEY}} +sv_setsteamaccount {{SRCDS_TOKEN}} \ -tickrate {{TICKRATE}} -strictportbindNote +host_workshop_collection instead of +host_workshop_addon. The first form pulls the entire collection on every boot, which is exactly what you want: edit the Workshop collection on the website, restart the server, new content appears.
Step 5: Allocate Disk Space for Addons
Workshop content lives under /home/container/garrysmod/addons inside the volume. A medium TTT collection with 30 maps and a few weapon packs comfortably sits at 5 GB. A heavy DarkRP city pack with HD textures can exceed 20 GB. Set the Pterodactyl disk quota with realistic headroom or boots will fail mid download, leaving the addon cache in a corrupt half state.
Performance and Tuning
- Raise
-tickrateto 66 for sandbox and DarkRP. Stay at 33 for TTT competitive cycles, as higher tickrates exaggerate jitter on physics props. - Set
sv_minrateandsv_maxrateincfg/server.cfgto 100000 to give clients enough bandwidth headroom for addon assets. - Enable Pterodactyl scheduled tasks to send an RCON
changelevelevery 4 hours. Long uptime GMod servers leak memory through cached addon assets. - Mount
/home/container/garrysmod/dataon persistent storage if your gamemode writes player saves there, otherwise wipes erase progression on container recreation.
Conclusion
With a valid Web API key, a public collection ID, and the correct +host_workshop_collection startup flag, your Pterodactyl managed Garry's Mod server now reflects the Workshop collection on every boot. Edit the collection on the website, restart through the panel, and players reconnect to a refreshed content set. That separation between deployment (Pterodactyl) and content management (Steam Workshop) is what makes this stack so durable at scale.