
开头先交代一下背景我最早玩《僵尸毁灭工程》Project Zomboid是在朋友拉我联机时一群人挤在游戏内那张四个人的地图里一开始还挺新鲜可一到后期就会遇到同一个问题——主机不在线整队人就全都进不去。后来大家玩得熟了就想常年开一个大家随时能上线的服务器于是就有了在Linux云服务器上搭《僵尸毁灭工程》私服的这套折腾经历。现在网上关于这款游戏服务器的教程有几个特点要么是Windows VPS上的图形界面操作要么只讲命令不解释配置里面踩过的坑更是基本没人写。我这次用一台廉价的Linux云服务器完整走了一遍从零搭建、调参、放端口到日常备份的流程中间崩了无数次最后总算稳定跑起来。这篇文章就把这套全流程整理下来包含配置思路、实操命令、启动参数说明和大量避坑记录给想自己开僵尸服长期玩的朋友一份能直接照着操作的底稿。1. 开始之前想清楚再动手能省一大半力气1.1 “私服”到底是个什么东西先说清楚这里的“私服”指的是《僵尸毁灭工程》游戏自带的专用服务器Dedicated Server模式。游戏官方本来就提供了一套独立的服务器程序放进云服务器里跑玩家从客户端连进来就组成了一个常年在线、不依赖某台玩家电脑的持久世界。和随便拉一个人当“主机”的区别在于私服是独立进程不受开服者本机关机影响存档独立、参数可控还能随时加Mod。也正是因为这是官方支持和允许的玩法整个搭建过程用到的工具也就是Steam官方提供的SteamCMD配合游戏服务器文件没有任何灰色操作。前提是参与联机的每个人都有正版游戏这一点后面很多配置项也都和Steam账号体系有关。1.2 云服务器配置怎么选才不花冤枉钱很多新手最容易在第一步就翻车买配置买小了服务器刚加载地图就内存爆掉或者买太贵了自己几个朋友玩根本用不上。根据我实际跑的经验给出一个比较直观的参考表人数规模CPU内存带宽硬盘备注4-8人2核4GB3-5Mbps40GB SSD能玩地图加载慢建议关闭僵尸血月等特效8-16人4核8GB5Mbps50GB SSD推荐配置老玩家常驻也没问题16-32人4核以上16GB10Mbps100GB SSD适合开Mod服或长期公开服我自己的服务器选的是2核4G的入门机型几个朋友玩白天挂机晚上上线实际运行一个月下来内存占用经常冲到3.5G左右再往上加人就有点危。如果你玩到后期会拆建大基地、跑全地图存档文件会从几百MB慢慢涨到几个G所以硬盘尽量买SSD千万不要在机械盘上跑僵尸世界存盘点会卡到怀疑人生。带宽方面这游戏不像射击游戏那样吃网络几M的带宽对十几个玩家绰绰有余真正影响体验的是延迟和丢包。1.3 系统版本选哪个Linux发行版我推荐Debian 12或者Ubuntu 22.04 LTS。原因很简单这两个系统的软件源里自带运行SteamCMD所需的依赖库出问题百度能搜到的报错案例也最多别人踩过的坑基本都能搜到答案。CentOS虽然也能跑但软件源维护得比较晚装个32位运行库都要手动折腾不推荐新手用。另外有一个重要前提需要先确认你的云服务器必须有公网IP。如果你买的是只有内网IP的轻量级机器或者服务器在NAT后面那玩家就没法直接连进来。下单前看清楚服务商给的IP是公网还是内网这是很多人忽略的问题。2. 系统初始化与SteamCMD部署2.1 登录服务器并创建普通用户不建议直接用root来跑游戏服务一是安全问题二是一旦权限乱了排查起来非常痛苦。我自己的习惯是先新建一个专门用户用这个用户跑SteamCMD和游戏服务。先SSH登录到root然后执行# 先更新系统 apt update apt upgrade -y # 创建用户比如叫 pz adduser pz # 给用户sudo权限后面配置方便 usermod -aG sudo pz之后用su - pz切到新用户或者直接退出重新用pz登录。后面所有操作都在pz用户下进行路径都基于家目录/home/pz。2.2 安装32位运行库SteamCMD本身是个32位程序在64位系统上跑需要额外的32位库。这一步漏掉的话后面运行steamcmd会直接报steamcmd: error while loading shared libraries: libstdc.so.6: cannot open shared object file到那时才补就手忙脚乱了。Debian/Ubuntu系统下执行sudo dpkg --add-architecture i386 sudo apt update sudo apt install -y lib32gcc-s1 lib32stdc6这两行是核心。如果你机器比较干净可以再装一下wget tar tmux这些基础工具后面都会用上。sudo apt install -y wget tar tmux2.3 安装SteamCMD安装SteamCMD有两条路一条用apt直接装steamcmd包另一条是手动下载官方安装包。我推荐第二种因为路径可控后面脚本里引用起来更清晰。mkdir -p ~/steamcmd cd ~/steamcmd wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz tar -zxvf steamcmd_linux.tar.gz解压完目录里会出现steamcmd.sh先跑一下验证能不能正常启动./steamcmd.sh quit看到Steam Console Client字样说明SteamCMD本体已经OK了。如果报错在上一步缺库回头补装依赖再试。3. 专用服务器的下载与第一次启动3.1 用SteamCMD拉取游戏服务器文件《僵尸毁灭工程》专用服务器在Steam上的App ID是380870。下载命令如下cd ~/steamcmd ./steamcmd.sh force_install_dir ~/pzserver login anonymous app_update 380870 validate quit参数拆开解释一下force_install_dir指定服务器文件安装到哪个目录我这里是~/pzserverlogin anonymous匿名登录即可因为服务器文件是免费公开的app_update 380870拉取App ID对应的文件validate校验文件完整性防止下载中断导致文件残缺quit执行完自动退出这个下载过程取决于网络可能几分钟也可能十几分钟。看到Success! App 380870 already up to date.或者等命令跑完没报错就是成功了。下载完成后进入目录看一眼ls ~/pzserver里面会有start-server.sh、ProjectZomboid64这些关键文件。ProjectZomboid64就是服务器主程序start-server.sh是官方打包的启动脚本。3.2 修改启动脚本里的内存参数这里是最重要的一个避坑点我最初就是没改这个参数服务器开一次崩一次。PZ服务器是Java程序官方go的高启动脚本默认参数里-Xmx只有512MB对现在的地图和Mod来说远远不够一加载就要么进程直接退出要么地图区块加载不出来玩家走几步就掉线。打开启动脚本nano ~/pzserver/start-server.sh找到类似-Xmx512m -Xms512m的地方改成符合你服务器内存的数值。4G内存的机器建议-Xmx3072m -Xms1024m意思是JVM最大可用内存3G初始分配1G。8G内存的机器可以给到4G或5G-Xmx4096m -Xms2048m改完保存退出即可。不同版本的启动脚本写法可能略有差异有的是把参数写在变量里有的是直接写在命令行上只要找到-Xmx开头的字符串改掉就行。3.3 第一次启动生成配置直接运行cd ~/pzserver ./start-server.sh -servername servertestservername是服务器实例名你可以改成自己顺口的名字比如myzombie、friendszone都行。首次启动会在家目录下自动生成配置文件夹控制台会一路输出地图加载和世界生成的日志这时候不要关等它跑完。第一次启动成功后会生成两个关键路径配置文件目录~/Zomboid/Server/servertest.ini存档目录~/Zomboid/Saves/Multiplayer/servertest/到了这一步先把服务器停掉可以用控制台输入quit或者直接CtrlC因为下一步要改配置。3.4 核心配置文件全解析配置文件是~/Zomboid/Server/servertest.ini实例名不同就替换。这个文件很长我挑几个必须关注的核心项DefaultPort16261 PublicNameMy Zomboid Server # 服务器密码留空表示无密码 Password MaxPlayers32 PVPModefalse PauseEmptytrue PingLimit200 MapKnox Country逐项说明DefaultPort16261游戏连接端口玩家连接时要用PublicName服务器显示名称会在游戏内列表里展示Password如果想要私人房就填一个密码不填则允许任何人连入MaxPlayers最大玩家数我开的是8人PVPModefalse是否允许玩家互相攻击。只想和朋友安心生存就保持false想玩对抗就改成truePauseEmpty服务器没人的时候是否暂停世界时间。保持true可以防止人不在线时角色饿死或者被僵尸围家PingLimit200延迟超过200ms的玩家会被踢出国内局域网玩这个值够用不用动MapKnox Country地图项默认就是诺克斯县全图往下翻还能看到僵尸数量、技能遗忘、沙盒参数的设置项。其实游戏里这些也可以在创建存档时调整服务器配置文件里的项是全局默认值。新手建议先改完上面这几个重点就行其他保持默认出问题概率小一些。4. 端口放行、防火墙与公网连接4.1 需要开放的端口PZ服务器实际使用的端口规则端口协议用途16261UDP游戏主连接端口16262UDP服务器发现/查询端口8766UDPSteam服务器公告端口可选游戏连接走的是UDP而不是TCP这一点经常有新手弄错后面防火墙里只放行了TCP结果一直连不上。4.2 云服务商的安全组放行这一步在云服务器上特别容易漏因为就算系统防火墙全关了云服务商控制台上的“安全组”仍然挡着外部流量。以阿里云、腾讯云、京东云为例通用操作路径是云服务器控制台 → 找到实例 → 安全组/防火墙 → 添加入站规则协议选UDP端口填16261/16262来源IP根据情况填0.0.0.0/0或者限定你们几个人的IP段。如果是私人服我更推荐限定IP段虽然配置多个IP稍微麻烦但能挡住大量外部扫描。4.3 系统防火墙配置如果你服务器开了ufw防火墙需要额外放行sudo ufw allow 16261/udp sudo ufw allow 16262/udp sudo ufw allow 8766/udp如果之前没开ufw以上三步也可以不做。可以用下面命令检查端口监听情况确认服务正常ss -lunp | grep 16261能看到16261在监听就说明服务器本体已经跑起来了。4.4 客户端连接方法服务器启动后玩家从游戏主菜单进入Multiplayer→Join如果服务器列表刷不出就点右下角的Current IP手动输入公网IP:16261比如123.45.67.89:16261点连接。这里有个从未接触过这类游戏的朋友常问的问题游戏内服务器列表里看不到自己的服务器是不是没搭成功不是。Steam服务器列表更新有延迟而且如果没配置Steam服务器令牌公开列表里可能一直不出现直接用IP连是最稳妥的方式。5. 存档、备份与服务器日常维护5.1 用tmux让服务器脱离SSH独立运行服务器跑起来之后SSH窗口一关进程就会被系统挂断这是新手最容易遇到的问题明明搭好了断开重连服务器就没了。解决办法是用tmux开一个独立会话tmux new -s pz cd ~/pzserver ./start-server.sh -servername servertest启动之后按CtrlB再按D分离会话之后断开SSH服务器也会继续在后台跑。下次要回到服务器控制台就执行tmux attach -t pz这个习惯我一直保持到现在比配systemd服务省心而且PZ的控制台命令必须回到这个会话里才能输入tmux是最直观的解决方案。5.2 手动存档与控制台常用指令服务器运行中可以用控制台直接输入命令save立即保存世界不用等自动保存周期quit正常退出并保存/players查看在线玩家列表/adduser 用户名 密码给管理员加个认证需要在servertest.ini里设置AdminPassword/teleport 玩家名等辅助类管理指令建议每次重大活动结束或者关服维护之前都输入一次save多存档不会错。5.3 定时备份脚本PZ存档目录在~/Zomboid/Saves/Multiplayer/servertest/备份其实就是打包这个目录。写个简单脚本nano ~/backup_pz.sh内容如下#!/bin/bash BACKUP_DIR/home/pz/zomboid_backup WORLD_DIR/home/pz/Zomboid/Saves/Multiplayer/servertest DATE$(date %Y%m%d_%H%M) mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/pz_$DATE.tar.gz $WORLD_DIR # 删除7天前的备份防止硬盘被塞满 find $BACKUP_DIR -name pz_*.tar.gz -mtime 7 -delete赋权并加入定时任务chmod x ~/backup_pz.sh crontab -e在打开的编辑器里加一行每天凌晨4点备份0 4 * * * /home/pz/backup_pz.sh /dev/null 21这个备份方案我用了很久虽然土但非常可靠。真遇到坏档、误删、或者版本更新翻车直接解压覆盖回去就完事了。5.4 游戏版本更新与存档迁移《僵尸毁灭工程》更新不算频繁但偶尔会推送大版本更新服务器的方法是重新跑一次SteamCMD拉取cd ~/steamcmd ./steamcmd.sh force_install_dir ~/pzserver login anonymous app_update 380870 validate quit更新前务必先备份存档。大版本更新后旧存档一般还能继续用但某些改动会影响Mod兼容性到时候逐个排查即可。如果要把存档迁移到新服务器做法是打包~/Zomboid整个目录配置和存档都在里面放到新机器相同路径下确保用户名一致能少改很多权限错误。6. 避坑手册常见问题与排查实录这里汇总一下我在这个项目里遇到过的典型问题也是很多新开服的人最容易踩的坑。现象常见原因解决方法启动报error while loading shared libraries缺32位运行库重新执行dpkg --add-architecture i386并安装lib32gcc-s1 lib32stdc6服务器启动后立刻退出无报错启动脚本内存参数过小把-Xmx调到至少2048m玩家连接提示超时没放行UDP端口或安全组未开放放行16261/16262的UDP检查云控制台安全组游戏内服务器列表刷不出来Steam服务器列表延迟或未配令牌直接用IP连接或申请Steam游戏服务器令牌GSLT玩家顶着高延迟被踢PingLimit设置太严格调大PingLimit500或改为0关闭限制地图区块加载不出来、走路掉线Java内存不够或带宽不够调大-Xmx降低MaxPlayersSSH一关服务器就没了没用tmux/screen用tmux启动服务器并分离会话再补充几个现场记录。坑一服务器一周后满载进游戏发现世界时间完全没动。这是PauseEmptytrue的正常表现无人在线时世界是暂停状态防止角色离线期间被僵尸围死。如果你希望世界一直运转把PauseEmptyfalse即可但那样离线玩家再上线可能会发现自己已经变成僵尸口中的晚餐。坑二改完配置重启发现所有玩家存档被重置。这个问题十有八九是启动时没有指定同一个servername。如果你第一次启动用了./start-server.sh -servername servertest第二次却直接./start-server.sh不带参数系统会创建另一个默认名称的服务器实例和空存档。所以每次启动都必须写上同一个-servername这可以说是最坑的细节之一很多人玩了几个星期才发现白干了。坑三装好之后自己和朋友都连不上但从服务器本机输入localhost连接没问题。这就是安全组/防火墙问题重点检查外网入口是否把UDP 16261放行。很多云服务商默认安全组只放行了TCP的22和80端口UDP全是被拦的状态。坑四服务器控制台中文乱码。这个问题在国内服务器上经常出现多半是系统语言和Java默认编码不一致。在启动脚本的Java参数里加上-Dfile.encodingUTF-8能解决大部分乱码情况。如果改完还是乱那就检查Mod文本兼容性问题基本无解。另外开服之后别急着公开IP先自己连进去跑一跑确认存档正常、僵尸刷新正常再让朋友加入。服务器日志在~/Zomboid/Logs/目录下名字按日期排列如果遇到异常可以翻一下DebugLog和serveConsole两个文件很多报错信息比控制台显示的全。写在最后的一点个人体会这次搭建过程前前后后折腾了快两周大部分时间花在排坑而不是搭流程上。事后回头看最典型的教训就是先改内存再动配置顺序搞反了就会被各种莫名其妙的崩溃折磨。还有一个体会是给朋友开的服务器没必要追求太多花哨功能稳定的世界基础和定期备份比什么都重要毕竟玩《僵尸毁灭工程》的核心就是辛辛苦苦肝出来的基地不能一夜之间说没就没。如果你只是几个朋友一起玩2核4G的入门云服务器完全够用按这篇文章走一遍大概一个下午就能把服务器开起来。后续想加Mod、调沙盒参数、做更多玩法扩展都可以在这个底子上慢慢折腾。开服过程中如果遇到其他问题欢迎多翻翻游戏官方Wiki和社区老玩家的帖子很多你已经踩过的坑前辈们早就踩过一次了。