news 2026/9/16 19:20:45

Linux云服务器搭建《僵尸毁灭工程》专用服务器全流程指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux云服务器搭建《僵尸毁灭工程》专用服务器全流程指南

开头先交代一下背景:我最早玩《僵尸毁灭工程》(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 lib32stdc++6

这两行是核心。如果你机器比较干净,可以再装一下wget tar tmux这些基础工具,后面都会用上。

sudo apt install -y wget tar tmux

2.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指定服务器文件安装到哪个目录,我这里是~/pzserver
  • login anonymous匿名登录即可,因为服务器文件是免费公开的
  • app_update 380870拉取App ID对应的文件
  • validate校验文件完整性,防止下载中断导致文件残缺
  • quit执行完自动退出

这个下载过程取决于网络,可能几分钟也可能十几分钟。看到Success! App '380870' already up to date.或者等命令跑完没报错,就是成功了。

下载完成后进入目录看一眼:

ls ~/pzserver

里面会有start-server.shProjectZomboid64这些关键文件。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 servertest

servername是服务器实例名,你可以改成自己顺口的名字,比如myzombiefriendszone都行。首次启动会在家目录下自动生成配置文件夹,控制台会一路输出地图加载和世界生成的日志,这时候不要关,等它跑完。

第一次启动成功后会生成两个关键路径:

  • 配置文件目录:~/Zomboid/Server/servertest.ini
  • 存档目录:~/Zomboid/Saves/Multiplayer/servertest/

到了这一步,先把服务器停掉,可以用控制台输入quit,或者直接Ctrl+C,因为下一步要改配置。

3.4 核心配置文件全解析

配置文件是~/Zomboid/Server/servertest.ini(实例名不同就替换)。这个文件很长,我挑几个必须关注的核心项:

DefaultPort=16261 PublicName=My Zomboid Server # 服务器密码,留空表示无密码 Password= MaxPlayers=32 PVPMode=false PauseEmpty=true PingLimit=200 Map=Knox Country

逐项说明:

  • DefaultPort=16261:游戏连接端口,玩家连接时要用
  • PublicName:服务器显示名称,会在游戏内列表里展示
  • Password:如果想要私人房就填一个密码,不填则允许任何人连入
  • MaxPlayers:最大玩家数,我开的是8人
  • PVPMode=false:是否允许玩家互相攻击。只想和朋友安心生存就保持false;想玩对抗就改成true
  • PauseEmpty:服务器没人的时候是否暂停世界时间。保持true可以防止人不在线时角色饿死或者被僵尸围家
  • PingLimit=200:延迟超过200ms的玩家会被踢出,国内局域网玩这个值够用,不用动
  • Map=Knox 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 客户端连接方法

服务器启动后,玩家从游戏主菜单进入MultiplayerJoin,如果服务器列表刷不出,就点右下角的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

启动之后按Ctrl+B再按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 2>&1

这个备份方案我用了很久,虽然土,但非常可靠。真遇到坏档、误删、或者版本更新翻车,直接解压覆盖回去就完事了。

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 lib32stdc++6
服务器启动后立刻退出,无报错启动脚本内存参数过小-Xmx调到至少2048m
玩家连接提示超时没放行UDP端口或安全组未开放放行16261/16262的UDP,检查云控制台安全组
游戏内服务器列表刷不出来Steam服务器列表延迟或未配令牌直接用IP连接,或申请Steam游戏服务器令牌(GSLT)
玩家顶着高延迟被踢PingLimit设置太严格调大PingLimit=500或改为0关闭限制
地图区块加载不出来、走路掉线Java内存不够或带宽不够调大-Xmx,降低MaxPlayers
SSH一关服务器就没了没用tmux/screen用tmux启动服务器并分离会话

再补充几个现场记录。

坑一:服务器一周后满载,进游戏发现世界时间完全没动。这是PauseEmpty=true的正常表现,无人在线时世界是暂停状态,防止角色离线期间被僵尸围死。如果你希望世界一直运转,把PauseEmpty=false即可,但那样离线玩家再上线可能会发现自己已经变成僵尸口中的晚餐。

坑二:改完配置重启,发现所有玩家存档被重置。这个问题十有八九是启动时没有指定同一个servername。如果你第一次启动用了./start-server.sh -servername servertest,第二次却直接./start-server.sh不带参数,系统会创建另一个默认名称的服务器实例和空存档。所以每次启动都必须写上同一个-servername,这可以说是最坑的细节之一,很多人玩了几个星期才发现白干了。

坑三:装好之后自己和朋友都连不上,但从服务器本机输入localhost连接没问题。这就是安全组/防火墙问题,重点检查外网入口是否把UDP 16261放行。很多云服务商默认安全组只放行了TCP的22和80端口,UDP全是被拦的状态。

坑四:服务器控制台中文乱码。这个问题在国内服务器上经常出现,多半是系统语言和Java默认编码不一致。在启动脚本的Java参数里加上-Dfile.encoding=UTF-8能解决大部分乱码情况。如果改完还是乱,那就检查Mod文本,兼容性问题,基本无解。

另外,开服之后别急着公开IP,先自己连进去跑一跑,确认存档正常、僵尸刷新正常,再让朋友加入。服务器日志在~/Zomboid/Logs/目录下,名字按日期排列,如果遇到异常可以翻一下DebugLogserveConsole两个文件,很多报错信息比控制台显示的全。

写在最后的一点个人体会

这次搭建过程前前后后折腾了快两周,大部分时间花在排坑而不是搭流程上。事后回头看,最典型的教训就是:先改内存,再动配置,顺序搞反了就会被各种莫名其妙的崩溃折磨。还有一个体会是,给朋友开的服务器没必要追求太多花哨功能,稳定的世界基础和定期备份比什么都重要,毕竟玩《僵尸毁灭工程》的核心就是辛辛苦苦肝出来的基地不能一夜之间说没就没。

如果你只是几个朋友一起玩,2核4G的入门云服务器完全够用,按这篇文章走一遍,大概一个下午就能把服务器开起来。后续想加Mod、调沙盒参数、做更多玩法扩展,都可以在这个底子上慢慢折腾。开服过程中如果遇到其他问题,欢迎多翻翻游戏官方Wiki和社区老玩家的帖子,很多你已经踩过的坑,前辈们早就踩过一次了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:18:20

提示词工程:提升AI交互质量的核心技巧

1. 提示词(Prompt)的本质与价值在人工智能交互领域,提示词(Prompt)就像一把打开智能系统的钥匙。它不仅仅是简单的文字输入,而是用户与AI模型之间的精确沟通桥梁。我从事AI产品设计多年,深刻体会…

作者头像 李华
网站建设 2026/9/16 19:17:46

Docker镜像删除报conflict?从原理到实战彻底解决

用了一年多的 Docker,最近在清理本地镜像时突然被这个报错拦住了:$ docker rmi 3b5d1b1e1c9e Error response from daemon: conflict: unable to delete 3b5d1b1e1c9e (cannot be forced) - image is being used by running container 8f2a1c4e6d7b乍一看…

作者头像 李华
网站建设 2026/9/16 19:17:38

51单片机电梯控制系统:硬实时状态机与实机调试指南

简介:本资源是一套完整的基于单片机的电梯控制系统实践项目,面向电子工程、自动化及嵌入式开发初学者与课程设计学生,解决电梯控制逻辑实现、软硬件协同调试等典型工程问题。压缩包共33个文件,含4个C语言源码(如cong1.…

作者头像 李华
网站建设 2026/9/16 19:17:24

a标签的href与target属性详解:从基础写法到安全实践

1. 先从最容易翻车的细节说起&#xff1a;href的正确写法新手写HTML链接&#xff0c;第一行代码十有八九是<a href"https://example.com">点我</a>。但我在帮人排查代码的时候&#xff0c;见过最多的错误不是忘了写闭合标签&#xff0c;也不是引号用成了…

作者头像 李华
网站建设 2026/9/16 19:15:15

LSTM参数精讲:hidden_size、输入输出维度与PyTorch/Keras实战对照

我第一次用 LSTM 做水文径流预报时&#xff0c;代码跑通了&#xff0c;但心里完全是虚的。hidden_size 到底该设多大&#xff1f;输入是三维张量&#xff0c;三个维度分别代表什么&#xff1f;输出到底应该取整个序列还是最后一个时间步&#xff1f;这些参数我搜了很多资料也没…

作者头像 李华