如何在《Valheim》中搭建服务器(2026)

如何在《Valheim》中搭建服务器(2026)

一份关于如何为《Valheim》托管社区游戏服务器的完整指南。其中包含 Windows 和 Linux 系统下的操作说明。

September 20, 2026阅读约 12 分钟更新于 September 20, 2026
如何在《Valheim》中搭建服务器(2026)

在本指南中,我们将在 Windows、Linux 和 macOS 上下载、配置并运行 Valheim 专用服务器。

专用服务器为你提供一个持续运行的世界,无论是否有人登录都会保持运行,这相比大多数群组一开始采用的主机-玩家(host-and-play)模式是一个真正的进步。Valheim 的服务器是免费的,不需要第二份游戏拷贝,而且确实是较容易上手的服务器之一。

本文介绍的是原版设置。如果你想在此基础上加入 mod,我们的 Valheim mod 指南 涵盖了服务器端和客户端的 BepInEx 设置。

系统要求

  • 一台运行 Windows 10 或更高版本,或是现代 Linux 发行版的机器。参见 macOS 部分,了解为何 Mac 是一个特殊情况。
  • 对于小型团队,至少需要 4 GB 内存。随着世界被探索和建造,Valheim 服务器的内存占用会不断增长,因此对于十人团队来说,8 GB 是更安全的目标。
  • 服务器文件大约需要 2 - 3 GB 磁盘空间,另外还需要为世界存档和备份预留空间。
  • 一个 Steam 账户。它不需要拥有 Valheim,因为专用服务器是一个免费工具。
  • 对终端操作和编辑文本文件有基本了解。

提示 - 与任何游戏服务器一样,应在单独的用户账户下运行,而不是使用你的主账户或 root 账户。这不会有任何成本,却能在出问题时限制损害。

Steam 后端还是跨平台后端

在开始之前先决定这一点,因为它会决定你是否需要动路由器。

Steam 后端是默认选项。服务器直接与客户端通信,这意味着你需要进行端口转发,并且只有 Steam 玩家能看到或加入。

通过 -crossplay 启用的跨平台(Crossplay)后端会将流量通过 PlayFab 中继转发。你不需要端口转发,来自任何平台的玩家,包括 Xbox 和 Microsoft Store 版本的玩家,都可以加入。

跨平台听起来是显而易见的优势,通常也确实如此,尤其是当你无法控制路由器时。代价是流量要经过中继而非直连,这可能会增加延迟,而且你无法通过局域网或本地回环 IP 连接到跨平台服务器。你需要通过公网 IP 和端口、加入代码,或通过服务器列表来连接。

注意 - 如果你在运行 mod,请记住 Xbox 和 Microsoft Store 客户端无法加载 BepInEx。在已安装 mod 的服务器上启用跨平台,可以让这些玩家找到服务器,但不一定能在上面游玩。

下载服务器文件

Valheim 专用服务器是 Steam 应用 896660,并且是免费的。

通过 Steam 客户端

如果机器上安装了带桌面的 Steam,这是最简单的方式。

  1. 打开你的 Steam 库。
  2. 点击左上角的下拉菜单,确保勾选了工具复选框。
  3. 在列表中找到Valheim Dedicated Server并点击安装。
  4. 完成后,右键点击它,选择管理,然后选择浏览本地文件以打开安装文件夹。

通过 SteamCMD

这是无桌面机器的正确做法,也是 Linux 服务器应使用的方式。

我们有一篇单独介绍 SteamCMD 本身的指南:

https://moddingcommunity.com/blog/how-to-download-run-steamcmd/

安装好 SteamCMD 后,命令如下:

login anonymous
force_install_dir /path/to/valheim-server
app_update 896660 validate
quit

或者作为一行命令放入脚本或 cron 任务中:

./steamcmd.sh +login anonymous +force_install_dir /home/valheim/server +app_update 896660 validate +quit

这里使用匿名登录即可,无需凭证。每次你想更新服务器时都重新运行同样的命令,每次 Valheim 更新后都需要这样做,因为客户端会拒绝连接到使用旧版本的服务器。

Linux 前置条件

Linux 服务器的大部分库依赖与 Steam 客户端相同,另外还需要一些额外的东西。

Debian 和 Ubuntu

sudo apt update
sudo apt install -y libatomic1 libpulse-dev libpulse0 screen

Fedora、RHEL 和 Rocky

sudo dnf install -y libatomic pulseaudio-libs pulseaudio-libs-devel screen

