
Almokhtar Bekkour 发布指南:在自有服务器上用 Docker 自建 Valheim 专用服务器
来源标题:Host a Valheim Dedicated Server
Almokhtar Bekkour 发布了一份在自有服务器上通过 Docker 搭建 Valheim 专用服务器的教程,替代按月付费且世界文件不受自己控制的租用托管方案。指南要求在 Ubuntu 24.04、至少 4 GB 内存的服务器上开放 2456 至 2458 三个连续 UDP 端口,并强调端口与服务器密码配置和内存容量是关键。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
Almokhtar Bekkour,创始人,系统架构师 在你自己的服务器上照此操作。免费开始,无需信用卡 Valheim 的租赁托管商按月收费,而你却控制不了那个槽位,你的世界还存放在他们的磁盘上。在自己拥有的机器上搭建专用服务器,运行同样的游戏只需固定成本,世界以文件形式存在,你可以备份和迁移,还能随时添加 mod 并 SSH 登录。读完本指南,你将拥有一个运行在 Docker 中的 Valheim 专用服务器,部署在你自己的服务器上,你的团队可以连接,容量足够满员游玩,并且备份不会损坏世界。
和其他游戏服务器一样,Valheim 不是 Web 应用:它通过 UDP 端口使用自己的协议通信,所以不需要反向代理,也不涉及 HTTPS,只需向互联网开放几个端口。真正重要的两件事是正确配置这些端口和服务器密码,以及给服务器足够的内存供所有人同时探索。
创建一台至少 4 GB 内存的 Ubuntu 24.04 服务器,记下它的公网 IP。
Valheim 使用三个连续的 UDP 端口,2456 到 2458。在你的云服务商防火墙/安全组中开放它们,并在主机上执行:
sudo ufw allow 2456:2458/udp
这里没有 TLS,也没有代理;玩家在 Valheim 的“Join by IP”选项中直接连接到服务器的 IP 和端口。
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER
注销后重新登录,然后确认 docker --version 和 docker compose version 都能输出版本号。
社区标准镜像是 lloesche/valheim-server。它会通过 SteamCMD 为你下载和更新专用服务器,并从环境变量读取设置。创建一个目录:
mkdir -p ~/valheim && cd ~/valheim
第 4 步:编写 Docker Compose 文件
创建 docker-compose.yml:
services: valheim: image: lloesche/valheim-server:latest restart: unless-stopped cap_add:
- SYS_NICE ports:
- "2456-2457:2456-2457/udp" environment: SERVER_NAME: "A server you own" WORLD_NAME: "Midgard" SERVER_PASS: "<at least five characters>" SERVER_PUBLIC: "false" BACKUPS: "false" volumes:
- valheim_config:/config
- valheim_data:/opt/valheim stop_grace_period: 2m volumes: valheim_config: valheim_data:
值得解释的几个选择:
docker compose up -d docker compose logs -f valheim
首次启动会比较慢,因为 SteamCMD 要下载服务器。等待日志中出现表明服务器已启动且世界已加载的行。然后在 Valheim 中选择 Join Game → Join by IP,输入你服务器的 IP(游戏会自动附加端口),再输入密码。你应该会出生在命名的世界中。
Valheim 的每个世界在 /config/worlds_local 中对应两个文件(一个 .db 和一个 .fwl),它们在服务器运行时被写入。从运行中的服务器下复制这些文件可能会拿到写了一半的数据库。安全、简单的做法是短暂停止服务器,复制,然后重新启动;Valheim 在关闭时会保存,所以干净停止会把世界刷新到磁盘:
docker compose stop valheim
docker run --rm -v valheim_valheim_config:/config -v $(pwd):/backup alpine
tar czf /backup/valheim-world-$(date +%F-%H%M).tar.gz -C /config worlds_local
docker compose start valheim
把它放进非高峰时段的 cron 任务,并把结果复制到服务器之外。如果你无法容忍短暂重启,Valheim 也会定期自动保存,你可以在两次保存之间复制世界文件,但“停止-复制-启动”循环才是永远不会让你得到损坏恢复的方式。
大多数 Valheim mod 使用 BepInEx。lloesche/valheim-server 镜像支持通过环境变量和挂载目录加载 BepInEx mod 包;最简单的做法是设置镜像的 Valheim Plus 或 BepInEx 选项,并把 mod 放入配置卷。保持服务器和每位玩家的 mod 版本一致,mod 不匹配是有人无法连接的最常见原因。
上述所有内容——设置了密码和端口、世界存放在持久卷上的专用服务器——也是一个一键模板: https://app.railyard.run/deploy?template=valheim 它会把服务器部署到你自己的云账户中的一台机器上,开放游戏端口,并把世界保存在持久卷上,使其在重启和重新部署后依然存在。这台机器仍归你所有,你可以 SSH 登录以添加 mod 或更改世界。关于持久数据和定时备份如何在各模板间工作,请参阅数据库和备份。
服务器不出现,朋友无法连接。确认 UDP 2456–2458 在主机防火墙和云安全组中都已开放,你分享的公网 IP 正确,并且每个人都输入了完全相同的密码。Valheim 连接失败几乎总是 UDP 端口或密码的问题,而不是服务器本身。
服务器无法启动,日志提到密码。SERVER_PASS 少于五个字符、缺失或包含服务器名称。修正后重启。
首次启动似乎卡了几分钟。那是 SteamCMD 在下载专用服务器。查看 docker compose logs -f valheim;只要看到下载进度就是在正常工作。只有报错时才需要担心。
满员组队在大世界中游戏卡顿。Valheim 的服务器会模拟玩家已加载的所有内容。检查 docker stats;如果接近内存上限,就换到 8 GB 的机器。更多玩家和更多已探索地图意味着更多内存。
世界备份恢复到损坏或旧的状态。.db 是从运行中的服务器在写入过程中复制的,或者只恢复了 .db/.fwl 对中的一个。一个世界的两个文件必须来自同一次干净停止,这就是第 6 步先停止服务器的原因。
我需要多少内存?小团队 4 GB,满员十人或高度探索的世界 8 GB。瓶颈是内存,不是 CPU。
我能把现有的单人/合作世界移到这里吗?可以。你本地世界的 .db 和 .fwl 文件(来自你自己机器上的 Valheim 存档文件夹)放入 /config/worlds_local;将 WORLD_NAME 设为匹配的名称,专用服务器就会加载它。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。