Garry’s Mod 开服不是把 App 4020 下完就结束。真正决定能不能长期运营的,是 gamemode、地图、Workshop collection、Lua 和二进制模块、GSLT、玩家下载体验、更新回退。这篇按 2026年8月3日 Facepunch 官方 Wiki、Steam AppInfo 和 Steam Game Server Account 资料整理,面向 sandbox、DarkRP、TTT、Prop Hunt 或自定义社区服管理员。
我核验了 App 4020、Linux 启动入口、public Build 等关键信息,没有实际下载运行。
先选游戏模式,再选VPS
GMod不是只有一种固定负载的游戏。原版sandbox、DarkRP、TTT、丧尸生存和大量自定义Lua的社区服,对CPU、内存、磁盘和客户端下载的要求完全不同。一个玩家很少但有上千实体和低效Lua hook的服,可能比原版多人服更慢。
采购前先固定:游戏模式目录名、首发地图、目标人数、Workshop collection、是否有二进制模块、是否需要MySQL/外部网页、每日新增数据量。然后才建立配置样本。
小型sandbox可从4核、8GB内存和SSD开始测试;带大量Workshop、DarkRP数据库、自定义模型与插件的社区服应预留更高单核性能、16GB或更多内存与磁盘空间。这只是测试起点,不是承载人数保证。

public还是x86-64分支
2026年8月3日Steam AppInfo显示,App 4020的public Build为23150012,另有更新的独立x86-64 Build 24416887。Facepunch官方Wiki也给出了加入-beta x86-64的方法。
对纯原版新服,可在预发实例比较public与x86-64;对现有插件服,不要因为“64位听起来更新”就原地切分支。先审计所有二进制module、数据库driver、原生扩展和插件依赖,用存档副本运行启动、进服、操作、换图与重开回归。
切换过beta分支后,仅在更新命令中删掉-beta可能不足以恢复public。Facepunch官方示例明确用-beta public退回稳定分支。分支名是部署配置的一部分,必须记录。
安装App 4020
Linux用SteamCMD匿名安装:
steamcmd \
+login anonymous \
+force_install_dir /srv/gmod/app \
+app_update 4020 validate \
+quit
创建独立gmod普通用户,不用root运行游戏进程。程序包、配置、游戏模式、Workshop缓存、业务数据与备份尽量分开。validate是修复官方文件的工具,不是备份自定义文件的替代品。
更新与运行不并发:先正常停服并备份,再更新App,在预发副本启动。对Workshop密集服,不在玩家连接时替换已mount的内容。
创建并保管GSLT
Facepunch官方Wiki将GSLT标为GMod专用服的必需配置,启动时用+sv_setsteamaccount。Steam官方还要求token不要分发给第三方;长期未用的token可能过期,账号密码由Steam Support重置时token会再生成。
每个生产实例使用独立GSLT,资产清单只记录token引用、用途和末四位,不保存全值。不把token硬编码到Git、公开启动脚本、截图或工单。如不小心暴露,立即删除/轮换,不只修改文章。
最小启动命令
先以原版sandbox与gm_construct建立无Workshop基线:
cd /srv/gmod/app
./srcds_run \
-game garrysmod \
-console \
-port 27015 \
+maxplayers 12 \
+gamemode sandbox \
+map gm_construct \
+sv_setsteamaccount "GSLT_FROM_SECRET_STORE"
gamemode要使用真实模式文件夹名,不一定与Workshop页标题相同。map不带.bsp后缀,且地图必须存在于已mount内容中。游戏模式修改后通常需换图才完整生效,不要只在控制台改变变量后就宣称验收通过。
启动成功的完整验收是:地图已加载、GSLT已登录、实际端口监听、外部A2S/列表可查、客户端进服、生成一个脱敏状态、换图后状态与权限仍正常。
端口和RCON安全
Source Dedicated Server常以27015作为默认游戏/查询起点。不应根据搜索结果开放一大段端口,而要在本实例启动后用ss -lntup检查实际socket,再从服务器以外验证A2S和客户端。同机多实例必须分离端口、GSLT、配置与数据目录。
RCON可能使用与服务器相关的TCP连接,不应向全网无限制开放。限制管理员来源IP、VPN或跳板,使用长随机密码,轮换后确认旧密码不再可用。不用-insecure作为常规排错方法,它会改变VAC安全边界。