服务器还需要 GLIBC 2.29 和 GLIBCXX 3.4.26 或更高版本。任何当前的发行版都具备这些条件。如果你使用的是较旧的系统,例如 CentOS 7,官方支持的解决方案是使用 Docker,而不是手动升级 glibc。

启动参数

服务器的所有配置都是通过启动参数完成的,而不是配置文件。以下是需要关注的参数。

Argument Default Description
-name "My server" N/A 显示在服务器列表中的服务器名称。
-port 2456 2456 UDP 端口。Valheim 会使用该端口以及其上一个端口,所以 2456 意味着 2456 和 2457。
-world "Dedicated" N/A 要加载的世界。如果不存在则创建,如果已存在同名世界则加载。
-password "Secret" N/A 加入密码。
-public 1 1 1 会将服务器公开列出。0 则隐藏,玩家需通过 IP 加入。适合局域网使用。
-crossplay off 使用 PlayFab 跨平台后端而非 Steam。无需端口转发。
-savedir [PATH] see below 覆盖世界和权限文件的存储位置。
-logFile "/path/log.txt" N/A 日志的写入位置。
-saveinterval 1800 1800 世界存档的间隔,单位为秒。默认 30 分钟。
-backups 4 4 保留的自动备份数量。
-backupshort 7200 7200 首次自动备份前的间隔,单位为秒。
-backuplong 43200 43200 后续备份之间的间隔,单位为秒。
-instanceid "1" N/A 仅在同一 MAC 地址上使用同一端口运行多个服务器时才需要,以便每个服务器获得唯一的 PlayFab ID。

如果不做覆盖,默认存档路径如下:

  • Windows: %USERPROFILE%\AppData\LocalLow\IronGate\Valheim
  • Linux: ~/.config/unity3d/IronGate/Valheim

警告 - 你的密码不能为空,也不能是服务器名称或世界名称的子字符串。如果违反这一点,服务器会拒绝启动,而且这条错误信息在日志中很容易被忽略。

世界修饰符

你也可以通过命令行设置世界的难度和规则,这对服务器很方便,因为不用所有人都同意游戏内的滑块设置。

-preset 一次性设置所有内容。有效值为 Normal、Casual、Easy、Hard、Hardcore、Immersive 和 Hammer。

-modifier <name> <value> 用于逐个设置,如果两者都用,应放在预设之后,因为预设会覆盖之前设置的任何内容:

Modifier Values
combat veryeasy, easy, hard, veryhard
deathpenalty casual, veryeasy, easy, hard, hardcore
resources muchless, less, more, muchmore, most
raids none, muchless, less, more, muchmore
portals casual, hard, veryhard

-setkey <name> 用于切换一个复选框式的键:nobuildcost、playerevents、passivemobs 或 nomap。

例如,一个无袭击、资源充裕的服务器:

-preset normal -modifier raids none -modifier resources more

在 Windows 上启动服务器

服务器安装目录下自带 start_headless_server.bat。

复制一份并编辑副本。 Steam 每次更新服务器时都会重置原始文件,从而清空你的设置。唯一需要注意的是,Steam 库中的快捷方式只指向原始文件名,所以你需要直接运行你的副本,而不是通过 Steam 启动。

  1. 打开服务器的安装文件夹。
  2. 将 start_headless_server.bat 复制为类似 start_myserver.bat 的文件。
  3. 右键点击你的副本并选择编辑。
  4. 找到以 start valheim_server 开头的那一行,在上面设置你的参数。

完成后的那一行大致如下:

start valheim_server -nographics -batchmode -name "My Valheim Server" -port 2456 -world "Dedicated" -password "secret123" -public 1 -crossplay
  1. 保存后,双击该批处理文件。
  2. 如果 Windows 防火墙弹出提示,勾选所有选项,以便服务器可以联网。

当控制台打印以下内容时,表示已成功启动:

Game server connected

在 Linux 上启动服务器

Linux 对应的脚本是 start_server.sh。出于与 Windows 相同的原因,先复制它。

cd /home/valheim/server
cp start_server.sh start_myserver.sh
chmod u+x start_myserver.sh
nano start_myserver.sh

在 ./valheim_server.x86_64 那一行设置你的参数:

#!/bin/bash
export templdpath=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970

./valheim_server.x86_64 \
    -nographics \
    -batchmode \
    -name "My Valheim Server" \
    -port 2456 \
    -world "Dedicated" \
    -password "secret123" \
    -public 1 \
    -crossplay

