Mac 系统(M 系处理器)搭建幻兽帕鲁(palworld)服务器
环境准备
- 下载安装docker,https://www.docker.com/。
- 修改 docker desktop 中的 Settings - Resources ,把CPU Limit拉满,Memory Limit 拉到给剩2-3G接近满值,Swap拉满,保存。
- 创建一个文件夹,例如:
palworld-arm-docker
,在里面创建一个空的子文件夹palworld
。
docker-compose
在 palworld-arm-docker
文件夹下面创建 docker-compose.yml
文件。
mem_limit
视自己的刚才的Memory Limit
调整,比如Memory Limit
是14G,那么mem_limit
就设定为13G,这样可以在内存泄露严重时自动重启容器。
version: '3'
services:
pal:
image: czy0612/palworld-server
restart: always
mem_limit: 13g
container_name: pal
ports:
- 8211:8211/udp
- 25575:25575/tcp
volumes:
- ./PalWorldSettings.ini:/home/steam/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
- ./palworld:/home/steam/Steam/steamapps/common/PalServer/
PalGameWorldSettings(游戏配置)
在 palworld-arm-docker
文件夹下面创建 PalWorldSettings.ini
文件。
官方文档:https://tech.palworldgame.com/optimize-game-balance
配置生成器:https://dysoncheng.github.io/PalWorldSettingGenerator/setting.html
默认配置如下,如何修改可以参考上面两个网页:
[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.000000,PalCaptureRate=1.000000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaceRate=1.000000,PlayerStaminaDecreaceRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaceRate=1.000000,PalStaminaDecreaceRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=1.000000,CollectionObjectHpRate=1.000000,CollectionObjectRespawnSpeedRate=1.000000,EnemyDropItemRate=1.000000,DeathPenalty=All,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=72.000000,WorkSpeedRate=1.000000,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=32,ServerName="Default Palworld Server",ServerDescription="",AdminPassword="123456",ServerPassword="",PublicPort=8211,PublicIP="",RCONEnabled=True,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")
运行
- 终端中 cd 到
palworld-arm-docker
文件夹目录下 - 拉取 docker 镜像
docker-compose pull
- 运行
docker-compose up -d
- 等待30秒后
sudo docker logs pal
看到如下信息说明服务器配置好了,马上可以冲了!
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 29 milliseconds to initialize
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.
网络配置
如果你能拿到公网ip,看端口映射章节,拿不到公网ip看内网穿透章节。
端口映射
- 路由上给 Mac 终端指定一个ip
- 虚拟服务器/端口映射上,配置Mac终端映射端口8211(协议UDP)/25575(协议TCP)
FRP内网穿透
FRP教程我这里就不在赘述了,这里使用的是0.52.3版本。下面有一份配置可供参考。
frps配置参考:
bindPort = 7001 #{必选} 客户端与该端口建立连接
transport.tls.enable = true
#身份验证
auth.method = "token" #{可选}身份验证方式
auth.token = "123456" #token设置密码,用于通过身份验证创建连接
#frp服务仪表板配置
webServer.port = 17300 #{也可自行修改端口}
webServer.addr = "0.0.0.0" #公网ip或者域名
webServer.user = "user" #登录用户名{可自行修改}
webServer.password = "password" #登录密码{可自行修改}
frpc配置参考:
serverAddr = "114.114.115.115" #填写你的frps服务器
serverPort = 7001 #填写你的frps服务的端口
auth.token = "123456"
transport.tls.enable = true
[[proxies]]
name = "palworld-ucp"
type = "udp"
localIP = "127.0.0.1"
localPort = 8211
remotePort = 8211
[[proxies]]
name = "palworld-rcon"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25575
remotePort = 25575
游戏运维
RCON服务器指令
工具:
https://github.com/gorcon/rcon-cli
用法示例,12345为之前设置的游戏参数AdminPassword
,根据实际情况修改:
./rcon -a 114.114.115.115:25575 -p 123456
服务器命令表:
https://tech.palworldgame.com/server-commands
存档备份
备份配置
目前游戏不太稳定,炸档情况偶有发生,所以最好定时备份存档,这样在出问题时可以快速回滚。
- 在
palworld-arm-docker
文件夹下面创建back
文件夹。 - 在
palworld-arm-docker
文件夹下面创建back.sh
文件(注意按照你palworld-arm-docker
文件夹的实际路径对脚本中的路径进行修改):
#!/bin/bash
# 备份文件名
t=$(date +%Y-%m-%d-%H-%M-%S).zip
echo $t
# 备份文件存放路径,此处注意
zip_path=/Users/Admin/Server/palworld-arm-docker/back/$t
# 压缩指定目录为zip
zip -r -q $zip_path /Users/Admin/Server/palworld-arm-docker/palworld/Pal/Saved/*
# 遍历并删除3天之前的文件
back_path=/Users/Admin/Server/palworld-arm-docker/back/
# 获取当前时间戳
current_time=$(date +%s)
# 遍历back路径下的文件
for file in $back_path*
do
# 检查文件的修改时间
modified_time=$(stat -f %m $file)
# 计算文件的时间差(以秒为单位)
time_diff=$((current_time - modified_time))
# 判断文件是否超过3天未修改
if [ $time_diff -gt $((3 * 24 * 60 * 60)) ]
then
# 删除文件
rm $file
fi
done
- 在终端中,输入命令
crontab -e
开始编辑定时任务,在编辑界面中按i
进入输入状态,输入下面的指令(注意按照你palworld-arm-docker
文件夹的实际路径对脚本中的路径进行修改)
*/30 * * * * /bin/bash /Users/Admin/Server/palworld-arm-docker/back.sh
按esc
退出输入状态,输入:wq
保存文件并退出。如果此时有弹窗提示是否同意,点击同意。
系统会在每个小时的0分和30分钟备份一次存档。
回滚存档
一旦发生不幸,可以开始回滚存档。
- 终端
cd
进入palworld-arm-docker
文件夹下,停止 docker 容器docker-compose down
- 将之前的备份解压,确认成功解压后
- 进入
/Users/Admin/Server/palworld-arm-docker/palworld/Pal/Saved/
目录下,压缩备份当前的坏存档,之后删除Saved
文件夹下的所有文件。 - 将之前解压好的备份移到
Saved
文件夹下 - 终端中启动 docker 容器
docker-compose up -d
更新版本
此docker镜像有自动更新机制,如果服务端有新的更新,会在 docker 容器启动时自动更新游戏。
- 终端
cd
进入palworld-arm-docker
文件夹下,停止 docker 容器docker-compose down
- 终端中启动 docker 容器
docker-compose up -d
- 使用
sudo docker logs pal
查看更新进度和是否启动部署成功
补充
- 设置ServerPassword的话,无法直接输入ip+端口加入房间,必须要曲线救国,最好别设置。
- 帕鲁服务端目前非常吃配置,机器内存不建议低于16G。
- 帕鲁服务端目前非常吃配置,frps服务器的带宽也很重要,想流畅不卡最少一个在线用户要分到1M的带宽。
- 此docker容器的root密码为:steamcmd
看到最后麻烦给我点个赞!