Valheim: Setup Valheim On Linux Server

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. If you simply want to run this on an always-on desktop with a graphical login, 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[valheim.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 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[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/

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

[email protected] @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[valheim.fandom.com] has further information on administrating the server, such as whitelisting and blacklisting Steam users.

This is it guys!! I am sure that you will love Valheim: Setup Valheim On Linux Server that we have shared with you. We are always open to discussion and suggestions from you. Just let us what you thought about the guide in the comment section.

Also, we would like to thank aidalgol. He is the one behind this wonderful guide.