Valheim Dedicated Server VPS: 1.0 Setup, Crossplay, Backups and Cost

Run a Valheim 1.0 dedicated server on an Ubuntu 24.04 VPS from Iron Gate's own files: sourced RAM figures, the ports, crossplay, the new world folders, systemd, and a weekend's cost versus always-on.

Title card reading “Valheim world on a VPS” for the HourlyVPS guide to running a Valheim dedicated server on an Ubuntu VPS

A Valheim dedicated server VPS runs Iron Gate’s free Linux server (SteamCMD app 896660) around the clock, so your world stays online after the host logs off. Iron Gate publishes no CPU or RAM minimum; the community-maintained Docker project measured about 2.8 GB of RAM at idle and recommends 2 cores with 4 GB as a minimum and 4 fast cores with 8 GB as the target. The game is built for 1–10 players, a Steam-only server needs UDP ports 2456–2457, and crossplay is one launch flag.

This guide follows Iron Gate’s dedicated server guide and the files in the server build Steam serves today (depot dated September 25, 2026, the day Patch 1.0.16 shipped) on Ubuntu 24.04 LTS. It covers the Valheim 1.0 changes that older guides miss, a systemd unit that stops the server the way Iron Gate says to, and what one weekend of play costs compared with keeping the world online all month.

Key takeaways

  • Valheim's dedicated server is a free Steam tool (app 896660) that SteamCMD downloads without a Steam account; Iron Gate publishes no RAM or CPU minimum, and the game is built for 1 to 10 players.
  • The valheim-server-docker README measured about 2.8 GB of RAM at idle and recommends 2 cores with 4 GB as a minimum and 4 fast cores with 8 GB as the target, because one thread does most of the work.
  • A Steam-backend server needs UDP 2456-2457; -crossplay routes traffic through a relay and is required for console, Microsoft Store and Mac App Store players, and the stock start script enables it.
  • Valheim 1.0 (September 9, 2026) saves each world as a folder of chunk files instead of a .db and .fwl pair, so stop the server and back up the whole save folder.
  • Run the server under systemd with KillSignal=SIGINT, Iron Gate's documented stop; a stopped VPS is still billed, so back up and delete a weekend world between sessions, while one left on never costs more than its monthly price in a billing period.

How much RAM and CPU does a Valheim dedicated server VPS need?

Iron Gate’s manual gives no CPU or RAM figure. The most detailed public numbers come from the README of the community-maintained valheim-server-docker project, which measured its own server. Every sizing figure we could source (checked October 2026):

WhatFigureSource
Memory at idle, no playersAbout 2.8 GB RSSvalheim-server-docker README
CPU at idleAbout 30% of one core on a 2.40 GHz Xeon E5-2620 v3valheim-server-docker README
CPU with players42% of one core with 1 player, 53% with 2valheim-server-docker README
Minimum2 cores, 4 GB RAMvalheim-server-docker README
Recommended4 high-clocked cores, 8 GB RAMvalheim-server-docker README
Players1 to 10Iron Gate 1.0 FAQ
Disk for the server filesAbout 2.2 GB (2,075 MB server depot + 111 MB Steamworks redistributable)Steam depot manifests, September 25, 2026 build
Linux librariesglibc 2.29 or newer; libatomic1, libpulse0, libpulse-devIron Gate manual
Valheim dedicated server sizing figures and their sources. Iron Gate’s own documents cover only the player count, libraries and glibc version.

The same README found that one thread does about 70% of the work once players connect, so a few fast cores beat many slow ones. The 1.0 FAQ adds that the 1.0 optimizations will not help large builds much. Our reasoning, not a benchmark: load follows what players do more than how many log in, because exploring generates terrain and every piece of a large base is one more object to simulate and save.

Which plan fits your group?

GroupPlanvCPU / RAM / NVMeWhy
2–4 friends, evening sessionsQuartz Q4 (quartz-4gb)2 shared / 4 GB / 80 GBMeets the community minimum, with about 1.2 GB above the 2.8 GB idle figure for Ubuntu and growth. Watch memory as the world grows.
5–10 friends: the default pickQuartz Q8 (quartz-8gb)4 shared / 8 GB / 160 GBMatches the recommended 4 cores and 8 GB.
Up to 10 players with large basesChrono C8 (chrono-8gb)2 dedicated / 8 GB / 100 GBSame RAM. The busy main thread gets CPU time that no neighbor shares.
Plan sizing mapped to the figures above. This is our reasoning, not a benchmark. Quartz Q1 and Q2 have less RAM than the server uses at idle.

