# 前言
帕鲁刚推出没多久,就有朋友告诉了我
咋一看,这不宝可梦吗,作为口袋妖怪 宝可梦玩家,果断开玩。
这不,最近跟朋友们一起玩的帕鲁服务器也已经将近 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 published: 8211 protocol: udp mode: host - target: 25575 published: 25575 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 PUID =1000 PGID =1000 TZ =Europe/BerlinALWAYS_UPDATE_ON_START =true STEAMCMD_VALIDATE_FILES =true BACKUP_ENABLED =true BACKUP_CRON_EXPRESSION =0 * * * *BACKUP_RETENTION_POLICY =true BACKUP_RETENTION_AMOUNT_TO_KEEP =72 RESTART_ENABLED =false RESTART_DEBUG_OVERRIDE =false RESTART_CRON_EXPRESSION ="0 18 * * *" RCON_PLAYER_DETECTION =true RCON_PLAYER_DETECTION_STARTUP_DELAY =60 RCON_PLAYER_DETECTION_CHECK_INTERVAL =15 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" SERVER_SETTINGS_MODE =autoMULTITHREAD_ENABLED =true COMMUNITY_SERVER =true NETSERVERMAXTICKRATE =120 DIFFICULTY =NoneDAYTIME_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 =AllENABLE_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-SERVER_DESCRIPTION =Palworld-Dedicated-Server running in Docker by jammsenADMIN_PASSWORD =adminPasswordHereSERVER_PASSWORD =serverPasswordHerePUBLIC_PORT =8211 PUBLIC_IP =RCON_ENABLED =true RCON_PORT =25575 REGION =USEAUTH =true BAN_LIST_URL =https://api.palworldgame.com/api/banlist.txtSHOW_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
访问这个属于自己服务器了。
关服命令: 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 published: 8211 protocol: udp mode: host - target: 25575 published: 25575 protocol: tcp mode: host
target
: 容器自己本身的端口。镜像不变更的情况下不能改这个
对于帕鲁服务端来说,默认端口开放在 8211,镜像制作也一般选择 8211
published
: 对外暴露的端口。也就是你在客户端要连接的时候需要输入的端口号。这个可以自己调整
protocol
: 端口的协议。一般服务端都是 UDP 协议,网站一般是 TCP 协议。
mode
: 网络模式,有 host
、 bridge
、 none
等这里就不展开了。要深入了解的可以查看文档: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
# 资源使用情况
通过这个命令,可以查看到帕鲁服务占用的资源,如果占用异常了,就及时进行重启 docker compose restart
。
如下图第一个就是帕鲁服务器的资源占用情况。这还是已经配置了自动重启后的。
# 总结
以上就是帮助各位成为一名合格的监督帕鲁的服主的教程,当然还有很多细节没有介绍到。
如果有需要,那就另外开坑细讲了。