# 前言

帕鲁刚推出没多久,就有朋友告诉了我

咋一看,这不宝可梦吗,作为口袋妖怪宝可梦玩家,果断开玩。

这不,最近跟朋友们一起玩的帕鲁服务器也已经将近 2000 个游戏日了。

服务器截图

作为 “腐竹”,为了能够提供给朋友最佳的游戏体验,自然是要好好维护好帕鲁服务器的。

以下的内容应该可以初步帮助新手腐竹们搭建并管理自己的独立服务器。

# 服务器的抉择

考虑到有个朋友是晚上 6 点起床,不知道几点睡觉的 “神人”

所以服务器的就要优先考虑 24 小时运行了。

一般来说服务器就是考虑两种

# 公有云服务器

游戏服务器,可以无脑直接上腾讯云阿里云等购买即可。

优点在于,这类服务器可以直接提供一个公共 IP 供朋友直接访问。

缺点就是服务器的价格摆在那。

对于新手来说建议用公有云。

# 私有服务器

诸如:自己的电脑、私人服务器等。

优缺点和上面就是反着来了。

我自己选择的是用私人服务器 + tailscale 的内网穿透模式。好处是省了一笔费用,坏处是需要一定的动手能力,tailscale 的搭建可以看上一篇文章。

# 配置

至于服务的配置方面,每个游戏的需求量不一样。

比如帕鲁的服务端资源需求:https://tech.palworldgame.com/getting-started/requirements

最低建议是 4 核 8G(预计支撑 3-4 人)。但是帕鲁目前的优化很差,所以还得及时重启,不然会有爆内存的风险。

# 服务端安装

在纠结完服务器后,就可以动手进行服务端的安装了。

虽然帕鲁官方提供了安装服务端的流程,而且也不算复杂。

但是考虑到后期可能存在的服务器迁移情况,还是建议用上 docker。

# Docker

简单解释一下 docker 的用处:整合游戏服务器需要的环境,一条命令启动。

Docker 的安装方式有很多,这里给到 Docker 官方的一键脚本:

1
2
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

# Docker-compose

Docker-compose 又是干什么的?编排巴拉巴拉的…

其实目前阶段只需要知道,它就是简化 docker 的命令,实现:一条简短的命令启动。

现在的 docker 安装的时候一般都带上了 Docker-compose

可以输入命令 docker compose --help 测试下是否有了

# 部署 + 启动

找一个目录如 server ,创建好一个文件: docker-compose.yml

把下面这段内容填进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3.9'
services:
palworld-dedicated-server:
container_name: palworld-dedicated-server
image: jammsen/palworld-dedicated-server:latest
restart: unless-stopped
ports:
- target: 8211 # Gamerserver port inside of the container
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- target: 25575 # RCON port inside of the container
published: 25575 # RCON port on your host
protocol: tcp
mode: host
env_file:
- ./default.env
volumes:
- ./game:/palworld

现在就可以执行一条简短的命令启动docker compose up -d

什么?没启动起来。

噢,因为有这两个配置的原因

env_file:
  - ./default.env
volumes:
  - ./game:/palworld

后面解释,先在 docker-compose.yml 同级目录下创建