Quartz Q8

KVM · 1 Gbps port · Istanbul · initial credit $5

vCPU
4 shared
RAM
8 GB
NVMe
160 GB
Traffic
Istanbul: 5 TB/month
  • Per hour$0.05/hour
  • Per day (24 h)$1.20/day
  • Monthly cap$25.00/month

Deploy Quartz Q8 Plan details for Quartz Q8

Start on Quartz Q8 unless your group is small and explores little. If a 4 GB server is killed for lack of memory (the troubleshooting matrix shows the check), move the world to an 8 GB plan with the backup routine below. Full specs are on the Quartz Q8 plan page, and the Chrono C8 plan page lists the dedicated-core option for large bases.

What changed for dedicated servers in Valheim 1.0?

Valheim left Early Access with version 1.0 on September 9, 2026, and Iron Gate posted four patch notes (1.0.10 through 1.0.16) between September 11 and September 25. Its September 30 update says more bug-fix patches are coming, so plan for frequent server updates. These are the points that matter for a server owner:

  • Worlds are folders now. The Patch 0.221.13 notes introduced the new save system that 1.0 shipped: “Instead of saving a world with the .db and .fwl files it’s now stored in folders and the world (.db) is split up in multiple files (chunks).” A world in the old format is backed up before its first conversion. Guides that tell you to copy one .db and one .fwl file describe pre-1.0 saves.
  • New player IDs. 1.0 uses new platform IDs such as V_123456789. Patch 1.0.12 fixed the ban and permitted lists so that older IDs such as Steam_123456789 work as well.
  • Same launch parameters. The September 25 server build still accepts every parameter in Iron Gate’s online guide (dated April 11, 2024), so the flags in this guide are current.
  • Still 1–10 players, still no official mods. The 1.0 FAQ calls Valheim “a game for 1-10 players” and says there is no official mod support on PC and none on consoles.
  • Crossplay on every platform. Valheim 1.0 is available on Steam, the Mac App Store, the Microsoft Store, Xbox, PlayStation 5 and Nintendo Switch 2, with crossplay between all of them (1.0 FAQ). A dedicated server lets non-Steam players in only when it runs with -crossplay.

Warning: Keep a copy of any pre-1.0 world before its first start on 1.0. Iron Gate’s Patch 1.0.15 notes say items on item stands and armor stands lost their upgrade levels when worlds were converted to the new save format before Patch 1.0.12. One of the two workarounds Iron Gate gives is to restore the backup made at that first load, which loses any progress since.

Which ports does a Valheim server need? Steam vs crossplay

A server on the Steam backend needs UDP 2456 and 2457: Iron Gate’s manual says Valheim “uses the specified Port AND specified Port+1”. A crossplay server sends its traffic through a relay, so according to the same manual it “does not require Port Forwarding”. Three documents mention a third port, and they do not agree:

DocumentPortsContext
Iron Gate manual and online guideUDP 2456–2457 (the port and port+1)Steam backend. Crossplay needs no port forwarding.
start_server.sh comment, current build“ports 2456-2458”A forwarding note above the launch line
valheim-server-docker READMEAdds UDP 2458 when crossplay is on“used for the crossplay backend communication”; its modding notes add that some mods need port+2 as well
What each document says about Valheim’s ports, checked October 2026.

A VPS has a public IP address and no home router, so on a VPS “port forwarding” only means allowing the ports in the firewall. A single rule for UDP 2456 to 2458 covers all three documents. None of them lists a TCP port.

Should your server use the Steam or the crossplay backend?

Steam backend (no flag)Crossplay backend (-crossplay)
Who can joinSteam players only: Windows, Linux, macOS, Steam DeckAny platform: Steam, Microsoft Store, Mac App Store, Xbox, PS5, Switch 2
Network pathDirectly to your serverThrough a PlayFab relay, per the manual
How players joinJoin IP with YOUR_SERVER_IP:2456Public IP and port, a join code, or the server list
Join codeNoneA new code each time the server restarts (Patch 0.211.7)
ModsThe BepInEx pack’s own start script launches without -crossplayThe Docker README warns that some mods misbehave with crossplay
Steam vs crossplay backend, from Iron Gate’s manual and patch notes and the valheim-server-docker README.

