Valheim Dedicated Valheim Server on Linux – Valheim Wiki Guide

Valheim Dedicated Valheim Server on Linux – Valheim Wiki Guide 1 - steamsplay.com
Valheim Dedicated Valheim Server on Linux – Valheim Wiki Guide 1 - steamsplay.com

All the guides I have found on setting up a dedicated Valheim server on Linux had gaps in one place or another, so I decided to document my own setup for the benefit of others.
 
 
This guide is aimed at users wanting to set up the Valheim Dedicated Server on a headless Linux server using systemd. If you simply want to run this on an always-on desktop with a graphical login, or use a custom game server manager, this guide may not be as useful to you.
 
 
This guide is written for Debian 11 (bullseye), but much if not all of it will also apply to Ubuntu, as it is based on Debian.
 
 
Credit has to go to the Hosting Servers guide on the Valheim Fandom wiki – [fandom.com]  for basic information on how to invoke the server executable, which ports need to be exposed to the outside world, and configuration options.
 
 

Install the game via SteamCMD

SteamCMD – [valvesoftware.com]  is basically headless Steam for headless servers. We need it to download the Valheim Dedicated Server.
 
 

Set up multiarch

 
SteamCMD is provided by Debian, but as an i386 (32-bit x86) package, so you will need to add the i386 architecture to dpkg on your system to install i386 packages. (For more information see MultiArch/HOWTO on the Debian wiki – [debian.org] .) To do this, run the following commands.
 
 

$ sudo dpkg --add-architecture
$ sudo apt-get update

 
 

Install SteamCMD

 
Now install SteamCMD itself.
 
 

$ sudo apt-get install steamcmd

 
 

Set up a separate user and group for Steam

 
It is always best to run services as a dedicated user and group from everything else on your system, so that if a service is compromised, an attacker can only access that service’s files. (We will further harden the Valheim systemd service later.) Normally you would create a “system” user for system services, but Steam, even the headless SteamCMD, does not seem to behave properly unless it is run in a normal user environment. (See the man page adduser(8) for details on how a system user is different from a normal user.)
 
 
Create the steam user with the “adduser” command, disabling logins as we are only going to use this account via “sudo”.
 
 

$ sudo adduser --disabled-login steam

 
 

Finally run SteamCMD itself

 
Sadly, SteamCMD does not have a very good interface, so this next part will be a bit awkward for those of you already familiar with the Linux commandline.
 
Run the commands as follows (command output is omitted.)
 
 

$ sudo -iu steam # Opens a login shell as the "steam" user. See the man page sudo(8).
$ steamcmd
Steam>login anonymous
Steam>force_install_dir ./valheim/
# The Valheim server has a different appID from the client. See https://steamdb.info/app/896660/ - [steamdb.info] 
Steam>app_update 896660
Steam>quit
^C

 
If the “quit” command just leaves the program hanging with no prompt, type Ctrl+C to completely quit. This appears to be a bug in SteamCMD.
 
 
Now that you have the Valheim Dedicated Server installed, it’s time to set up the service to run it.
 
 
 

Run the Valheim server via systemd

The Valheim Dedicated Server comes with a wrapper script to run the server, but we are going to run the server executable directly for our systemd service unit.
 
 

The systemd unit

 
Write the following code to the file “/usr/local/lib/systemd/system/valheim.service”.
 
 

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

[Service]
Type=exec
User=steam
Group=steam
Environment="LD_LIBRARY_PATH=/home/steam/valheim/linux64" "SteamAppId=892970"
ExecStart=/home/steam/valheim/valheim_server.x86_64 -name "I forgot to name my server" -world "Midgard" -port 2456 -password "secret"

# Security settings
LockPersonality=true
NoNewPrivileges=true
RestrictRealtime=true
RestrictNamespaces=true
SystemCallArchitectures=native
SystemCallFilter=~@obsolete @clock @debug @module @mount @privileged @reboot @setuid @cpu-emulation
CapabilityBoundingSet=
RestrictAddressFamilies=AF_INET AF_INET6
RestrictSUIDSGID=true
PrivateDevices=true
PrivateTmp=true
PrivateMounts=true
PrivateUsers=true
ProtectControlGroups=true
ProtectHome=tmpfs
BindPaths=/home/steam
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectSystem=full
ProtectClock=true
ProtectKernelLogs=true
ProtectProc=invisible
ProtectHostname=true
RemoveIPC=true
InaccessiblePaths=/srv/

 
 
A full explanation of the systemd directives used in this unit is beyond the scope of this guide, but for those interested, the relevant man pages are as follows.
 

  • systemd.unit(5)
  • systemd.service(5)
  • systemd.exec(5)
  • systemd.resource-control(5)

 

Specifying a world

 
The “-world” argument is optional; if you leave it out, the server will generate a world for you from a random seed on the first run.
 
 
Otherwise, it specifies the name of a world to use, which must exist in the directory “/home/steam/.config/unity3d/IronGate/Valheim/worlds/”. In the systemd unit above, we specify the world named “Midgard”, so there must exist a file named “/home/steam/.config/unity3d/IronGate/Valheim/worlds/Midgard.fwl”. This lets you use a world copied from elsewhere.
 
 
If you want to use an existing world from your PC, keeping your progress, you must also copy the corresponding “.db” file to the same location as the “.fwl” file.
 
 
If you want to use a new world but with a specific seed, you must create the world with the game client, as the server provides no way of specifying a seed for the initial world creation.
 
 

Enabling the service

 
That defines the service, but systemd does not know about until it reloads units. Do this by running
 
 

$ sudo systemctl daemon-reload

 
Then enable it with
 
 

$ sudo systemctl enable valheim.service

 
Now the Valheim server will automatically start on boot, but not until the network is up (that’s what the line “After=network-online.target” does.) To start it now without rebooting, run
 
 

$ sudo systemctl start valheim.service

 
 
 

Success!(?)

If all went well, you should now be able to see your server in the server browser from the Valheim client. If you have trouble and can not figure out how to resolve it even after rereading this guide, please let me know! I will try to help and revise this guide for future readers.
 
 
Remember to open and, if you are behind a NAT router (such as on a home LAN), also forward ports 2456-2457. The Hosting Servers guide on the Valheim Fandom wiki – [fandom.com]  has further information on administrating the server, such as whitelisting and blacklisting Steam users.
 
 

Written by aidalgol

 
 
Hope you enjoy the post for Valheim Dedicated Valheim Server on Linux – Valheim Wiki Guide, If you think we should update the post or something is wrong please let us know via comment and we will fix it how fast as possible! Thank you and have a great day!
 


Be the first to comment

Leave a Reply

Your email address will not be published.


*