default.env 文件,复制粘贴进去。

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Container-setttings
PUID=1000
PGID=1000
TZ=Europe/Berlin
# SteamCMD-settings
ALWAYS_UPDATE_ON_START=true
STEAMCMD_VALIDATE_FILES=true
# Backup-settings
BACKUP_ENABLED=true
BACKUP_CRON_EXPRESSION=0 * * * *
BACKUP_RETENTION_POLICY=true
BACKUP_RETENTION_AMOUNT_TO_KEEP=72
# Restart-settings
RESTART_ENABLED=false
RESTART_DEBUG_OVERRIDE=false
RESTART_CRON_EXPRESSION="0 18 * * *"
# RCON-Playerdection - NEEDS RCON ENABLED!
RCON_PLAYER_DETECTION=true
RCON_PLAYER_DETECTION_STARTUP_DELAY=60
RCON_PLAYER_DETECTION_CHECK_INTERVAL=15
# Webhook-settings
WEBHOOK_ENABLED=false
WEBHOOK_DEBUG_ENABLED=false
WEBHOOK_URL="YOUR-URL-IN-HERE"
WEBHOOK_CONTENT_TITLE="Status update"
WEBHOOK_INFO_TITLE="Info"
WEBHOOK_INFO_DESCRIPTION="This is an info from the server"
WEBHOOK_INFO_COLOR="2849520"
WEBHOOK_INSTALL_TITLE="Installing server"
WEBHOOK_INSTALL_DESCRIPTION="Server is being installed"
WEBHOOK_INSTALL_COLOR="2849520"
WEBHOOK_RESTART_TITLE="Server is restarting soon"
WEBHOOK_RESTART_DESCRIPTION="The gameserver is restarting in 15 minutes"
WEBHOOK_RESTART_COLOR="15593515"
WEBHOOK_START_TITLE="Server is starting"
WEBHOOK_START_DESCRIPTION="The gameserver is starting"
WEBHOOK_START_COLOR="2328576"
WEBHOOK_STOP_TITLE="Server has been stopped"
WEBHOOK_STOP_DESCRIPTION="The gameserver has been stopped"
WEBHOOK_STOP_COLOR="7413016"
WEBHOOK_UPDATE_TITLE="Updating server"
WEBHOOK_UPDATE_DESCRIPTION="Server is being updated"
WEBHOOK_UPDATE_COLOR="2849520"
# Config-setting - Warning: Every setting below here will be affected!
SERVER_SETTINGS_MODE=auto
# Gameserver-start-settings
MULTITHREAD_ENABLED=true
COMMUNITY_SERVER=true
# Engine.ini settings
NETSERVERMAXTICKRATE=120
# PalWorldSettings.ini settings
DIFFICULTY=None
DAYTIME_SPEEDRATE=1.000000
NIGHTTIME_SPEEDRATE=1.000000
EXP_RATE=1.000000
PAL_CAPTURE_RATE=1.000000
PAL_SPAWN_NUM_RATE=1.000000
PAL_DAMAGE_RATE_ATTACK=1.000000
PAL_DAMAGE_RATE_DEFENSE=1.000000
PLAYER_DAMAGE_RATE_ATTACK=1.000000
PLAYER_DAMAGE_RATE_DEFENSE=1.000000
PLAYER_STOMACH_DECREASE_RATE=1.000000
PLAYER_STAMINA_DECREACE_RATE=1.000000
PLAYER_AUTO_HP_REGENE_RATE=1.000000
PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
PAL_STOMACH_DECREACE_RATE=1.000000
PAL_STAMINA_DECREACE_RATE=1.000000
PAL_AUTO_HP_REGENE_RATE=1.000000
PAL_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
BUILD_OBJECT_DAMAGE_RATE=1.000000
BUILD_OBJECT_DETERIORATION_DAMAGE_RATE=1.000000
COLLECTION_DROP_RATE=1.000000
COLLECTION_OBJECT_HP_RATE=1.000000
COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000
ENEMY_DROP_ITEM_RATE=1.000000
DEATH_PENALTY=All
ENABLE_PLAYER_TO_PLAYER_DAMAGE=false
ENABLE_FRIENDLY_FIRE=false
ENABLE_INVADER_ENEMY=true
ACTIVE_UNKO=false
ENABLE_AIM_ASSIST_PAD=true
ENABLE_AIM_ASSIST_KEYBOARD=false
DROP_ITEM_MAX_NUM=3000
DROP_ITEM_MAX_NUM_UNKO=100
BASE_CAMP_MAX_NUM=128
BASE_CAMP_WORKER_MAXNUM=15
DROP_ITEM_ALIVE_MAX_HOURS=1.000000
AUTO_RESET_GUILD_NO_ONLINE_PLAYERS=false
AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS=72.000000
GUILD_PLAYER_MAX_NUM=20
PAL_EGG_DEFAULT_HATCHING_TIME=72.000000
WORK_SPEED_RATE=1.000000
IS_MULTIPLAY=false
IS_PVP=false
CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP=false
ENABLE_NON_LOGIN_PENALTY=true
ENABLE_FAST_TRAVEL=true
IS_START_LOCATION_SELECT_BY_MAP=true
EXIST_PLAYER_AFTER_LOGOUT=false
ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false
COOP_PLAYER_MAX_NUM=4
MAX_PLAYERS=32
SERVER_NAME=jammsen-docker-generated-###RANDOM###
SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen
ADMIN_PASSWORD=adminPasswordHere
SERVER_PASSWORD=serverPasswordHere
PUBLIC_PORT=8211
PUBLIC_IP=
RCON_ENABLED=true
RCON_PORT=25575
REGION=
USEAUTH=true
BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt
SHOW_PLAYER_LIST=false

再创建一个空的 game 目录。