If every player owns Valheim on Steam, leave crossplay off. Add -crossplay as soon as one friend plays on a console or bought the game outside Steam, for example from the Microsoft Store or Mac App Store: the manual says that without the flag only Steam users can see and join the server. Note that the stock start_server.sh in the current build already passes -crossplay; the systemd unit below lets you choose.

How to install a Valheim dedicated server on Ubuntu 24.04

Run these steps over SSH as a non-root sudo user. On a fresh server, connect with an SSH key and work through the VPS security checklist first: key-only login, no root login and automatic updates.

1. Allow SSH and the game ports in the firewall

Allow SSH before you enable the firewall, or you lock yourself out. If you moved SSH to another port, allow that port instead of 22. The game rule uses the port-range form from the ufw manual, which requires a protocol:

sudo ufw allow 22/tcp
sudo ufw allow proto udp from any to any port 2456:2458 comment 'Valheim'
sudo ufw enable
sudo ufw status verbose

2. Install SteamCMD and the libraries Iron Gate lists

Valve’s SteamCMD page installs it from Ubuntu’s multiverse repository as a 32-bit package. The installer shows the Steam license, which you must accept with I AGREE:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd

Then install the three packages from the manual’s “Required packages” list. The Dockerfile that Iron Gate ships in the server folder installs the same three, plus curl:

sudo apt install libatomic1 libpulse0 libpulse-dev

The manual sets a floor of GLIBC_2.29 and GLIBCXX_3.4.26 and offers docker_start_server.sh for older systems. Ubuntu 24.04 ships glibc 2.39 and Debian 12 ships 2.36, so neither needs the Docker route.

Debian 12: SteamCMD comes from the non-free component, and Valve’s page notes that add-apt-repository no longer works on Bookworm, so add non-free to your APT sources by hand. The three library packages have the same names.

3. Create a steam user

Valve warns against running SteamCMD as root. Create a steam user without sudo rights, then switch to it:

sudo useradd -m -s /bin/bash steam
sudo -iu steam

4. Download the server: app 896660

The Valheim Dedicated Server is a free Steam tool with app ID 896660, and it downloads without a Steam account or a game purchase. Valve’s docs put +force_install_dir before the login:

/usr/games/steamcmd +force_install_dir /home/steam/valheim +login anonymous +app_update 896660 validate +quit

For the September 25, 2026 build the download is about 1.9 GB and takes about 2.2 GB on disk. The app also installs the Steamworks SDK Redist, which places linux64/steamclient.so in the server folder. Type exit to return to your sudo user.

5. Read the stock start script once, then leave it alone

These are the working lines of /home/steam/valheim/start_server.sh in the current build (sudo cat shows the whole file):

export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970
# NOTE: Minimum password length is 5 characters & Password cant be in the server name.
# NOTE: You need to make sure the ports 2456-2458 is being forwarded to your server through your local router & firewall.
./valheim_server.x86_64 -name "My server" -port 2456 -world "Dedicated" -password "secret" -crossplay
  • The server needs LD_LIBRARY_PATH pointing at linux64 and SteamAppId=892970, which is the game’s app ID, not the server tool’s.
  • The password needs at least 5 characters and must not appear in the server name; keep it out of the world name too. A rejected password stops the server at start-up with Error bad password in the log.
  • The default launch line enables crossplay.

Iron Gate’s manual says Steam resets this file on every update and recommends editing a copy. A systemd unit is a better copy: it holds your settings, survives updates and restarts the server when it crashes.

Run the Valheim server 24/7 with systemd

Keep the server name, world and password in a separate root-only file, so you can change them without touching the unit. Unit files in /etc/systemd/system are readable by every user, and an environment file with mode 600 is not. The password still appears on the server’s command line, where any user on the same VPS can read it with ps, so use a password you do not use anywhere else:

sudo install -m 600 /dev/null /etc/valheim.env
sudo nano /etc/valheim.env
VALHEIM_NAME=Viking Hall
VALHEIM_WORLD=Midgard
VALHEIM_PASSWORD=change-this-long-password
VALHEIM_ARGS=-public 0
  • VALHEIM_WORLD names an existing world or creates a new one with that name.
  • VALHEIM_PASSWORD needs 5 or more characters and must not be part of the server name or the world name. Stick to letters, digits and hyphens so no character needs escaping.
  • VALHEIM_ARGS holds optional flags. -public 0 keeps a Steam-only server out of the server list; friends join with Join IP. For crossplay, set VALHEIM_ARGS=-crossplay instead.

