在本指南中,我们将在 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,这是最简单的方式。
- 打开你的 Steam 库。
- 点击左上角的下拉菜单,确保勾选了工具复选框。
- 在列表中找到Valheim Dedicated Server并点击安装。
- 完成后,右键点击它,选择管理,然后选择浏览本地文件以打开安装文件夹。
通过 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 启动。
- 打开服务器的安装文件夹。
- 将
start_headless_server.bat复制为类似start_myserver.bat的文件。 - 右键点击你的副本并选择编辑。
- 找到以
start valheim_server开头的那一行,在上面设置你的参数。
完成后的那一行大致如下:
start valheim_server -nographics -batchmode -name "My Valheim Server" -port 2456 -world "Dedicated" -password "secret123" -public 1 -crossplay
- 保存后,双击该批处理文件。
- 如果 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 是官方建议的方式,服务器也自带了相应脚本。
- 按照 您所用发行版的说明 安装 Docker。
- 确保 Docker 守护进程正在运行,并且您的用户已加入
docker组。以下命令应该能正常运行且不报错:
docker ps
- 运行捆绑的脚本,并传入你的启动脚本:
./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 官方专用服务器指南 - Iron Gate 官方文档,也是上文参数列表的来源。
- Valheim Crossplay 常见问题
- SteamCMD 文档
- Valheim Modding Discord
- Valheim Modding Wiki
- TMC App - 我们自己开发的应用,内置服务器浏览器、实时延迟图表和 RCON 功能。它也可以管理 Valheim 的 mod,具体请参阅我们的Valheim mod 指南。基于 GPL-3.0 开源,目前仍处于早期开发阶段,欢迎试用或提出反馈。
我们会尽力让本指南保持最新,但 Valheim 及其服务器工具会随时间变化。如果这里的说明与你实际看到的情况不符,请反馈,或在本指南的 GitHub 仓库中提交一个pull request。
如果你有任何问题,或需要服务器、模组相关的帮助,欢迎加入我们的Discord 服务器!