export LD_LIBRARY_PATH=$templdpath

注意 SteamAppId=892970 这一行,它是游戏本体的 app ID,而不是服务器的。它已经存在于原始脚本中,需要保留。

用以下命令运行它:

./start_myserver.sh

使用 Screen 运行

在 SSH 会话前台运行服务器,一旦断开连接它就会终止。screen 可以解决这个问题。

screen -S valheim ./start_myserver.sh

按 CTRL + A 然后 D 分离会话。重新连接使用:

screen -r valheim

使用 screen -ls 列出你的会话。

作为 systemd 服务运行

对于任何你真正关心的东西,systemd unit 都比 screen 会话更好。它会随系统启动,并在崩溃时自动重启。

创建 /etc/systemd/system/valheim.service:

[Unit]
Description=Valheim Dedicated Server
After=network.target

[Service]
Type=simple
User=valheim
WorkingDirectory=/home/valheim/server
ExecStart=/home/valheim/server/start_myserver.sh
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target

然后启用并启动它:

sudo systemctl daemon-reload
sudo systemctl enable --now valheim

KillSignal=SIGINT 很重要。Valheim 需要等同于 CTRL + C 的信号才能正常关闭并保存世界,而 TimeoutStopSec=120 给了它足够的时间完成这一过程。如果配置错误,很容易导致进度丢失。

用 systemctl status valheim 查看状态,用 journalctl -u valheim -f 跟踪日志。

通过 Docker 运行

专用服务器需要 GLIBC 2.29 和 GLIBCXX 3.4.26。如果你的发行版比这更旧,Docker 是官方建议的方式,服务器也自带了相应脚本。

  1. 按照 您所用发行版的说明 安装 Docker。
  2. 确保 Docker 守护进程正在运行,并且您的用户已加入 docker 组。以下命令应该能正常运行且不报错:
docker ps
  1. 运行捆绑的脚本,并传入你的启动脚本:
./docker_start_server.sh start_myserver.sh

首次运行会引导容器启动,需要几分钟时间。之后的运行会立即启动。

游戏数据存放在一个 Docker 卷中,该卷名称在 docker_start_server.sh 内的 DOCKER_DATA_VOLUME 中指定,默认是 valheim_server_data。若想改为将数据保存在您的文件系统中,请将其改为一个路径:

DOCKER_DATA_VOLUME="${HOME}/valheim_storage"

在运行脚本之前先创建该目录。您的世界存档、adminlist.txt、bannedlist.txt 和 permittedlist.txt 最终都会存放在那里。停止服务器的方式与直接运行时相同。

macOS

Valheim 有原生的 macOS 客户端,但没有 macOS 版本的专用服务器。Steam 只提供 Windows 和 Linux 版本。

如果您想从 Mac 上进行服务器托管,现实可行的选项有:

  • 在虚拟机中运行 Linux,并按照上面的 Linux 说明操作。
  • 使用 Docker Desktop for Mac 配合社区提供的 Valheim 服务器镜像。
  • 将服务器托管在 Linux 主机或租用的 VPS 上,然后仅在 Mac 上进行游玩。

Mac 玩家当然可以加入托管在任何地方的服务器,而对 Mac 客户端进行模组安装则可以按照我们模组指南中介绍的 Rosetta 变通方案来实现。

端口转发

如果你使用 -crossplay,可以完全跳过这一部分。

在 Steam 后端下,需要在路由器上将以下端口转发到运行服务器的机器:

Protocol Port Purpose
UDP 2456 游戏端口
UDP 2457 游戏端口 + 1,自动使用

如果您更改了 -port,请转发您选择的端口以及紧跟其后的那个端口。

您可能还需要在操作系统防火墙中放行这些端口:

# Debian/Ubuntu with ufw
sudo ufw allow 2456:2457/udp

# Fedora/RHEL with firewalld
sudo firewall-cmd --permanent --add-port=2456-2457/udp
sudo firewall-cmd --reload

在 Windows 上,首次启动时勾选防火墙提示中的所有选项即可解决此问题。

提示 - 在同一台机器上运行多个服务器完全没问题,只要每个服务器都拥有自己的一对端口。可以依次使用 2456/2457、2458/2459 等等,并为每个服务器指定一个 -instanceid。

管理员、封禁与白名单

存档目录中的三个文本文件控制访问权限,每行一个 Platform User ID:

  • adminlist.txt - 获得管理员权限的人员。
  • bannedlist.txt - 被封禁的人员。
  • permittedlist.txt - 一份允许名单。