Now create /etc/systemd/system/valheim.service:

[Unit]
Description=Valheim dedicated server
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/valheim
EnvironmentFile=/etc/valheim.env
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/steam/valheim +login anonymous +app_update 896660 +quit
ExecStart=/usr/bin/env LD_LIBRARY_PATH=/home/steam/valheim/linux64 SteamAppId=892970 \
  /home/steam/valheim/valheim_server.x86_64 -name ${VALHEIM_NAME} -port 2456 \
  -world ${VALHEIM_WORLD} -password ${VALHEIM_PASSWORD} $VALHEIM_ARGS
KillSignal=SIGINT
TimeoutStartSec=30min
TimeoutStopSec=120
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target
  • KillSignal=SIGINT stops the server the way Iron Gate documents: the manual says to stop it with Ctrl+C, which sends SIGINT, and Patch 0.143.5 says “Use CTRL-C or SIGINT”. systemd sends SIGTERM unless told otherwise (systemd.kill).
  • TimeoutStopSec=120 gives the server two minutes to save before systemd kills it, the stop timeout the valheim-server-docker README uses.
  • ExecStartPre updates the server on every start, because Steam updates players’ games automatically and Iron Gate’s patch notes ask hosts to update before players join. The leading - lets the installed build start if Steam is unreachable, and TimeoutStartSec=30min leaves room for a large download.
  • ${VALHEIM_NAME} in braces stays one argument even with spaces, while the bare $VALHEIM_ARGS splits into separate flags, per the systemd.service manual. /usr/bin/env sets the two variables from the stock script for the server process only, not for SteamCMD.

For what each section of a unit file does and how to debug one, see our guide to creating a systemd service. Load and start the service, then follow its log:

sudo systemctl daemon-reload
sudo systemctl enable --now valheim.service
sudo journalctl -u valheim.service -f

The first start downloads any update and generates the world, which can take a few minutes. The manual says the server is ready when the log shows Game server connected. A crossplay server also logs its join code, which this command finds:

sudo journalctl -u valheim.service | grep -i "join code" | tail -n 1

In Valheim, open Join game and use Join IP with YOUR_SERVER_IP:2456, then enter the password.

Where are Valheim world saves on a Linux server?

The manual’s default save path on Linux is ~/.config/unity3d/IronGate/Valheim in the home folder of the user that runs the server. With this setup that is /home/steam/.config/unity3d/IronGate/Valheim, and the -savedir parameter moves all of it elsewhere.

ItemLocation inside the save folderSource
Worldsworlds_local/: in 1.0, one folder per world, split into chunk files; a pre-1.0 world is a .db plus .fwl pairPatch 0.209.8, Patch 0.221.13
Automatic backupsSeparate backup folders (1.0 format)Patch 0.221.13
Admin, ban and permitted listsadminlist.txt, bannedlist.txt, permittedlist.txtIron Gate manual
Legacy worldsworlds/: the location before Patch 0.209.8, no longer writtenPatch 0.209.8
Valheim dedicated server save layout on Linux.

Back up the whole Valheim folder instead of picking files by name: it holds every world, its backups and the three lists. In 1.0 the server rewrites only the chunks that changed and checks each save after writing it. The valheim-server-docker README warns that a copy taken during a save can capture a chunk index that points at chunk files the server has already replaced. Stopping the service first makes the copy consistent.

The server’s built-in backups

ParameterDefaultWhat it does
-saveinterval 180030 minutesHow often the world saves
-backups 44How many automatic backups to keep: the first at the short interval, the rest at the long one
-backupshort 72002 hoursInterval for the first automatic backup
-backuplong 4320012 hoursInterval between the later backups
Save and backup parameters from Iron Gate’s dedicated server manual. Add any of them to VALHEIM_ARGS.

By default that means one backup about 2 hours old and three taken 12 hours apart. They sit on the same disk as the world, so deleting the VPS deletes them too. A world that stays online needs copies of its own: the nightly backup timer below makes them, and our VPS backup guide with restic sends copies off the server.

Admins, bans and the permitted list

Each list takes one Platform User ID per line in the format [Platform]_[User ID], which is case sensitive. Each player can read their ID in the game’s F2 panel, and the server log shows it too. Valheim 1.0 IDs look like V_123456789; since Patch 1.0.12 the ban and permitted lists accept older Steam_123456789 IDs as well.