Workshop collection怎么配
Facepunch官方方法是把collection ID放到启动命令:
+host_workshop_collection 123456789
collection必须是public或unlisted,private collection不能作为这条无账号服务端下载路线的稳定前提。服务端启动时会下载/更新并mount collection内容。如当前地图就在collection中,服务端会将其标记为客户端可下载。对gamemode,还要检查模式描述文件中是否声明Workshop ID。
不要用一个无限增长的“全部服务器插件”collection。拆成必需模式/地图、功能插件、可选外观三层,记录每个item ID、大小、依赖、权限与客户端需求。删除item前先在存档副本验证实体/数据会不会丢失。
自动更新、预发与回退
host_workshop_autoupdate 0可禁用启动时Workshop自动更新,有助于避免未审核内容立即进入生产。但长期不更新也可能使地图、模式和客户端版本不一致。正确方式是预发审核,不是永久冻结。
更新流程:正常停服→备份配置、data/、sqlite/、外部数据库转储和collection清单→复制到预发→更新App和Workshop→原版地图基线→目标gamemode→客户端下载/进服→换图→检查Lua/模块错误→再切生产。
回退时恢复App分支/Build、Workshop组合、gamemode、配置和业务数据。仅将Workshop项降级但保留已被新版写入的数据库,不能算完整回退。
备份哪些内容
GMod不同gamemode的业务数据位置不同。通用备份至少包括:
garrysmod/cfg/中的服务器配置、地图轮换、封禁与管理规则;garrysmod/data/、garrysmod/sv.db或游戏模式的SQLite数据;- 外部MySQL/PostgreSQL的一致性转储与用户/库权限清单;
- gamemode、非Workshop自定义addon和二进制模块;
- collection ID、item列表、当前Build和分支;
- GSLT和数据库密码的私密引用,不是公开全值。
恢复到全新目录后,用同Build与collection启动,进服查看角色/权限/经济/道具标记,换图后再查一次。只看进程存活不能证明业务数据已恢复。
容量与故障定位
不要只看玩家数。每个高峰样本同时记录:单核CPU、内存高水位、实体数、Lua hook/定时器数量、数据库慢查询、出站流量、客户端首次下载大小和换图时间。将collection二分禁用,可快速判断问题是内容组合还是基础服务端。
启动后立即回到sandbox
检查+gamemode是否是真实目录名,游戏模式是否已mount,地图是否支持该模式。改变gamemode后换图再验证。
Workshop下载了,玩家却缺素材
检查collection可见性、地图/gamemode是否被标记给客户端、依赖item是否在collection中,以及客户端下载日志。服务端mount成功不等于客户端已获得所有内容。
x86-64分支启动了,但插件不工作
回到纯原版基线,逐个检查二进制module的架构和发布者支持状态。如没有当前x86-64构建,在public分支保持生产,而不是强制载入或关闭安全检查。
FAQ
GMod服务器必须配GSLT吗
Facepunch当前官方Wiki将GSLT标记为必需项,并说明未配置会影响服务器排名。每实例独立token,不暴露全值。
Workshop collection可以是private吗
官方当前说明collection需要public或unlisted,否则srcds无法按这条路线访问。
要直接用x86-64吗
只有在预发完成游戏模式、Lua、二进制模块、数据库、换图和重开回归后才切换。原有插件服不建议原地试错。
购买前清单
选购YGCloud VPS前准备:
- 游戏模式真实目录名、首发地图和换图清单;
- public还是x86-64,二进制模块是否支持;
- Workshop collection/item清单、依赖、大小和客户端下载量;
- 是否有外部数据库、网页与原生模块;
- 峰值玩家、实体数、每日数据增长和备份保留;
- 玩家地域、测试IP路由和丢包。
配置参考VPS配置选择方法,地域按玩家位置与线路选节点,下单前按测试IP、Ping、路由和丢包流程验证。







