多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

天翼云Ubuntu主机搭建幻兽帕鲁私服:从SteamCMD部署到systemd服务化全指南

天翼云Ubuntu主机搭建幻兽帕鲁私服:从SteamCMD部署到systemd服务化全指南 1. 项目概述与核心价值手头有一台天翼云的Ubuntu云主机想在上面搭个《幻兽帕鲁》的私服和朋友一起玩这个想法听起来挺酷实际操作起来也确实是一条非常可行的路子。我自己前阵子刚在类似的云环境里折腾过一遍从一片空白的Ubuntu系统到成功建起一个稳定运行的帕鲁服务器整个过程踩了不少坑也总结了不少能直接“抄作业”的经验。对于很多玩家来说官服有时会卡顿、排队或者想和固定的小圈子朋友拥有一个专属的、规则自定义的世界自建服务器就成了最优解。天翼云作为国内主流的云服务商其云主机在网络稳定性和性价比上常有不错的表现用它来承载一个10人左右的中小型《幻兽帕鲁》服务器性能是绰绰有余的。这个项目的核心其实就是将SteamCMD这款Valve官方的服务器管理工具与《幻兽帕鲁》的专用服务器端程序结合起来在Linux环境下完成部署、配置和持续运维。它不单单是执行几条命令那么简单涉及到Linux系统的基础操作、防火墙配置、服务进程的守护、以及针对游戏服务器特性的性能调优。完成之后你将获得一个完全由自己掌控的游戏世界可以随时修改游戏参数、备份存档、管理玩家这种自由度和成就感是连接公共服务器无法比拟的。下面我就把这次在天翼云Ubuntu主机上搭建《幻兽帕鲁》服务器的完整过程、关键细节和避坑指南详细拆解一遍。2. 前期准备与云主机环境配置在开始安装游戏服务器之前我们必须确保云主机的系统环境是干净、正确且网络通畅的。这一步是基石很多后续问题都是因为前期准备不充分导致的。2.1 天翼云主机规格选择与系统确认首先你需要确保你的天翼云主机满足最低运行要求。根据《幻兽帕鲁》服务器端的实际资源消耗我推荐以下配置CPU至少2核建议4核。游戏服务器对单核性能有一定要求多核能更好地处理多个玩家和大量实体帕鲁、建筑的逻辑运算。内存最低8GB强烈建议16GB。在玩家较多、建筑复杂的情况下内存占用会轻松突破10GB预留余量能保证稳定。存储系统盘数据盘总计不少于50GB。服务器端文件大约占20GB此外还要为存档、日志和未来更新留出空间。建议使用SSD云硬盘以获得更快的世界加载和存档读写速度。操作系统Ubuntu 22.04 LTS或Ubuntu 20.04 LTS。这是经过大量社区验证最稳定的版本本文将以Ubuntu 22.04 LTS为例。请通过lsb_release -a命令确认你的系统版本。网络确保云主机的安全组或防火墙规则已经放行了所需的端口。对于《幻兽帕鲁》默认需要放行UDP 8211端口。同时为了后续用SSH连接和管理也需要放行TCP 22端口。注意购买或初始化云主机时请务必设置一个强度足够的SSH登录密码或者更推荐使用SSH密钥对进行认证这能极大提升安全性。2.2 系统更新与基础依赖安装通过SSH连接到你的天翼云主机后第一件事就是更新系统包列表并升级现有软件这能确保我们在一个最新的基础环境下工作。sudo apt update sudo apt upgrade -y升级完成后安装后续步骤所必需的一系列工具和库文件。这些依赖包括用于下载SteamCMD的32位兼容库、用于解压文件的工具、用于管理守护进程的软件等。sudo apt install -y software-properties-common lib32gcc-s1 steamcmd curl wget file tar bzip2 gzip unzip bsdmainutils python3 util-linux ca-certificates binutils bc jq tmux netcat lib32stdc6 libsdl2-2.0-0:i386这里重点解释一下lib32gcc-s1和lib32stdc6因为SteamCMD是32位的程序在64位的Ubuntu系统上运行需要这些32位的运行时库。如果缺失在启动SteamCMD时会报错“找不到文件”或“命令不存在”其实是动态链接库缺失。2.3 创建专用系统用户与目录规划强烈不建议直接使用root用户来运行游戏服务器。创建一个专用的、权限受限的系统用户是安全运维的最佳实践。# 创建一个名为 palworld 的系统用户并指定其主目录 sudo useradd -m -s /bin/bash palworld # 为这个用户设置密码用于后续可能需要的sudo切换 sudo passwd palworld接下来切换到palworld用户并在其家目录下创建清晰的工作目录结构。好的目录结构能让文件管理、备份和问题排查变得一目了然。# 切换到 palworld 用户 sudo su - palworld # 创建服务器根目录 mkdir -p ~/palworld-server # 进入该目录 cd ~/palworld-server # 创建子目录SteamCMD工具目录、游戏服务器目录、存档备份目录 mkdir -p steamcmd game server-backups这样的结构意味着steamcmd/ 存放SteamCMD客户端本身。game/ SteamCMD会将《幻兽帕鲁》服务器文件下载到这里。server-backups/ 用于定期存放游戏世界存档的备份。3. 核心组件安装与服务器端部署环境准备好后就进入核心环节安装SteamCMD并利用它下载《幻兽帕鲁》的专用服务器端程序。3.1 安装并配置SteamCMDSteamCMD是Valve提供的命令行工具专门用于安装和更新Steam上的各种专用服务器。# 确保当前在 palworld 用户的家目录下的 palworld-server 目录中 cd ~/palworld-server # 下载 SteamCMD 的 Linux 版本压缩包 wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # 将压缩包解压到之前创建的 steamcmd 目录中 tar -xvzf steamcmd_linux.tar.gz -C steamcmd/ # 进入 steamcmd 目录 cd steamcmd首次运行SteamCMD它会进行自我更新。这里我们使用一个脚本文件来简化操作因为SteamCMD需要接受许可协议。# 创建一个脚本文件来首次启动并更新 echo ./steamcmd.sh quit first-run.sh chmod x first-run.sh ./first-run.sh你会看到它下载一些文件并最终显示“Success! App 1829350 already up to date.”这表示SteamCMD自身更新完毕。3.2 下载幻兽帕鲁专用服务器端《幻兽帕鲁》的服务器端在Steam上是一个特殊的、免费的工具App ID: 2394010。我们使用SteamCMD的匿名登录anonymous来下载它。# 创建一个下载脚本 cat update_palworld.txt EOF // 登录匿名账户用于下载免费内容 login anonymous // 强制将服务器端安装到指定的绝对路径 force_install_dir /home/palworld/palworld-server/game // 下载App ID为2394010的应用即幻兽帕鲁专用服务器 app_update 2394010 validate // 下载完成后退出 quit EOF然后执行这个脚本./steamcmd.sh runscript update_palworld.txt这个过程会下载大约20GB的文件耗时取决于你的云主机带宽。validate参数会验证文件的完整性确保下载无误。当看到 “Success! App ‘2394010’ fully installed.” 时表示服务器端已就绪。3.3 服务器基础配置与启动脚本编写下载的文件中包含了服务器程序PalServer.sh但我们需要一个自定义的启动脚本以便能够方便地传递参数、管理进程。首先进入游戏服务器目录查看默认配置cd ~/palworld-server/game ls -la你会看到PalServer.sh、PalWorldSettings.ini等文件。PalWorldSettings.ini是游戏世界的核心配置文件但首次启动后会在存档目录生成另一个副本我们通常修改后者。现在在服务器根目录创建一个自定义的启动脚本start_server.shcd ~/palworld-server cat start_server.sh EOF #!/bin/bash # 定义服务器程序路径 SERVER_DIR/home/palworld/palworld-server/game # 进入服务器目录 cd $SERVER_DIR # 设置服务器进程的nice值优先级避免占用过多资源影响系统 nice -n -10 \ # 启动服务器程序并指定相关参数 ./PalServer.sh \ # 服务器监听的端口默认8211 -port8211 \ # 服务器在Steam服务器列表中的公开名称 -publicNameMy PalWorld Server on CTYun \ # 服务器在列表中的描述 -publicDescriptionA private server hosted on CTYun Ubuntu. \ # 服务器密码留空则为公开服务器 -serverPasswordYourStrongPassword123 \ # 管理员密码用于在游戏内通过命令管理服务器 -adminPasswordAdminPassword456 \ # 玩家人数上限根据主机性能设置建议4-16 -players16 \ # 启用REST API可用于第三方管理工具 -USE_CRASH_REPORT EOF # 赋予脚本执行权限 chmod x start_server.sh重要提示请务必将serverPassword和adminPassword替换为你自己的强密码。adminPassword尤其重要拥有此密码的人可以在游戏内执行高级指令。4. 系统服务化与自动化管理让服务器在后台稳定运行并且能随系统启动而自动启动是生产环境部署的关键。我们使用systemd来创建服务。4.1 创建Systemd服务单元文件切换回root用户或使用sudo为我们的服务器创建一个系统服务。# 退出 palworld 用户回到有sudo权限的用户 exit # 创建服务文件 sudo nano /etc/systemd/system/palworld-server.service将以下内容粘贴进去注意修改User,WorkingDirectory和ExecStart的路径使其与你实际的目录匹配[Unit] DescriptionPalWorld Dedicated Server Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple # 使用我们创建的专用用户运行 Userpalworld Grouppalworld # 设置工作目录 WorkingDirectory/home/palworld/palworld-server # 启动命令执行我们编写的脚本 ExecStart/bin/bash /home/palworld/palworld-server/start_server.sh # 标准输出和错误输出重定向到系统日志 StandardOutputjournal StandardErrorjournal # 设置进程的nice值这里在脚本中已设置此处可省略或保持一致 Nice-10 # 内存和CPU限制可选根据实际情况调整 # LimitNOFILE100000 # LimitNPROC64 # 确保进程意外退出后自动重启 Restarton-failure RestartSec10s [Install] WantedBymulti-user.target4.2 启动服务并设置开机自启保存并退出编辑器后执行以下命令# 重新加载systemd配置使新服务文件生效 sudo systemctl daemon-reload # 启动幻兽帕鲁服务器服务 sudo systemctl start palworld-server.service # 设置服务在系统启动时自动启动 sudo systemctl enable palworld-server.service # 查看服务运行状态确认是否活跃active sudo systemctl status palworld-server.service如果状态显示为active (running)并且日志中没有明显的错误信息那么恭喜你服务器已经在后台稳定运行了。你可以使用sudo journalctl -u palworld-server.service -f来实时跟踪服务器日志查看玩家连接、世界保存等信息。4.3 防火墙端口放行即使云主机控制台的安全组放行了UDP 8211系统内部的防火墙如ufw也可能阻止流量。如果系统启用了ufw需要额外放行# 查看ufw状态 sudo ufw status # 如果状态是inactive则无需操作。如果是active则放行端口 sudo ufw allow 8211/udp sudo ufw reload5. 游戏世界配置与高级管理服务器跑起来只是第一步打造一个符合自己心意的游戏世界才是乐趣所在。5.1 核心配置文件详解服务器运行后会在palworld用户的存档路径下生成配置文件。通常路径是/home/palworld/.steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/。其中最重要的两个文件是PalWorldSettings.ini: 游戏世界规则设置。GameUserSettings.ini: 服务器引擎设置。我们主要修改PalWorldSettings.ini。在修改前先停止服务sudo systemctl stop palworld-server.service然后编辑该文件sudo nano /home/palworld/.steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini以下是一些关键配置项的示例和解释[/Script/Pal.PalGameWorldSettings] OptionSettings( # 难度None, Easy, Normal, Hard DifficultyNone, # 白天流逝速度默认1.0 DayTimeSpeedRate1.0, # 夜晚流逝速度默认1.0 NightTimeSpeedRate1.0, # 经验值倍率默认1.0 ExpRate1.0, # 采集物品倍率默认1.0 CollectionItemRate1.0, # 帕鲁捕获概率倍率默认1.0 PalCaptureRate1.0, # 帕鲁出现数量倍率默认1.0 PalSpawnNumRate1.0, # 死亡惩罚None, Item, ItemAndEquipment, All DeathPenaltyAll, # 是否允许玩家对他人建筑造成伤害 bEnablePlayerToPlayerDamageFalse, # 是否允许友好火焰友军伤害 bEnableFriendlyFireFalse, # 最大公会部落人数 GuildPlayerMaxNum20, # 是否启用PvP bIsPvPFalse, # 是否允许在基地内建造 bCanPickupOtherGuildDeathPenaltyDropFalse, # 是否启用入侵事件 bEnableInvaderEnemyTrue, # 建造物体耐久度倍率默认1.0 BuildObjectDamageRate1.0, # 建造物体退化速度倍率默认1.0 BuildObjectDeteriorationDamageRate1.0, # 资源采集点重生间隔小时默认1.0 CollectionObjectRespawnSpeedRate1.0, # 工作速度倍率默认1.0 WorkSpeedRate1.0, )修改完成后保存然后启动服务使配置生效sudo systemctl start palworld-server.service5.2 存档备份与恢复方案游戏世界的存档是服务器的核心资产定期备份至关重要。存档通常位于/home/palworld/.steam/steamapps/common/PalServer/Pal/Saved/SaveGames/。我们可以创建一个简单的备份脚本backup_save.sh并利用cron定时任务自动执行。# 切换到 palworld 用户 sudo su - palworld cd ~/palworld-server cat backup_save.sh EOF #!/bin/bash BACKUP_DIR/home/palworld/palworld-server/server-backups SAVE_DIR/home/palworld/.steam/steamapps/common/PalServer/Pal/Saved/SaveGames DATE$(date %Y%m%d_%H%M%S) BACKUP_FILE$BACKUP_DIR/palworld_save_$DATE.tar.gz # 创建备份目录如果不存在 mkdir -p $BACKUP_DIR # 打包压缩存档目录 tar -czf $BACKUP_FILE -C $SAVE_DIR . # 删除超过7天的旧备份以节省空间 find $BACKUP_DIR -name palworld_save_*.tar.gz -mtime 7 -delete echo Backup completed: $BACKUP_FILE EOF chmod x backup_save.sh然后为palworld用户添加定时任务crontab -e在打开的编辑器中添加一行表示每天凌晨3点执行备份0 3 * * * /home/palworld/palworld-server/backup_save.sh /home/palworld/palworld-server/backup.log 21如果需要恢复存档只需停止服务器将备份文件解压覆盖到SaveGames目录然后重启服务器即可。5.3 服务器日常管理命令除了使用systemctl管理服务生命周期在游戏内也可以使用管理员命令。在游戏中按Enter打开聊天框输入以下格式的命令/AdminPassword AdminPassword456 # 首先输入管理员密码进行认证 /Shutdown 60 # 60秒后关闭服务器并保存 /DoExit # 立即强制关闭服务器不推荐可能丢存档 /Broadcast 服务器将在10分钟后重启维护 # 向所有玩家发送广播 /Save # 手动立即保存世界这些命令对于计划内的维护和紧急通知非常有用。6. 常见问题排查与性能优化在搭建和运行过程中你可能会遇到一些问题。这里汇总了一些典型问题及其解决方法。6.1 服务器启动失败或崩溃问题现象systemctl status显示failed或不断重启。排查步骤查看详细日志sudo journalctl -u palworld-server.service -n 100 --no-pager。这是最重要的诊断依据。检查端口占用sudo netstat -tulnp | grep :8211。确认8211端口是否被其他进程占用。检查文件权限确保/home/palworld/palworld-server目录及其子目录的所有者为palworld用户。可以使用sudo chown -R palworld:palworld /home/palworld/palworld-server进行修复。检查依赖库如果日志提到libXXX.so找不到可能是缺少32位库。重新安装第2.2节提到的依赖包。检查启动脚本确认start_server.sh脚本中的路径是否正确是否有语法错误。可以手动执行bash -x start_server.sh来调试。6.2 玩家无法连接服务器问题现象玩家在游戏内服务器列表搜不到或连接超时。排查步骤确认服务器进程在运行sudo systemctl is-active palworld-server.service。确认端口已监听在服务器上执行sudo ss -ulnp | grep 8211应看到PalServer进程在监听UDP 8211。检查云主机安全组登录天翼云控制台确认入方向规则已允许UDP 8211端口源地址通常是0.0.0.0/0对所有IP开放或你指定的IP段。检查系统防火墙如第4.3节所述确认ufw已放行该端口。使用公网IP直连让玩家在游戏内选择“加入指定地址”输入你的云主机公网IP地址:8211例如123.123.123.123:8211尝试连接。服务器是否设置密码如果启动脚本中设置了-serverPassword玩家连接时必须输入正确密码。6.3 服务器运行卡顿或延迟高问题现象玩家感觉操作延迟大帕鲁或物品刷新慢。优化建议监控资源使用使用htop或nmon命令监控CPU、内存和网络带宽。如果资源持续吃满考虑升级云主机配置。调整玩家人数上限在start_server.sh中降低-players参数值。每个在线玩家都会消耗资源。优化游戏内设置在PalWorldSettings.ini中适当调低PalSpawnNumRate帕鲁生成率和CollectionObjectRespawnSpeedRate资源刷新率减轻服务器计算压力。使用性能更好的磁盘如果使用的是普通云硬盘可以考虑升级为SSD云硬盘世界加载和存档读写速度会显著提升。考虑地域因素如果玩家和服务器分布在不同地区网络延迟是物理限制。可以考虑选择地理位置折中的云服务器区域或者使用加速器针对玩家端。6.4 存档损坏或丢失预防与处理严格遵守关机流程尽量使用/Shutdown命令或在停止systemd服务前等待服务器自动保存通常有自动保存间隔。避免直接kill进程或强制关机。定期手动备份除了自动备份脚本在进行重大操作如修改核心配置、更新服务器端前手动执行一次备份。恢复备份如果发生损坏停止服务用备份的存档文件替换损坏的存档文件。注意存档目录下可能有多个以随机数字命名的文件夹对应不同的存档槽恢复时要找到正确的那个。6.5 更新服务器端程序当游戏更新后服务器端也需要相应更新。# 切换到 palworld 用户 sudo su - palworld cd ~/palworld-server/steamcmd # 再次运行更新脚本SteamCMD会自动检测并更新文件 ./steamcmd.sh runscript ../update_palworld.txt # 更新完成后重启服务 sudo systemctl restart palworld-server.service更新前务必执行一次完整的存档备份。虽然SteamCMD的validate过程通常安全但以防万一。整个搭建过程最需要耐心的是第一次下载20G左右的服务器端文件以及后续的调试。一旦服务稳定运行起来通过systemd和定时备份脚本它的运维成本其实非常低。最关键的是你拥有了一个完全自定义的游戏世界所有的规则、进度都由你和你的朋友决定这种体验是公共服务器无法给予的。如果在操作中遇到上面没覆盖的问题多查看journalctl日志那里面通常包含了最直接的错误线索。
返回列表