sudo -u steam nano /home/steam/.config/unity3d/IronGate/Valheim/adminlist.txt
sudo systemctl restart valheim.service

The manual does not say whether the server rereads the lists while it runs, so restart after you edit one. Admins open the console with F5 to use Kick, Ban, Unban and Banned. The manual’s bold warning applies to permittedlist.txt: adding one person to it bans everyone else, so add every player’s ID, starting with your own.

What does a Valheim server cost: one weekend or always on?

The server software is free, so the cost is the hours the VPS exists. A weekend from Friday 18:00 to Sunday 23:00 is 53 hours, the same weekend our Minecraft server cost guide uses. Billing is by the hour: every hour a server exists is charged at the plan’s hourly rate. The price tapes and cost tables on this site count every started hour as a full hour, so they show the most a duration can cost; the cost calculator charges a partial hour to the nearest cent, as the bill does. Every server is billed by the hour: the plan’s hourly rate is deducted from the server’s prepaid balance for every hour it exists, powered on or off, until you delete it.

Quartz Q8 (4 vCPU, 8 GB): cost by session length, billed by the hour and capped at the monthly price
DurationHours on the meterCost $0.05/hour · cap $25.00/monthNote
4 hours4$0.20
8 hours8$0.40
1 day24$1.20
2 days 5 hours53$2.65
7 days168$8.40
30 days720$25.00Capped at the monthly price
Charges stop at $25.00 after 500 hours (about 20.8 days) in a billing period; the rest of that period is free.

The same sessions on the three plans from the sizing table:

SessionQuartz Q4 (4 GB)Quartz Q8 (8 GB)Chrono C8 (8 GB, dedicated)
One 4-hour evening$0.12$0.20$0.28
One weekend (53 hours)$1.59$2.65$3.71
A full week$5.04$8.40$11.76
Always on, one month$15.00$25.00$35.00
Totals billed by the hour; the one-month row is each plan’s monthly cap. Four weekends cost four times the weekend row, because the server is deleted in between.

There is no billing mode to choose up front. A world your group visits most evenings can simply stay online: a server you leave on is a monthly VPS with an automatic cap, so Quartz Q8 never costs more than $25.00 in a billing period (one month from your order date), with no contract. Renting a daily VPS for a long Saturday or a three-day weekend is the same hourly billing counted in 24-hour days, $1.20/day on Quartz Q8. Every plan is on the pricing page, and the VPS cost calculator prices your own schedule.

How you pay: your account runs on prepaid credit with a minimum top-up of $5, and each server starts with an initial credit, paid at checkout and used for that server’s hours (hourly VPS billing explained walks through it). When a server’s balance falls to about one day of usage, a top-up invoice is issued. Pay it before game night: a server whose balance reaches zero is suspended, and under the Terms a suspended server that stays unpaid for 7 days is deleted with its data, world included.

Stopped is not free: A stopped server is still billed, because its vCPU, memory, disk and IP addresses stay reserved for you; only deleting the server stops billing. That rule is common. In the Hourly VPS Fine-Print Index of 20 providers (checked October 2, 2026), 12 bill a stopped server in full, 5 charge only for its storage and 3 depend on the setup. Which providers bill stopped servers has the details.

Pick the data center closest to most players. The guide to choosing a VPS location explains the latency trade-off, and HourlyVPS deploys in Istanbul today, with New York coming soon. Istanbul plans include the monthly traffic allowance listed for each plan, prorated for a server that exists for part of a billing period. For the same weekend math on another survival game, see the Palworld dedicated server guide. For VPS prices across 20 providers, see how much a VPS costs.

Weekend world or always-on world?

How your group playsSetupWhy
Weekends or game nights, then a breakQuartz Q8 by the hour; back up and delete between sessionsA stopped server is still billed; a deleted one is not
Online most eveningsQuartz Q8, left on, with the nightly backupCharges stop at the monthly price for the rest of each billing period
10 players and large bases, for weeksChrono C8, left onDedicated cores for the single busy thread; the monthly cap limits the bill
You want mods without touching LinuxA managed Valheim hostA web panel replaces SSH, and the BepInEx pack’s README lists hosts that install the loader automatically
Reasoning from the sizing figures and the billing rules above, not a benchmark.

Back up, move and restore a Valheim world

