最近PalWorld挺火的,看着也很好玩,我本来没想自己搭一个Dedicated Server,但是我和同学试了一下它的邀请码联机连不上,又想了想自己手上的资源,就打算自己搞个服务器联机玩了。

资源规划

首先要根据手上现有的资源做规划。我本地有一个archlinux的小主机,前一阵子还入手了一年99的阿里云服务器,2 Core 2 GB RAM。

PalServer建议要4 Core 16GB RAM 或以上,显然直接把PalServer搭建在阿里云服务器上是不行的了,但是阿里云服务器有公网IP。

所以方案就出来了,用阿里云服务器做内网穿透,本地archlinux的小主机安装PalServer就可以了。

内网穿透

我查到的开源的内网穿透的软件是frp,所以就用它了。frp分为frps和frpc,顾名思义frps是server端,frpc是client端。
在云服务器上起server端,在本地小主机起client端。

server端

server端配置:/etc/frps/frps.ini

这个位置是我自己决定下载放在这里的哈。

1
2
3
4
5
6
7
[common]
bind_port = 7000
token = ************

dashboard_port = 7500
dashboard_user = ******
dashboard_pwd = ******

client端

client端配置:/usr/local/frpc/frpc.ini

这个位置是我自己决定下载放在这里的哈。

由于我也不知道它到底用不用tcp所以就把tcp也写上去了,看一般来说就只用udp即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[common]
server_addr = ***.***.***.***
server_port = 7000
token = ********

[palserver_udp]
type = udp
local_ip = 127.0.0.1
local_port = 8211
remote_port = 8211
use_encryption = false
use_compression = false

[palserver_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 8211
remote_port = 8211
use_encryption = false
use_compression = false

[RCON_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 25575
remote_port = 25575
use_encryption = false
use_compression = false

[RCON_UDP]
type = udp
local_ip = 127.0.0.1
local_port = 25575
remote_port = 25575
use_encryption = false
use_compression = false

frp配置-内网穿透工具最佳实践

frp 内网穿透, 认证配置,安全配置 TOKEN

frp github

PalServer部署

我的小主机是Archlinux,打算用docker来跑PalServer。上Docker Hub上找了一下,选择了下载量最高的image,同时我还安装了docker compose,推荐使用。

PalServer docker hub jammsen
PalServer docker hub thijsvanloef

在这个image里还包括RCON,虽然不懂但是还是配上了,感觉RCON可以在研究之后单分一个章节来介绍。

这部分感觉没什么说的,就按照这个image的介绍要求来搞就行,很简单、很省事。

TroubleShooting

Archlinux上的docker配置

只yay -S docker 等是不行的,如此安装只能用root用户启动docker,但是我是个人pc的linux,一般都会建立non-root用户来使用。
需要手动将自己的用户加入docker用户组。

If you want to be able to run the docker CLI command as a non-root user, add your user to the docker user group, re-login, and restart docker.service.

ArchWiki docker链接

1
2
3
4
sudo groupadd docker
sudo usermod -aG docker $USER
# then re-login and restart docker.service
# or reboot the machine

上述内容的参考文献

同时我还想要docker自启动,所以还要设置service。

TBD

我要是没记错的话我安装完docker,docker默认是用的containerd,而不是docker.socket。这里可能需要自己填写一个service文件来指定docker使用哪个runtime。

service文件,这个也是参考ArchWiKi改的:

1
2
3
4
/etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock

ArchWiki docker链接

1
2
3
4
5
systemctl enable 
systemctl start
systemctl status
systemctl reload?
jou log?

ArchLinux上crontab使用

PalServer具有不稳定性,大家在网上都在说PalWorld非常吃内存。我自己搭建的服务器也一样,一般3-4天就会炸掉一次,但还好是用的容器部署重启就很快。

但是游戏体验还是前两天还可以,后两天可能就会因为内存等问题出现各种奇怪的现象。所以我打算设置脚本每天自动重启一次PalServer。

自动重启我了解到的方案有两种,一个是在容器的image里配置定时重启;一个是在宿主机上配置定时重启。

容器自动重启参考资料

Linux的定时任务一般使用crontab来完成。但是ArchLinux没有预装crontab?我就安装了cronie。

安装cronie参考资料

如此一结合这个问题算是解决了。