10分钟搭好幻兽帕鲁Docker服务器:从零到朋友连进来的完整旅程
想和朋友们一起在《幻兽帕鲁》的世界里抓帕鲁、建基地,却被"搭服务器"四个字劝退?别急,这篇文章就是为你准备的。我们将借助 palworld-server-docker 这个开源项目——一个把官方专用服务器完整封装进 Docker 容器的方案,从零开始,走完"下载项目、启动容器、让朋友连进来"的全过程。全程不碰复杂的编译和手动装环境,你只需要会复制粘贴,就能拥有一台属于自己的帕鲁服务器。
动笔之前,先想清楚:这个容器到底替你省了什么
自己开帕鲁服,最劝退的其实是这些琐事:要装 SteamCMD、要手动拉游戏服务端、要配置一堆启动参数、崩了还得自己排查。而 palworld-server-docker 把这些全打包进了一个镜像,你只需要告诉它"我想要个服务器",剩下的下载、更新、备份,它都自己搞定。
它的名字就是答案:Palworld + Docker + Server。官方定位是"A Docker Container to easily run a Palworld dedicated server",翻译过来就是"让你轻松跑起帕鲁专用服务器的容器"。项目在 README.md 里也写得很直白:帮你快速上手自建服务器。
这个方案已经在 Linux(Ubuntu/Debian)、Windows 10/11、macOS(包括 M1/M2/M3 芯片)以及树莓派 4/5 上验证过,x64 和 ARM64 架构都支持。也就是说,不管你是云服务器用户、家里蹲老台式机,还是拿树莓派折腾的极客,都能跑。
开服前的"体检":你的机器够不够格
不急着复制命令,先花 30 秒看看你的硬件。项目的官方要求很透明:
| 资源 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 4 核以上 |
| 内存 | 16GB | 32GB 以上更稳定 |
| 存储 | 8GB | 20GB 以上(游戏本体+更新) |
💡 内存是帕鲁服的命门,如果只打算和三五好友玩,16GB 勉强够用;想开 32 人满编服,还是老老实实上 32GB。另外记得在 BIOS 里开启虚拟化(VT-x/AMD-V),Docker 跑得动才有后续。
软件方面就两个前提:装好 Docker Engine 和 Docker Compose(新版 Docker 桌面版通常已内置 Compose)。检查一下你的环境:
docker --version
docker compose version
两条命令都能看到版本号,就可以放心往下走了。
两条路线任选一条:Compose 一步到位 or 一条命令跑起来
项目的仓库里自带了一份可直接用的 compose.yaml,这就是最省事的入口。推荐你先用 Docker Compose,理由很简单:配置写在文件里,看得见、改得着、还能提交到 git 备份;而 docker run 那条长命令每次想改参数都得重新敲一遍。
先把仓库克隆到本地:
git clone https://gitcode.com/gh_mirrors/pa/palworld-server-docker
cd palworld-server-docker
路线A:Compose 文件里写清楚你的需求
打开 compose.yaml,你会看到项目给你准备好的完整模板,核心部分长这样(我已加注释说明每行的作用):
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest # 官方镜像,跟着最新版走
restart: unless-stopped # 崩溃或重启后自动拉起
container_name: palworld-server # 容器名字,后面命令都用它
stop_grace_period: 30s # 停止时给足 30 秒优雅保存
ports:
- 8211:8211/udp # 游戏端口,玩家连的就是它
- 27015:27015/udp # 查询端口,上社区服务器列表需要
# - 8212:8212/tcp # REST API 端口,注意:不要对外端口转发!
environment:
PUID: 1000 # 容器内运行用户的 uid
PGID: 1000 # 容器内运行用户的 gid
PORT: 8211 # 游戏端口,最好显式指定
PLAYERS: 16 # 最大玩家数,1-32
SERVER_PASSWORD: "worldofpals" # 服务器密码,建议改掉
REST_API_ENABLED: true # 开启 REST API
REST_API_PORT: 8212
TZ: "UTC" # 时区,影响备份时间戳
ADMIN_PASSWORD: "adminPasswordHere" # 管理员密码,务必改成强密码
COMMUNITY: false # true 则出现在社区服务器列表,务必配合密码使用
SERVER_NAME: "palworld-server-docker by Thijs van Loef" # 你的服务器名
SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef"
CROSSPLAY_PLATFORMS: "(Steam,Xbox,PS5,Mac)" # 允许跨平台联机
volumes:
- ./palworld:/palworld/ # 数据持久化,存档备份都在宿主机的 ./palworld 里
把 SERVER_NAME、SERVER_DESCRIPTION、两个密码改成你自己的,保存即可。
路线B:一条 docker run 命令直接起飞
如果你只是临时想试一下,不想维护文件,项目同样提供了等价的单行命令。把它粘进终端,把尖括号里的占位符换成你自己的值:
docker run -d \
--name palworld-server \
-p 8211:8211/udp \
-p 27015:27015/udp \
-v ./palworld:/palworld/ \
-e PUID=1000 \
-e PGID=1000 \
-e PORT=8211 \
-e PLAYERS=16 \
-e REST_API_ENABLED=true \
-e REST_API_PORT=8212 \
-e TZ=UTC \
-e ADMIN_PASSWORD="adminPasswordHere" \
-e SERVER_PASSWORD="worldofpals" \
-e COMMUNITY=false \
-e SERVER_NAME="palworld-server-docker by Thijs van Loef" \
-e SERVER_DESCRIPTION="palworld-server-docker by Thijs van Loef" \
-e CROSSPLAY_PLATFORMS="(Steam,Xbox,PS5,Mac)" \
--restart unless-stopped \
--stop-timeout 30 \
thijsvanloef/palworld-server-docker:latest
💡 两条路本质上等价,命令参数和 Compose 里的环境变量一一对应。新手如果拿不定主意,记住一句话:长期使用选 Compose,临时尝鲜选 run。
给服务器"上户口":必设环境变量清单
环境变量是这个项目配置服务器的唯一入口,理解它你就掌握了整个项目。项目文档 docusaurus/docs/getting-started/configuration/server-settings.md 里有一张几十行的完整表格,我把真正影响开服体验的挑出来讲:
| 变量 | 作用 | 默认值 | 建议 |
|---|---|---|---|
| PLAYERS | 最大玩家数 | 16 | 按机器性能调,1-32 |
| PORT | 游戏 UDP 端口 | 8211 | 一般不用改 |
| PUID / PGID | 容器内运行用户/组 | 1000 | 保持默认即可 |
| SERVER_PASSWORD | 服务器密码 | 空 | 必设,防陌生人乱入 |
| ADMIN_PASSWORD | 管理员密码 | 空 | 必设,管理操作要用 |
| COMMUNITY | 是否上社区服务器列表 | false | 想公开展示就设 true,且必须配密码 |
| REST_API_ENABLED | 开启 REST API | true | 保持开启,自动暂停等功能依赖它 |
| ENABLE_PERF_THREADING_ARGS | 开启多线程性能参数 | false | 多核 CPU 建议 true |
| UPDATE_ON_BOOT | 启动时自动安装/更新 | true | 首次运行必须保持开启 |
| BACKUP_ENABLED | 自动备份 | true | 保持开启 |
| AUTO_UPDATE_ENABLED | 自动更新 | false | 想省心就设 true(需配合 RCON_ENABLED) |
| TZ | 时区 | UTC | 改成你的时区,备份时间才对 |
还有一个容易踩的坑要提前告诉你:项目里标了 DEPRECATED(已弃用)的 MULTITHREADING 变量虽然还能用,但官方现在推荐用 ENABLE_PERF_THREADING_ARGS=true 加 WORKER_THREADS_SERVER=<核数> 来精确控制多线程,详见 server-settings.md。新手上路直接认准新变量就行。
除了游戏服务器本身的参数,你还能用环境变量直接调游戏内容,比如经验倍率 EXP_RATE、捕获率 PAL_CAPTURE_RATE、帕鲁刷新率 PAL_SPAWN_NUM_RATE、死亡惩罚 DEATH_PENALTY 等等。它们遵循一个简单的转换规则:全大写 + 单词间下划线 + 去掉开头单个字母(比如 PalSpawnNumRate 变成 PAL_SPAWN_NUM_RATE,bIsPvP 变成 IS_PVP),完整清单见 docusaurus/docs/getting-started/configuration/game-settings.md。想和朋友玩"十倍经验、死后不掉落"的休闲服?加一行 EXP_RATE: 10 和 DEATH_PENALTY: None 就够了。
点火!启动与第一次连接
配置写完,回到 compose.yaml 所在目录,执行:
docker compose up -d
-d 表示后台运行。第一次启动会下载游戏服务端,根据网速可能要等几分钟,这是正常现象。你可以用下面这条命令盯日志,看到类似 Server started 的字样就说明跑起来了:
docker compose logs -f
💡 如果日志停在下载环节很久没动静,多半是网络问题。项目也贴心地给了备用方案:在环境变量里加
USE_DEPOT_DOWNLOADER: true,改用 DepotDownloader 拉取服务端,专治 steamcmd 不兼容的环境(比如 M 系列 Mac)。
服务器就绪后,打开游戏本体,走这条路径连接:
- 主菜单选择"加入多人游戏(Join Multiplayer Game)"
- 切到"专用服务器(Dedicated Server)"标签
- 输入你的服务器 IP 和端口(默认 8211)
- 填上你设置的服务器密码,点击连接
不出意外,你已经在自己的世界里了。🎉
看看你服务器肚子里装了啥:目录结构与存档
连上之后,你可能会好奇:我的存档到底存在哪?答案在你挂载的 ./palworld 目录里。官方文档给出了一张非常直观的结构图:
对照图,几个关键位置记一下:
- backups/:自动备份文件存放处
- Engine/:游戏引擎配置文件
- Pal/Saved/Config/LinuxServer/:服务器配置目录,
PalWorldSettings.ini就在这 - steamapps/:Steam 相关文件和游戏资源
需要手动改游戏平衡参数时(比如把掉落率调高),就去编辑 PalWorldSettings.ini。但有两个坑必须提醒你:一是只能趁服务器关着的时候改,运行中改会在停止时被覆盖;二是改了之后要在环境变量里设 DISABLE_GENERATE_SETTINGS: true,否则启动时会被默认值重新生成。新手图省事的话,优先用环境变量改,最不容易出错。
当管理员不难:RCON 命令与 REST API
服务器开起来了,但"开服"不等于"放任自流"。你需要能广播消息、踢人、保存世界的手段。这个项目给了你两把钥匙:rcon-cli 和 rest-cli,都内置在容器里。
用 RCON 广播一条欢迎消息,只需:
docker exec -it palworld-server rcon-cli "Broadcast 欢迎来到我们的帕鲁世界"
常用的管理命令还有这些:
| 命令 | 作用 |
|---|---|
ShowPlayers | 查看所有在线玩家 |
KickPlayer {SteamID} | 踢出指定玩家 |
BanPlayer {SteamID} | 封禁指定玩家 |
Save | 立即保存世界 |
Shutdown {秒数} {提示语} | 倒计时关服 |
Broadcast {消息} | 全员广播 |
如果你不想暴露 RCON 端口,REST API 是更安全的选择。通过 rest-cli,你可以在不开放任何外部端口的情况下调用管理接口,比如:
docker exec -i palworld-server rest-cli announce '{"message":"广播内容"}'
rest-cli 支持的接口有 info(服务器信息)、players(玩家列表)、metrics(性能指标)、save(保存)、shutdown(关服)等,完整清单同样在 README 的 REST API 章节里。对普通玩家来说,记住一条就够:广播用 rcon-cli,日常管理用 rest-cli,两者都不用对外暴露端口。
让服务器自己照顾自己:备份、更新与自动暂停
自己开服的另一个痛点是"人不可能 7×24 小时守着"。这个项目把最常见的运维场景都做成了开关,你只需要在环境变量里打开它们。
自动备份:默认开启,每天凌晨按 TZ 指定的时区自动备份到 backups/。想改频率就设 BACKUP_CRON_EXPRESSION,比如 0 2 * * * 表示每天凌晨 2 点备份。也可以随时手动备份:
docker exec palworld-server backup
自动更新:设置 AUTO_UPDATE_ENABLED: true,再配合 RCON_ENABLED: true 和 UPDATE_ON_BOOT: true,服务器会在指定时间自动更新并优雅重启,还会提前广播提醒在线玩家(AUTO_UPDATE_WARN_MINUTES 控制提前几分钟提醒)。
自动暂停:这个功能相当贴心。设置 AUTO_PAUSE_ENABLED: true(需要同时开 REST_API_ENABLED 和 ENABLE_PLAYER_LOGGING),当最后一个玩家离线 180 秒后,服务器进程会自动休眠,世界时间冻结、CPU 占用降到几乎为零;有玩家尝试连接时又会自动唤醒。对于按量计费的云服务器,这能省下一大笔成本。
日常三件套命令,建议直接存进备忘录:
docker compose stop # 停止服务器
docker compose start # 再次启动
docker compose logs -f # 实时看日志
docker compose pull && docker compose up -d # 更新到最新镜像
万一存档出了问题想回滚,交互式恢复也只要一条命令:
docker exec -it palworld-server restore
它会列出备份让你选择(注意需要 RCON_ENABLED: true)。
从这一步开始,你的服务器生涯
到这里,你已经走完了从"想开服"到"服务器自己会打理自己"的完整旅程:克隆项目、选择 Compose 或 run、配置环境变量、点火连接、学会用 RCON 管理、开启自动化备份与暂停。
接下来的十分钟,我建议你做这三件事:
- 把
compose.yaml里SERVER_NAME、两个密码改成你自己的,再顺手把EXP_RATE: 2(双倍经验)加进环境变量,重启生效 - 开启
AUTO_PAUSE_ENABLED: true,让服务器在你睡觉时也"睡觉" - 把项目文档里 docusaurus/docs/getting-started/configuration/server-settings.md 完整环境变量表过一遍,你会发现更多玩法,比如把 Discord Webhook 接进来,让玩家进出、备份、更新都实时推送到你的频道
开服这件事,最难的从来不是技术,而是迈出第一步。现在容器已经在你的机器上跑起来了,剩下的——把链接发给朋友,去抓你的第一只帕鲁吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