For weekend-only play the routine is short: on Sunday, stop the server so no chunk is mid-write, archive the save folder, pull the archive to your own computer and check it, then delete the server in the portal. Only the delete stops billing. The checklist before you delete a VPS covers what else to copy off and revoke first.

On the server:

sudo systemctl stop valheim.service
sudo tar -czf ~/valheim-$(date +%F).tar.gz -C /home/steam/.config/unity3d/IronGate Valheim
sudo chown "$USER": ~/valheim-*.tar.gz

On your own computer:

mkdir -p valheim-backups
rsync -avP 'you@YOUR_SERVER_IP:valheim-*.tar.gz' valheim-backups/
for f in valheim-backups/valheim-*.tar.gz; do tar -tzf "$f" > /dev/null && echo "OK $f"; done

Without rsync on Windows, scp you@YOUR_SERVER_IP:valheim-*.tar.gz . does the same job. Next session, deploy a new server and repeat install steps 1 to 4, the environment file and the unit. Enable the unit with sudo systemctl enable valheim.service, without --now, so it does not create a fresh world before the restore. Upload the archive with rsync -avP valheim-backups/valheim-YYYY-MM-DD.tar.gz you@NEW_SERVER_IP:, then restore it on the server:

sudo -u steam mkdir -p /home/steam/.config/unity3d/IronGate
sudo tar -xzf ~/valheim-YYYY-MM-DD.tar.gz -C /home/steam/.config/unity3d/IronGate
sudo chown -R steam:steam /home/steam/.config/unity3d/IronGate/Valheim
sudo systemctl start valheim.service

Keep VALHEIM_WORLD the same as before. A new server usually has a new IP address, so send your friends the new IP:2456; on crossplay, the join code changes on every restart anyway. Restore once as a test before you rely on this routine.

Always-on world: a nightly backup timer

A world that runs all month never gets the Sunday routine, so let systemd run it. This timer stops the server at 05:00 server time (timedatectl shows the time zone), archives the save folder, deletes archives older than 14 days and starts the server again, which also installs any update through ExecStartPre. Pick an hour when nobody plays, because the server is offline while the archive is written. First the script:

sudo nano /usr/local/sbin/valheim-backup
#!/bin/sh
set -e
mkdir -p /var/backups/valheim
tar -czf "/var/backups/valheim/valheim-$(date +%F).tar.gz" -C /home/steam/.config/unity3d/IronGate Valheim
find /var/backups/valheim -name 'valheim-*.tar.gz' -mtime +13 -delete

Make it executable with sudo chmod 755 /usr/local/sbin/valheim-backup, then create /etc/systemd/system/valheim-backup.service:

[Unit]
Description=Nightly Valheim world backup

[Service]
Type=oneshot
ExecStartPre=/usr/bin/systemctl stop valheim.service
ExecStart=/usr/local/sbin/valheim-backup
ExecStopPost=/usr/bin/systemctl start --no-block valheim.service

And /etc/systemd/system/valheim-backup.timer:

[Unit]
Description=Run the Valheim world backup every night

[Timer]
OnCalendar=*-*-* 05:00:00
Persistent=true

[Install]
WantedBy=timers.target
  • ExecStopPost runs even when the backup fails (systemd.service), so the server always comes back, and --no-block returns at once instead of waiting for an update download (systemctl). A oneshot service has no start timeout by default, so a slow save does not fail the job.
  • Persistent=true runs a backup missed while the VPS was down at the next boot (systemd.timer). For more OnCalendar patterns, see systemd timers instead of cron.

Enable the timer, then run one backup now as a test (it stops the server while it runs):

sudo systemctl daemon-reload
sudo systemctl enable --now valheim-backup.timer
sudo systemctl start valheim-backup.service
ls -lh /var/backups/valheim

The archives still live on the VPS. Pull them to your computer now and then with the rsync command above, using the remote path /var/backups/valheim/valheim-*.tar.gz, so a lost or deleted server does not take the world with it.

Move a world from your PC to the server

On Windows, the manual’s default save path is %USERPROFILE%/AppData/LocalLow/IronGate/Valheim, and local worlds sit in its worlds_local folder. A world kept in Steam Cloud is stored under Steam’s userdata folder instead (Patch 0.209.8). In 1.0 a world is a set of chunk files and folders whose exact layout Iron Gate does not document, so copy the whole worlds_local folder rather than picking files. Upload it to your home directory on the server with scp -r or rsync. Then stop the service, copy the folder into place and set VALHEIM_WORLD in /etc/valheim.env to the world’s name as the game’s world list shows it, letter case included. Do this before the server has ever started with that world name; otherwise it has already created a fresh world under the same name.

