记一次简单的幻兽帕鲁服务器搭建

记一次简单的幻兽帕鲁服务器搭建

从0入门搭建 幻兽帕鲁是一个新出的类方舟宝可梦游戏,EA阶段就肥肠爆火。但其热度明显官方服务器是抗不下的。 好消息:官方给了服务器搭建文档 坏消息:配置要求非常高 一台4c16的服务器只能说一点都不便宜了。 那么有没有便宜的方案呢?还是有的。假设你有家里有闲置设备的话,满足其配置要求,也可以尝试一下

从0入门搭建

幻兽帕鲁是一个新出的类方舟宝可梦游戏,EA阶段就肥肠爆火。但其热度明显官方服务器是抗不下的。

好消息:官方给了服务器搭建文档

坏消息:配置要求非常高

image.png

一台4c16的服务器只能说一点都不便宜了。

那么有没有便宜的方案呢?还是有的。假设你有家里有闲置设备的话,满足其配置要求,也可以尝试一下。就是家里有一个非常严重的问题:没有固定公网。

那么,解决这个问题有几种思路:

  1. 内网穿透服务,这个看服务商线路质量。
  2. 通过云服务器进行内网搭建,并配置端口转发。

这次使用的是方法2。其云服务器配置为:2H2G 3M阿里云,开启公网ipv6权限
方法2与方法1其原理差不多,主要是核心的隧道该如何构建,来解决家里云没有固定ip的问题。

使用Tailscale搭建内网

进入Tailscale官方网站,进行账号注册。

在Machine界面中,点击Add Device

其中linux的命令:

curl -fsSL https://tailscale.com/install.sh | sh

你需要在你的云服务器和家里的服务器都安装Tailscale

安装后,使用tailscale up进行注册。注册过程中会提示你复制链接进行授权

对于阿里云,可能需要tailscale up --netfilter-mode=nodivert 来解决注册完成后阿里内网无法访问的问题

注册成功后,tailscale的管理界面会现实connected.
image.png

至此内网部分搭建完成,可以通过ping来测试内网连通性以及延迟。

通过iptables配置端口转发

首先编辑/etc/sysctl.conf添加ipv4转发

nano /etc/sysctl.conf

#添加net.ipv4.ip_forward = 1
net.ipv4.ip_forward = 1

sysctl -p

配置iptables

iptables -t nat -A PREROUTING -p udp --dport 8211 -j DNAT --to-destination 你的家里云内网ip
iptables -t nat -A POSTROUTING -o tailscale0 -j MASQUERADE

配置幻兽帕鲁服务端

通过配置生成器快速生成配置

把生成器生成的内容复制到steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini,注意不是PalServer根目录的DefaultPalWorldSettings.ini

根据官方文档启动服务器
./PalServer.sh

进入游戏测试配置是否生效,以及延迟
be0c335dada1f3228240fc44be398caf.png

至此搭建完成。

进阶部分

配置service文件

下面是一个参考写法:

[Unit]
Description=Palworld Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
User=user
Group=user

WorkingDirectory=/home/user/Steam/steamapps/common/PalServer

ExecStart=/bin/bash -c "/home/user/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS"

ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID


[Install]
WantedBy=multi-user.target

service文件放置在/etc/systemd/system下,如

sudo nano /etc/systemd/system/palserver.service

可以按需要添加restart策略.
下面是一个添加restart策略的案例:

[Unit]
Description=Palworld Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
User=user
Group=user

WorkingDirectory=/home/user/Steam/steamapps/common/PalServer

ExecStart=/bin/bash -c "/home/user/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS"

ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

表示当进程崩溃时,等待10秒后重新启动进程。

自动备份

编写一个简单的bash

#!/bin/bash

# 源目录
SOURCE_DIR="/home/user/Steam/steamapps/common/PalServer/Pal/Saved"

# SaveGames 文件夹名称
FOLDER_NAME="SaveGames"

# 目标目录 - 替换成您的目标目录路径
DESTINATION_DIR="/home/user/Save"

# 使用当前时间创建一个时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

# 创建打包文件的文件名
FILENAME="SaveGames_${TIMESTAMP}.tar.gz"

# 进入源目录
cd "${SOURCE_DIR}"

# 打包并压缩 SaveGames 文件夹
tar -czf "${FILENAME}" "${FOLDER_NAME}"

# 将打包好的文件移动到目标目录
mv "${FILENAME}" "${DESTINATION_DIR}"

# 输出操作完成的信息
echo "SaveGames has been backed up and copied to ${DESTINATION_DIR}"

对bash脚本进行一个crontab定时任务

crontab -e

# 0点/8点/16点/20点/22点执行一次备份脚本
0 0,8,16,20,22 * * * /home/momo/save.sh > /dev/null 2>&1

如何恢复?

选择你要恢复的存档,进行一个覆盖。

参考链接

Comment