突然看到 Steam 好友列表都在玩 Palworld。这到底是个啥游戏这么火, 打开 Steam 商店统计一看哦豁热销、游玩都是第一名。
离游戏发布短短 16 天 43 个好友已拥有??? 什么游戏这么热门!?
下载启动, 逐渐入迷下机的时候一看时间 7 天过去了。一直都是单机玩的如果可以和小伙伴一起联机该多好啊。但是使用游戏自带的邀请码加入游戏, 需要房主在线才能其他人才能加入游戏。对于这种 RPG 游戏存档很重要, 但是它保存在房主的电脑上, 非常不方便。
不如我们用云服务器搭建一个游戏服务器, 这样随时都可以加入游戏, 我们睡觉的时候帕鲁也会继续工作。压榨帕鲁让他们 007 的工作
搭建步骤
目前, Palworld 服务端存在内存泄漏问题。为了保证能够全天稳定运行, 内存最低为 32 或 64GB
规格 | 数值 | 备注 |
---|---|---|
系统 | CentOS 7 | 也可以使用 Ubuntu 等系统 |
CPU | 4 个虚拟 CPU | 官方建议为 4 核以上 |
内存 | 16 GB | 官方建议为 16GB 以上, 为了稳定运行建议使用 32GB |
硬盘 | 100 GB | 截至 2024 年 1 月, 服务器文件总容量为 4.8 GB |
公开端口 | 8211 (UDP) | 默认端口 |
SELinux | 已禁用 |
如果内存很小, 比如在 VPS 中, 可以创建 swap 虚拟内存, 即使物理内存小于官方推荐值也能稳定运行。不过, 这取决于磁盘 I/O 性能。
禁用 SELinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
安装 SteamCMD
为了安全起见, 使用非 root 用户运行游戏服务端。首先, 以 root 用户身份登录到服务器, 创建一个名为 steam
的用户, 并切换到该用户的环境下
# 安装 32 位运行依赖
yum install glibc.i686 libstdc++.i686 -y
# 创建 steam 用户
useradd -m steam
# 切换为 steam 用户
su - steam
# 下载 SteamCMD
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xf steamcmd_linux.tar.gz
./steamcmd.sh
安装 Palworld 服务端
# 创建安装目录
mkdir PalServer
# 进入 steam 命令行
./steamcmd.sh
Steam>force_install_dir ./PalServer # 指定安装目录
Steam>login anonymous # 以匿名身份登录
Steam>app_update 2394010 validate # Palworld 的 App ID 是 2394010
Steam>quit # 退出 steamcmd
启动 Palworld 服务端
cd PalServer/
./PalServer.sh
如果遇到找不到 steamclient.so
文件的错误需要按照下面步骤修复
steamclient.so: cannot open shared object file: No such file or directory
dlopen failed trying to load:
/home/steam/.steam/sdk64/steamclient.so
with error:
/home/steam/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/steam/.steam/sdk64/steamclient.so
^CFUnixPlatformMisc::RequestExitWithStatus
FUnixPlatformMisc::RequestExit
Exiting abnormally (error code: 130)
Shutdown handler: cleanup.
修复步骤
# 创建依赖文件路径
mkdir -p .steam/sdk64/
# 创建软连接
ln -s /home/steam/linux64/steamclient.so /home/steam/.steam/sdk64/steamclient.so
# 检查文件
[steam@server ~]$ ls -al /home/steam/.steam/sdk64/steamclient.so
lrwxrwxrwx 1 steam steam 34 Feb 4 2024 /home/steam/.steam/sdk64/steamclient.so -> /home/steam/linux64/steamclient.so
再次启动服务端
[steam@server PalServer]$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
sh: xdg-user-dir: command not found
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 3 milliseconds to initialize
dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
Setting breakpad minidump AppID = 2394010
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
检查是否可以正常启动, 没有其他错误后可以按 Ctrl+C 停止服务器。
设置 systemd 服务
使用 systemd 管理 Palworld 服务端
vim /etc/systemd/system/palworld.service
输入以下内容并使用 :wq
保存
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
User=steam
Group=steam
ExecStart=/home/steam/PalServer/PalServer.sh EpicApp=PalServer -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
LimitNOFILE=100000
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
更新 Palworld 服务端
游戏推出新版本后服务端也需要更新
手动更新
./steamcmd.sh +force_install_dir ./PalServer +login anonymous +app_update 2394010 validate +quit
原文