sudo systemctl stop valheim.service
sudo -u steam mkdir -p /home/steam/.config/unity3d/IronGate/Valheim
sudo cp -r ~/worlds_local /home/steam/.config/unity3d/IronGate/Valheim/
sudo chown -R steam:steam /home/steam/.config/unity3d/IronGate/Valheim/worlds_local
sudo nano /etc/valheim.env
sudo systemctl start valheim.service

A pre-1.0 world (a .db and .fwl pair) is converted on its first load, and Iron Gate’s notes say a backup is made first.

Mods on a Linux Valheim server: BepInEx, with caution

Iron Gate has no official mod support. Its statement on mods says using them is at your own risk and that compatibility with newer versions is not guaranteed. Consoles have no mod support, so a server whose mods every player must install is PC-only in practice, and the valheim-server-docker README warns that some mods misbehave with crossplay.

The community’s loader is BepInExPack_Valheim on Thunderstore: version 5.4.2351 (September 24, 2026), built on BepInEx 5.4.23.5 and maintained by community members, not by Iron Gate. Its Linux server instructions are to copy the pack’s contents into the server folder and launch with its start_server_bepinex.sh, which sets five environment variables and then execs the server. Under systemd you set the same variables in an override. Back up the save folder first, then copy the pack in as the steam user (check the Thunderstore page for a newer version number):

sudo apt install unzip
sudo -iu steam
curl -L -o bepinex.zip https://thunderstore.io/package/download/denikson/BepInExPack_Valheim/5.4.2351/
unzip bepinex.zip -d bepinex
cp -r bepinex/BepInExPack_Valheim/. /home/steam/valheim/
exit

Then point the service at the loader. As your sudo user, open an override:

sudo systemctl edit valheim.service
[Service]
ExecStart=
ExecStart=/usr/bin/env DOORSTOP_ENABLED=1 \
  DOORSTOP_TARGET_ASSEMBLY=/home/steam/valheim/BepInEx/core/BepInEx.Preloader.dll \
  LD_LIBRARY_PATH=/home/steam/valheim/doorstop_libs:/home/steam/valheim/linux64 \
  LD_PRELOAD=libdoorstop_x64.so SteamAppId=892970 \
  /home/steam/valheim/valheim_server.x86_64 -name ${VALHEIM_NAME} -port 2456 \
  -world ${VALHEIM_WORLD} -password ${VALHEIM_PASSWORD} $VALHEIM_ARGS

The empty ExecStart= clears the original line, which systemd requires before a new one. The values match start_server_bepinex.sh in pack 5.4.2351, so compare them with the script in your download. After sudo systemctl restart valheim.service, the pack’s README says BepInEx bootstrap messages appear in the terminal, which under systemd means the journal. Install only mods whose page says they support the current Valheim version, and follow each mod’s notes on whether players need it too.

Updates break mods. The unit updates Valheim on every start, and a game patch can break a mod until its author updates it. If you run mods, you may prefer to remove the ExecStartPre line and update on purpose once your mods support the new version. The trade-off: players’ games update automatically, so they may be unable to join until the server catches up.

Valheim server troubleshooting matrix

SymptomLikely causeFix
Server exits right after it starts; the log shows Error bad passwordPassword shorter than 5 characters, or part of the server or world nameChange VALHEIM_PASSWORD, then restart
Steam friends time out when joiningUDP 2456–2457 not allowed, or a different -portsudo ufw status must list 2456:2458/udp; join with IP:2456
Console, Microsoft Store or Mac App Store friends cannot joinServer runs on the Steam backendSet VALHEIM_ARGS=-crossplay, then restart
Yesterday’s join code does not workJoin codes change on every restartRead the new code from the journal, or join by IP:2456
Players get a version error after a game patchServer is older than the players’ gamessudo systemctl restart valheim.service updates it first
A fresh, empty world appearedVALHEIM_WORLD does not match the world’s nameStop the service, fix the name (case included), start again
Only one player can join; everyone else is refusedpermittedlist.txt has entriesAdd every player’s ID, or empty the file
Admin commands do nothingWrong ID format or case in adminlist.txtCopy the ID from the F2 panel or the log, then restart
Server killed after hours of playOut of memoryCheck sudo journalctl -k | grep -i "out of memory"; move the world to an 8 GB plan
Lag and rubber-banding near large basesThe busy main thread is short of CPU timetop -H -u steam shows one thread near 100%; consider dedicated vCPU (Chrono C8)
Server offline; the portal shows it suspendedThe server’s balance reached zeroPay the top-up invoice; an unpaid suspended server is deleted after 7 days
Mods stopped loading after an updateMod not yet updated for the new Valheim versionRemove the mod or wait for its update; restore your backup if the world was affected
Common Valheim dedicated server faults on a Linux VPS, with causes and fixes from Iron Gate’s manual, the patch notes and this guide.