警告 - 只要在 permittedlist.txt 中添加了任何人,就会封禁所有不在名单上的人。这是设计好的行为,但常常让人感到意外。除非您确实想要一个封闭式服务器,否则请让此文件保持为空。

Platform User ID 的格式类似于 [Platform]_[User ID],且区分大小写。您可以从服务器日志中读取,或者在游戏内的 F2 面板中查看。

在游戏内,管理员可以用 F5 打开控制台,可用的命令有:

Command Effect
kick PLAYERNAME 踢出一名玩家。
ban PLAYERNAME 封禁一名玩家。
unban PLAYERNAME 解除封禁。
banned 列出所有被封禁的玩家。

存档与备份

服务器每隔 -saveinterval 秒(默认 30 分钟)保存一次世界,并保留 -backups 个自动备份。

默认设置下,您会得到一个大约两小时前的备份,以及另外三个每隔十二小时的备份。对于一个活跃的服务器来说这有点单薄,采用类似下面这样的设置会是更好的起点:

-saveinterval 900 -backups 8 -backupshort 3600 -backuplong 21600

这样设置会每 15 分钟保存一次,并保留八份备份,第一份是一小时前的,其余每隔六小时一份。

自动备份就存放在存档目录中,与您的世界文件放在一起。它们和被备份的对象在同一块磁盘上,所以如果这个世界对您很重要,请按计划将它们复制到别处。用 rsync 设置一个 cron 任务就足够了。

正确停止服务器

在服务器控制台按下 CTRL + C。

不要直接点窗口右上角的 X 关闭。Iron Gate 自己的文档在这一点上说得相当坦率:服务器可能会在后台继续运行,而他们自己也不太清楚具体情况。无论如何,这样做都可能让您丢失自上次保存以来的所有进度。

在 systemd 下,如果您像前面那样设置了 KillSignal=SIGINT,那么 systemctl stop valheim 发送的就是 SIGINT,效果是一样的。

疑难排解

服务器启动后立即退出。 十次里有九次是密码规则的问题。密码不能为空,也不能出现在服务器名称或世界名称中。

在服务器列表中找不到服务器。 公开列表可能需要几分钟才会显示出来,而且在最好的情况下也不太可靠。可以让人先用 Join IP 通过 IP 加入,确认服务器本身是可访问的,然后再去考虑列表显示的问题。

玩家出现版本不匹配。 服务器所用的版本与客户端不同。请重新运行 SteamCMD 更新,或通过 Steam 客户端进行更新。

在 Steam 后端下出现连接被拒绝或超时。 检查端口转发。两个 UDP 端口都要转发到正确的内网 IP,并且要在操作系统防火墙中放行。

跨平台服务器在我的局域网中无法访问。 这是正常现象。跨平台(crossplay)服务器无法通过本地或回环 IP 访问。请使用公网 IP、加入代码,或通过服务器列表。

Linux 上出现缺少库文件的错误。 请安装 libatomic1、libpulse0 和 libpulse-dev。如果错误提到了 GLIBC 或 GLIBCXX 版本,说明您的发行版版本过旧,这时 Docker 就是答案。

内存占用持续上升。 随着世界被探索和建造,这属于正常现象。按计划定期重启服务器是一种常见且完全合理的应对方法。

崩溃后世界回退了。 您丢失了自上次保存以来的所有进度。请缩短 -saveinterval,并确保您是用 CTRL + C 来关闭服务器的。

结语

Valheim 服务器是比较容易搭建的一类。用 SteamCMD 拉取应用 896660,复制启动脚本,在命令行中填上你的名称、端口、世界和密码,然后运行它。

值得事先考虑清楚的两个决定,一是选择跨平台(crossplay)还是 Steam 后端,这决定了您是否需要动路由器;二是您的备份设置,因为默认值比大多数团队想要的要单薄一些。

如果你打算之后添加模组,我们的Valheim 模组指南介绍了 start_server_bepinex.sh,以及哪些模组需要同时安装在服务器端和客户端。

另请参阅

我们会尽力让本指南保持最新,但 Valheim 及其服务器工具会随时间变化。如果这里的说明与你实际看到的情况不符,请反馈,或在本指南的 GitHub 仓库中提交一个pull request。

如果你有任何问题,或需要服务器、模组相关的帮助,欢迎加入我们的Discord 服务器!

评论 (0)

登录后即可评论。

加载中…

发现更多

帖子动态

加载中…

最近动态

加载中…
前往社区