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

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

  •  1
     
  •   yiios · 2024-01-24 22:14:32 +08:00 · 3402 次点击
    这是一个创建于 374 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境准备

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

    另外 reddit 上说 win 下的服务端好像问题比 linux 少
    lslqtz
        9
    lslqtz  
       2024-01-25 01:31:16 +08:00
    内存比金子贵是真的, 单核性能不出色就有点搞笑了吧?
    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  
       2024-01-25 01:33:45 +08:00
    最近看到不少开 PW 服务器的, 这服务器似乎内存是个大问题.
    中途重启服务器的话应该是会打断用户连接的吧, 所以定时重启服务器是个不错的选择, 但是如果要足够长的间隔的话应该还是要有一定的 Buffer 去满足泄漏要求...

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

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