此时,再次执行命令: docker compose up -d && docker compose logs -f

观察一下当前日志,初次启动会下载服务端文件比较耗时。

当看到这样的内容出来,就说启动成功

帕鲁服务端启动完成

可以按 ctrl+c 结束日志查看。

完整目录结构如下

1
2
3
4
- server
- docker-compose.yml
- default.env
- game

docker compose 相关命令都需要在 server 目录下执行

# 云服务器策略放行

如果你是用云服务器,记得要在控制台的安全组上添加

8211(UDP) 和 25575 (TCP)

两条规则。注意协议!!!

附阿里云的添加方法:

添加安全组规则

附腾讯云的添加方法:

https://cloud.tencent.com/document/product/213/39740

来源选: IP 地址或 CIDR 段 填: 0.0.0.0/0

协议端口:

UDP:8211

TCP:25575

以上步骤做完,就可以输入 服务器IP:8211 访问这个属于自己服务器了。

connect

关服命令: docker compose down

# 服务端管理

作为腐竹,想要在服务器出现问题时能够快速处理,就需要了解以下几个基础的知识点。

以下就拿刚刚部署好的 docker-compose.yml 来逐行说明

# 基础信息

1
2
3
4
5
6
version: '3.9'
services:
palworld-dedicated-server:
container_name: palworld-dedicated-server
image: jammsen/palworld-dedicated-server:latest
restart: unless-stopped
  • version:声明这个文件适用的 docker-compose 的版本

  • services: 创建的服务

  • palworld-dedicated-server: 服务名

  • container_name: 该容器的命名,可以自己取。

  • restart:重启策略

    • restart: “no” // 不会自动重启
    • restart: always // 只要关掉了就会重启
    • restart: on-failure // 服务启动失败会重启
    • restart: unless-stopped // 除非被手动关闭
  • image:镜像地址

    • 作为核心。一个将服务端打包好的链接,本次用的是 https://github.com/jammsen/docker-palworld-dedicated-server
    • 也可以自己制作并打包镜像,这里就不多赘述。

# 端口映射

1
2
3
4
5
6
7
8
9
ports:
- target: 8211 # Gamerserver port inside of the container
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- target: 25575 # RCON port inside of the container
published: 25575 # RCON port on your host
protocol: tcp
mode: host
  • target : 容器自己本身的端口。镜像不变更的情况下不能改这个
    • 对于帕鲁服务端来说,默认端口开放在 8211,镜像制作也一般选择 8211
  • published : 对外暴露的端口。也就是你在客户端要连接的时候需要输入的端口号。这个可以自己调整
  • protocol : 端口的协议。一般服务端都是 UDP 协议,网站一般是 TCP 协议。
  • mode : 网络模式,有 hostbridgenone 等这里就不展开了。要深入了解的可以查看文档:https://docs.docker.com/network/drivers/

# 目录映射

env_file:
  - ./default.env
volumes:
  - ./game:/palworld
  • env_file : 从文件中读取配置作为服务启动后的环境变量
  • volumes : 挂载文件
    • 由于 Docker 的便利性,所以在没有挂载文件时,在关闭 docker 服务后,服务中的所有数据都将不复存在(主打一个片叶不沾身)
    • 因此,为了保存我们的服务端数据,需要将游戏的文件存在我们的机器上。
    • ./game:/palworld 的意思是,将当前目录下的 game 目录挂载到容器中的 /palworld 目录下。(通俗的说就是 game 目录此时等同于 palword 目录)
    • 此时,docker 服务里面产生游戏数据都会存到 /palworld 目录下,我们也就可以通过 game 目录访问到游戏数据了
    • 在游戏启动完成后,你可以 cd 到 game 目录下查看是否已经有了游戏文件了
    • 游戏目录的文件

有了这个目录映射后,想要对游戏的配置进行手动变更、对存档进行修改、恢复存档,都可以通过 game 目录来进行操作。

比如查看服务端配置文件:Pal\Saved\Config\LinuxServer\PalWorldSettings.ini

# 资源使用情况

1
docker stats

通过这个命令,可以查看到帕鲁服务占用的资源,如果占用异常了,就及时进行重启 docker compose restart

如下图第一个就是帕鲁服务器的资源占用情况。这还是已经配置了自动重启后的。
帕鲁服务资源占用

# 总结

以上就是帮助各位成为一名合格的监督帕鲁的服主的教程,当然还有很多细节没有介绍到。

如果有需要,那就另外开坑细讲了。