V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yiios
V2EX  ›  分享发现

Mac 系统(M 系处理器)搭建幻兽帕鲁(palworld)服务器

  •  1
     
  •   yiios · 328 天前 · 3223 次点击
    这是一个创建于 328 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境准备

    1. 下载安装 docker ,https://www.docker.com/
    2. 修改 docker desktop 中的 Settings - Resources ,把 CPU Limit 拉满,Memory Limit 拉到给剩 2-3G 接近满值,Swap 拉满,保存。
    3. 创建一个文件夹,例如: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")
    

    运行

    1. 终端中 cd 到 palworld-arm-docker 文件夹目录下
    2. 拉取 docker 镜像docker-compose pull
    3. 运行 docker-compose up -d
    4. 等待 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 看内网穿透章节。

    端口映射

    1. 路由上给 Mac 终端指定一个 ip
    2. 虚拟服务器/端口映射上,配置 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 = "shellhk" #登录用户名{可自行修改}
    webServer.password = "gongting521" #登录密码{可自行修改}
    

    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

    PS:

    1. 设置 ServerPassword 的话,无法直接输入 ip+端口加入房间,必须要曲线救国,最好别设置。
    2. 帕鲁服务端目前非常吃配置,机器内存不建议低于 16G 。
    3. 帕鲁服务端目前非常吃配置,frps 服务器的带宽也很重要,想流畅不卡最少一个在线用户要分到 1M 的带宽。

    看到最后麻烦给我点个赞!

    22 条回复    2024-01-29 19:44:37 +08:00
    mikaelson
        1
    mikaelson  
       328 天前
    还以为出 mac 版本了
    ylovesy
        2
    ylovesy  
       328 天前
    太强了
    CivAx
        3
    CivAx  
       328 天前   ❤️ 1
    @bywenshu sir, this way.
    hapeman
        4
    hapeman  
       328 天前
    有一次服务重启之后登录就要重新创建角色,op 知道是怎么回事吗? 当时我在线上然后重登要创建角色,我朋友离线我让他试了重登,他的存档还在
    hapeman
        5
    hapeman  
       328 天前 via iPhone
    linux 可以用你这个 docker image 吗?
    locoz
        6
    locoz  
       328 天前 via Android
    拿内存比金子贵、单核性能也不出色的 M 芯片 Mac 跑这服务端,还是跑在虚拟机里…玩个游戏而已,何必这么折磨自己。有这折腾的功夫其实还不如找人租个正经机器跑服务端,像我这都给朋友开了好几个了,随便拿个淘汰服务器就能跑得挺流畅。
    locoz
        7
    locoz  
       328 天前 via Android
    @hapeman #3 可能只是碰到什么 bug 导致坏档了而已,客户端有人物存档备份的,可以试着覆盖到服务端上看看。
    hapeman
        8
    hapeman  
       327 天前 via iPhone
    @locoz 我试了,直接替换存档不行。
    看别人说是要把备份文件转成 json 然后再替换里面的 guid ,再转回去 sav 文件。
    但是我自己运行那个脚本说我的 guid 不对还是啥的。github 仓库是:/xNul/palworld-host-save-fix

    另外 reddit 上说 win 下的服务端好像问题比 linux 少
    lslqtz
        9
    lslqtz  
       327 天前
    内存比金子贵是真的, 单核性能不出色就有点搞笑了吧?
    Cinebench 2024: M3 单核性能和 i9-14900K 一样. M2 单核性能和 i9-13900/R9-7900X 一样. M1 单核性能和 i5-13500 一样, 略高于 R7-7700/i7-12700. (Source: https://www.cpu-monkey.com/en/cpu_benchmark-cinebench_2024_single_core)
    Geekbench 6: M3 单核性能比 i9-13900K 高, 接近 i9-13900KS. M2 单核性能介于 i9-12900 和 i9-12900K 之间. M1 单核性能介于 i9-12900T 和 i9-11900KF 之间.
    lslqtz
        10
    lslqtz  
       327 天前
    最近看到不少开 PW 服务器的, 这服务器似乎内存是个大问题.
    中途重启服务器的话应该是会打断用户连接的吧, 所以定时重启服务器是个不错的选择, 但是如果要足够长的间隔的话应该还是要有一定的 Buffer 去满足泄漏要求...

    另外如果是 IPv6 的话端口映射变为打开防火墙即可.
    grimbedroom
        11
    grimbedroom  
       327 天前
    问题这二逼游戏也不吃 cpu ,就内存泄露就够一壶了
    yiios
        12
    yiios  
    OP
       327 天前
    @hapeman 甲骨文的 arm 实测也可以用,但是非 arm 架构的不确定能不能用这个镜像
    yiios
        13
    yiios  
    OP
       327 天前
    @lslqtz 他这个内存泄露是跟着用户走的,有用户进来之后就会涨内存,定时重启不能完全解决问题。而且有点傻,内存超限重启体感还好一点。

    @locoz 主要是给手边有闲置 Apple silicon 芯片的 mac 设备写的,我知道有很多人拿 arm 的 mac 做软路由之类的。单独买 mac 跑这个当然没必要。
    hapeman
        14
    hapeman  
       327 天前
    @yiios 使用 docker 部署 如果后续官方服务端更新了,本地要怎么更新呢 大佬
    yiios
        15
    yiios  
    OP
       327 天前
    @hapeman 看 docker 镜像的维护者更不更新 https://hub.docker.com/r/czy0612/palworld-server 。如果更新了,你 docker-compose pull 拉一下,重启容器就行了。
    如果不更新的话,就麻烦一点,需要找一个新的支持 arm 的镜像替换。路径什么的需要改一下
    locoz
        16
    locoz  
       327 天前
    @yiios #12 主要是体验上不是特别好,并且价值上比较浪费,倒不是说是否专门拿个 Mac 跑这东西有没有必要。
    locoz
        17
    locoz  
       327 天前
    @hapeman #7 官方有个 FAQ 文档,里面有提到存档相关的问题,你可以去看一下。文档从游戏刚打开时的那个弹框页面里就能进。
    ErYiii
        18
    ErYiii  
       327 天前
    @hapeman 丢存档了撒,角色存档是一人一个存档文件,可能你朋友的那个还在,你的没了
    locoz
        19
    locoz  
       327 天前
    @lslqtz #8 从我 M1 Pro 的实际使用体验来说,没法受到硬件加速增益的场景确实都是不怎么样的,有时候都是靠着内存和 SSD 的速度在硬顶...比如跑 Minecraft 的大型科技类整合包的客户端和服务端,多核带来的增益很小,主要就是看单核性能,在 M1 Pro 单核跑分比 E5-2667 V4 看起来是翻倍的情况下,M1 Pro 跑出来的效果也没有比 E5-2667 V4 好多少,但实测 Intel 的高单核性能消费级 CPU 跑得就是快得明显。虽然说这其中可能涉及针对性优化的问题,或者是指令集之类的问题,但实际使用的体验就是单核性能不尽人意,即使是生态发展了这么久也还是跑不出在跑分中那么明显的优势。
    hapeman
        20
    hapeman  
       327 天前
    @ErYiii
    @locoz
    我用 github 上的工具把 sav 转成 json 看了这游戏的存档,宠物道具什么的信息都是所有人存在一个文件里然后在个人的 cav 文件里关联过去的,那次不知道为什么直接把我原来的档给替换掉了,我的存档里道具什么的 guid 估计都重新生成了 我服了
    hapeman
        21
    hapeman  
       327 天前
    @ErYiii 本地的存档还有一堆 Byte 数组没编译的,不知道要干嘛
    bywenshu
        22
    bywenshu  
       323 天前 via Android
    @CivAx 谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1746 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:33 · PVG 00:33 · LAX 08:33 · JFK 11:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.