Most of these show up in the log first. sudo journalctl -u valheim.service -n 100 prints the last 100 lines.

Deploy this setup

Host a Valheim world for the weekend

Quartz Q8 · 4 shared vCPU · 8 GB RAM · 160 GB NVMe · Istanbul

  • Per hour$0.05/hourFor this job
  • Per day (24 h)$1.20/day
  • Monthly cap$25.00/month
Deploy Quartz Q8

Starts with a $5 initial credit, which goes into the server’s balance and pays for its hours.

Billed by the hour, never more than $25.00 per billing period. Delete the server and billing stops.

FAQ

Is a Valheim dedicated server free?

The server software is free: the Valheim Dedicated Server is a Steam tool (app 896660) that SteamCMD installs without a Steam account. Each player still needs the game, which Iron Gate's 1.0 FAQ prices at $29.99 with regional differences, and the machine that runs the server costs electricity or VPS hours.

Do you need a dedicated server to play Valheim with friends?

No. A player can host a world from inside the game, but then the world is only online while that player is in it. A dedicated server keeps the world available to everyone at any hour, which is the reason Iron Gate gives for running one.

How many players can join a Valheim dedicated server?

Up to 10. Iron Gate's 1.0 FAQ says Valheim 1.0 remains a game for 1 to 10 players, and that applies to dedicated servers on both the Steam and the crossplay backend.

How much RAM does a Valheim dedicated server need?

Iron Gate does not publish a figure. The community valheim-server-docker README measured about 2.8 GB at idle and recommends 4 GB as a minimum and 8 GB with 4 fast cores as the target, so an 8 GB VPS leaves room for exploring and large bases.

Which ports does a Valheim dedicated server use?

UDP 2456 and 2457 by default, the game port and the port above it. A crossplay server relays its traffic and needs no port forwarding per Iron Gate's manual, but the stock start script mentions 2456-2458, so allowing UDP 2456 to 2458 in the VPS firewall covers both backends.

Where are Valheim world files on a Linux server?

In ~/.config/unity3d/IronGate/Valheim/worlds_local of the user that runs the server, unless -savedir moves them. Since Valheim 1.0 each world is a folder of chunk files; worlds saved before 1.0 are a .db and .fwl pair until the server converts them.

Can PS5, Xbox and Switch 2 players join a Valheim server on a VPS?

Yes, if the server starts with the -crossplay flag, which switches it to the PlayFab backend. Console players then join with the server's IP address and port, the join code from the server log, or the server list; without the flag only Steam players can join.

Sources

  1. A Guide to Dedicated Servers (same text as the manual PDF shipped with the server)Iron Gate Studio · valheim.com · checked
  2. Valheim 1.0 FAQIron Gate Studio · valheim.com · checked
  3. Valheim 1.0 Has Arrived! (patch notes)Iron Gate Studio (Steam) · store.steampowered.com · checked
  4. Patch 0.221.13 (Public Test): the new world save systemIron Gate Studio (Steam) · store.steampowered.com · checked
  5. Hotfix 1.0.10 & 1.0.12 (ban and permitted list IDs)Iron Gate Studio (Steam) · store.steampowered.com · checked
  6. Patch 0.211.7 – Crossplay! (-crossplay and join codes)Iron Gate Studio (Steam) · store.steampowered.com · checked
  7. SteamCMDValve Developer Community · developer.valvesoftware.com · checked
  8. valheim-server-docker README (system requirements, crossplay, backups)community-valheim-tools (GitHub) · github.com · checked
  9. BepInExPack_Valheim 5.4.2351Thunderstore · thunderstore.io · checked
  10. systemd.service manualfreedesktop.org · freedesktop.org · checked
All posts