Project Zomboid's dedicated server is an ordinary SteamCMD install with a Java process underneath, and the two things that catch people out are not obscure: a memory flag buried inside a shell script, and a UDP port count that depends on how many friends you actually let in.Der Dedicated Server von Project Zomboid ist eine ganz gewöhnliche SteamCMD-Installation mit einem Java-Prozess darunter, und die zwei Dinge, über die Leute stolpern, sind nicht obskur: ein Speicher-Flag, das tief in einem Shell-Skript vergraben ist, und eine Anzahl an UDP-Ports, die davon abhängt, wie viele Freunde du tatsächlich reinlässt.
The dedicated server is its own Steam application, separate from the game you play:Der Dedicated Server ist eine eigenständige Steam-Anwendung, getrennt vom Spiel, das du selbst spielst:
Under the hood it's a bundled Java runtime running the same simulation code as the client, just headless. The first time you launch it, it writes a set of config files under ~/Zomboid/Server/ on whichever account runs it — that ~/Zomboid folder, not the install directory, is where everything that matters actually lives.Unter der Haube steckt eine mitgelieferte Java-Laufzeitumgebung, die denselben Simulationscode wie der Client ausführt, nur eben headless. Beim ersten Start schreibt sie einen Satz Konfigurationsdateien unter ~/Zomboid/Server/ auf den Account, unter dem sie läuft — dieser Ordner ~/Zomboid, nicht das Installationsverzeichnis, ist der Ort, an dem tatsächlich alles Wichtige liegt.
There are two real numbers here, not a curve you have to guess at. 2 GiB is a realistic floor for a few friends running the game vanilla, no Workshop mods. 4 GiB is what a modded server for 8 to 16 players actually wants — mods add scripted items, extra zombie AI, and map changes that all sit in heap alongside the base simulation, and that adds up faster than the player count alone suggests.Es gibt hier zwei reale Zahlen, keine Kurve, die du erraten musst. 2 GiB sind eine realistische Untergrenze für ein paar Freunde, die das Spiel vanilla spielen, ohne Workshop-Mods. 4 GiB ist das, was ein gemoddeter Server für 8 bis 16 Spieler tatsächlich braucht — Mods bringen skriptgesteuerte Items, zusätzliche Zombie-KI und Kartenänderungen mit, die alle zusammen mit der Basissimulation im Heap liegen, und das summiert sich schneller, als die Spielerzahl allein vermuten lässt.
Map that onto tiers honestly rather than by price: Standard (2 vCPU, 4 GiB RAM, 80 GB disk) is the one this guide is built around, and it's the right floor once you're running Workshop mods or pushing toward the upper end of that player range. Basic (2 vCPU, 2 GiB RAM, 50 GB disk) is genuinely fine for a small vanilla group — don't pay for headroom you're not using yet. What this guide will not do is hand you a player cap or a frames-per-tick number beyond those two tiers; anyone promising a precise number without knowing your mod list and your world's age is guessing.Bilde das ehrlich auf Tarife ab statt auf den Preis: Standard (2 vCPU, 4 GiB RAM, 80 GB Speicher) ist der Tarif, um den diese Anleitung herum aufgebaut ist, und er ist die richtige Untergrenze, sobald du Workshop-Mods laufen lässt oder dich Richtung oberes Ende dieser Spielerspanne bewegst. Basic (2 vCPU, 2 GiB RAM, 50 GB Speicher) ist für eine kleine Vanilla-Gruppe wirklich völlig in Ordnung — zahl nicht für Spielraum, den du noch nicht brauchst. Was diese Anleitung nicht tun wird: dir über diese beiden Tarife hinaus eine Spielerobergrenze oder eine Frames-per-Tick-Zahl nennen; wer dir eine präzise Zahl verspricht, ohne deine Modliste und das Alter deiner Welt zu kennen, rät nur.
Deploy an Ubuntu LTS image, then do the security basics before anything is exposed to the internet: a non-root user, your SSH key on it, password login switched off, a firewall that defaults to deny. We wrote those up as connect to your VPS over SSH and secure your VPS.Setze ein Ubuntu-LTS-Image auf, und erledige dann die Sicherheitsgrundlagen, bevor irgendetwas dem Internet ausgesetzt ist: einen Non-Root-User, deinen SSH-Key darauf, Passwort-Login abgeschaltet, eine Firewall, die standardmäßig blockiert. Wir haben das aufgeschrieben als Über SSH mit deinem VPS verbinden und Sichere deinen VPS.
SteamCMD is a 32-bit binary and needs the matching runtime even on a 64-bit box:SteamCMD ist eine 32-Bit-Binary und braucht die passende Laufzeitumgebung, selbst auf einer 64-Bit-Maschine:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 curl tar
sudo useradd -m -s /bin/bash zomboid
Never run the server as root or as your own login. Everything from here happens as the zomboid user, whose only privilege is writing to its own home directory.Betreibe den Server niemals als root oder unter deinem eigenen Login. Alles von hier an läuft als Benutzer zomboid, dessen einziges Privileg das Schreiben in sein eigenes Home-Verzeichnis ist.
sudo -u zomboid -i
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sSL https://media.steampowered.com/client/installer/steamcmd_linux.tar.gz | tar zxf -
./steamcmd.sh +force_install_dir /home/zomboid/server \
+login anonymous \
+app_update 380870 validate \
+quit
That same command is how you update the server later. Rerun it after every game patch — a client on a newer build will refuse to connect to an older server, and the version mismatch message is the first thing your players will report.Derselbe Befehl ist auch der Weg, den Server später zu aktualisieren. Führe ihn nach jedem Spiel-Patch erneut aus — ein Client auf einem neueren Build verweigert die Verbindung zu einem älteren Server, und die Meldung über die Versionsdiskrepanz ist das Erste, was dir deine Spieler melden werden.
Run the server interactively the first time, before you touch systemd at all:Starte den Server beim ersten Mal interaktiv, bevor du überhaupt systemd anfasst:
cd /home/zomboid/server
chmod +x start-server.sh
./start-server.sh
Steam depots don't always preserve the executable bit on extraction, so the chmod is not optional. On this first run the console prompts you directly for a username and password for the server's admin account — answer it there. There's no panel to reset this from later, so write both down somewhere before you move on. Once it finishes generating config, stop it with Ctrl+C and open ~/Zomboid/Server/servertest.ini (the name before .ini matches whatever -servername you passed, servertest by default).Steam-Depots bewahren beim Entpacken nicht immer das Ausführungs-Bit, das chmod ist also nicht optional. Bei diesem ersten Durchlauf fragt dich die Konsole direkt nach Benutzername und Passwort für den Admin-Account des Servers — beantworte das dort. Es gibt kein Panel, um das später zurückzusetzen, schreib dir also beides irgendwo auf, bevor du weitermachst. Sobald die Konfiguration fertig generiert ist, stoppe mit Ctrl+C und öffne ~/Zomboid/Server/servertest.ini (der Name vor .ini entspricht dem -servername, den du übergeben hast, standardmäßig servertest).
The setting that actually decides whether your VPS copes is not in that ini file at all — it's a JVM heap flag inside start-server.sh itself. Open the script and find the -Xmx value on the Java invocation line; that's the ceiling on how much memory the simulation is allowed to use. Set it to match the box with headroom left for the OS, SteamCMD, and anything else running — on a 4 GiB Standard instance, something in the region of 3 GiB of heap, not the full 4, is the sane target. Leave it at whatever the script shipped with and a modded, populated world is what eventually runs out of headroom and starts stuttering or falling over, not gracefully.Die Einstellung, die tatsächlich entscheidet, ob dein VPS zurechtkommt, steht gar nicht in dieser ini-Datei — es ist ein JVM-Heap-Flag innerhalb von start-server.sh selbst. Öffne das Skript und such nach dem -Xmx-Wert in der Java-Aufrufzeile; das ist die Obergrenze, wie viel Speicher die Simulation nutzen darf. Setze ihn passend zur Maschine, mit Spielraum für das Betriebssystem, SteamCMD und alles andere, was läuft — auf einer 4-GiB-Standard-Instanz liegt der sinnvolle Zielwert bei etwa 3 GiB Heap, nicht bei den vollen 4. Lässt du ihn bei dem stehen, womit das Skript ausgeliefert wurde, dann ist es eine gemoddete, gut besuchte Welt, der irgendwann der Spielraum ausgeht und die zu stottern beginnt oder abstürzt, und zwar nicht sanft.
Two UDP ports are documented and fixed: 16261 is DefaultPort in servertest.ini, the main game port players connect through via Steam. 16262 is the direct-connect port, used when a player connects by raw IP instead of through the Steam server browser.Zwei UDP-Ports sind dokumentiert und fest: 16261 ist DefaultPort in servertest.ini, der Haupt-Spielport, über den Spieler via Steam verbinden. 16262 ist der Direct-Connect-Port, der genutzt wird, wenn ein Spieler per roher IP statt über den Steam-Serverbrowser verbindet.
sudo ufw allow 16261:16262/udp
What catches people is that this isn't the whole story once more than a couple of players are connected. The server also claims additional UDP ports above the base port as clients join, scaled to the MaxPlayers= value you set in servertest.ini — so a server configured for a full lobby needs more than just those two ports forwarded, not because the documentation is wrong but because the two fixed ports are the floor, not the ceiling. Rather than guess at the exact range, watch the server's own startup log in journalctl the first time you bring it up with real players connecting — it prints what it actually binds — and forward that set, not just 16261 and 16262.Was Leute überrascht: Das ist nicht die ganze Geschichte, sobald mehr als ein paar Spieler verbunden sind. Der Server beansprucht auch zusätzliche UDP-Ports oberhalb des Basisports, wenn Clients beitreten, skaliert nach dem MaxPlayers=-Wert, den du in servertest.ini gesetzt hast — ein Server, der für eine volle Lobby konfiguriert ist, braucht also mehr als nur diese beiden weitergeleiteten Ports, nicht weil die Dokumentation falsch ist, sondern weil die zwei festen Ports die Untergrenze sind, nicht die Obergrenze. Rate nicht am genauen Bereich herum, sondern beobachte beim ersten Mal, wenn echte Spieler verbinden, das eigene Start-Log des Servers in journalctl — es zeigt, was tatsächlich gebunden wird — und leite diesen Satz weiter, nicht nur 16261 und 16262.
If your VPS gives you NAT IPv4 rather than an address of your own, you get a small, fixed set of forwarded ports rather than the freedom to open anything you like, and a per-player UDP range is exactly the kind of thing that doesn't fit a short list. Read NAT IPv4 vs a dedicated IP and NAT IPv4, ports and forwarding before you commit to a player count, and if NAT IPv4 genuinely won't cover it, a dedicated IPv4 is available on request by e-mail rather than as a self-service add-on.Gibt dir dein VPS NAT-IPv4 statt einer eigenen Adresse, bekommst du eine kleine, feste Menge weitergeleiteter Ports statt der Freiheit, alles zu öffnen, was du willst, und ein Pro-Spieler-UDP-Bereich ist genau die Art von Sache, die nicht in eine kurze Liste passt. Lies NAT IPv4 vs. dedizierte IP und NAT IPv4, Ports und Weiterleitung, bevor du dich auf eine Spielerzahl festlegst, und falls NAT-IPv4 das wirklich nicht abdeckt, ist eine dedizierte IPv4 auf Anfrage per E-Mail verfügbar, nicht als Self-Service-Add-on.
The server expects an interactive console — you type commands like save and quit directly into the terminal it's running in — which doesn't play naturally with a background systemd service. Two ways to get a clean shutdown anyway.Der Server erwartet eine interaktive Konsole — du tippst Befehle wie save und quit direkt in das Terminal, in dem er läuft —, was sich nicht von selbst mit einem systemd-Hintergrunddienst verträgt. Es gibt zwei Wege zu einem sauberen Shutdown trotzdem.
The first is RCON. Set RCONPort= and a non-empty RCONPassword= in servertest.ini, and any client that speaks the Source-style RCON protocol can send quit remotely, which saves the world before the process exits. Keep that port off your forwarded set entirely — it's a remote console into your server, not a game port — and reach it only from the VPS itself or over a VPN.Der erste ist RCON. Setze RCONPort= und ein nicht leeres RCONPassword= in servertest.ini, und jeder Client, der das Source-artige RCON-Protokoll spricht, kann quit aus der Ferne senden, was die Welt speichert, bevor der Prozess beendet wird. Halte diesen Port komplett aus deiner weitergeleiteten Menge heraus — es ist eine Fernkonsole in deinen Server, kein Spielport — und erreiche ihn nur von der VPS selbst oder über ein VPN.
The second is a stdin FIFO, which keeps the console's own commands usable from systemctl:Der zweite Weg ist eine Stdin-FIFO, die die eigenen Befehle der Konsole aus systemctl heraus nutzbar hält:
sudo mkfifo -m 600 /home/zomboid/server/console.fifo
sudo chown zomboid:zomboid /home/zomboid/server/console.fifo
[Unit]
Description=Project Zomboid dedicated server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=zomboid
WorkingDirectory=/home/zomboid/server
ExecStart=/bin/bash -c 'exec tail -f console.fifo | ./start-server.sh'
ExecStop=/bin/sh -c 'echo quit > /home/zomboid/server/console.fifo'
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
[Install]
WantedBy=multi-user.target
tail -f keeps the pipe open across multiple writes, so echo quit > on stop reaches the running console exactly as if you'd typed it. TimeoutStopSec=120 gives the world time to finish saving before systemd gives up and sends SIGKILL, which is the one thing you don't want mid-write.tail -f hält die Pipe über mehrere Schreibvorgänge hinweg offen, sodass echo quit > beim Stoppen die laufende Konsole genauso erreicht, als hättest du es selbst eingetippt. TimeoutStopSec=120 gibt der Welt Zeit, das Speichern fertigzustellen, bevor systemd aufgibt und SIGKILL schickt — genau das, was du mitten im Schreibvorgang nicht willst.
sudo systemctl enable --now zomboid
journalctl -u zomboid -f
Worlds live under ~/Zomboid/Saves/Multiplayer/<servername>/ — that's the whole game state: map changes, containers, everything your players have built. Copy that directory somewhere off the box on a schedule; back up your VPS covers what off-machine backup actually looks like, and what it does not cover by default anywhere.Welten liegen unter ~/Zomboid/Saves/Multiplayer/<servername>/ — das ist der gesamte Spielzustand: Kartenänderungen, Container, alles, was deine Spieler gebaut haben. Kopiere dieses Verzeichnis nach Zeitplan irgendwohin weg von der Maschine; Backup deines VPS beschreibt, wie ein Backup abseits der Maschine tatsächlich aussieht, und was standardmäßig nirgendwo abgedeckt ist.
Steam Workshop mods go into servertest.ini as two separate lines, and this is the detail that bites people the first time they add a mod:Steam-Workshop-Mods kommen als zwei getrennte Zeilen in servertest.ini, und das ist das Detail, das Leute beim ersten hinzugefügten Mod beißt:
WorkshopItems=2589775223;2500416451
Mods=ModID1;ModID2
WorkshopItems= is a semicolon-separated list of the numeric Workshop IDs from each mod's Steam page. Mods= is a different identifier — the mod's own internal Mod ID, which is not the same string and is usually listed in the mod's Workshop description or its mod.info file. Miss one and the mod either doesn't load or doesn't sync to the Workshop item at all, with no obvious error pointing at which line is wrong. Add both for every mod, restart the server so it pulls the Workshop content, and check the startup log for a load confirmation before you tell anyone to connect.WorkshopItems= ist eine mit Semikolon getrennte Liste der numerischen Workshop-IDs von der Steam-Seite jedes Mods. Mods= ist ein anderer Identifikator — die eigene interne Mod-ID des Mods, die nicht derselbe String ist und meist in der Workshop-Beschreibung des Mods oder in dessen mod.info-Datei steht. Fehlt eine der beiden, lädt der Mod entweder nicht oder synchronisiert sich gar nicht erst mit dem Workshop-Item, ohne offensichtlichen Fehler, der auf die falsche Zeile hinweist. Trage beide für jeden Mod ein, starte den Server neu, damit er den Workshop-Inhalt zieht, und prüfe das Start-Log auf eine Lade-Bestätigung, bevor du irgendjemandem sagst, er solle sich verbinden.
Mods raise the RAM floor from Step 2 further than the count suggests — a handful of small mods is nothing, but anything that adds new zombie types, large map regions, or heavy scripted content pushes you toward the top of the 4 GiB tier fast. Watch actual usage after the first real session rather than assuming the number from a mod's description page.Mods heben die RAM-Untergrenze aus Schritt 2 weiter an, als die Anzahl vermuten lässt — eine Handvoll kleiner Mods ist nichts, aber alles, was neue Zombie-Typen, große Kartenregionen oder schwere skriptgesteuerte Inhalte hinzufügt, drängt dich schnell Richtung oberes Ende des 4-GiB-Tarifs. Beobachte die tatsächliche Nutzung nach der ersten echten Session, statt die Zahl von der Beschreibungsseite eines Mods anzunehmen.
Full disclosure: this is what we sell. A modded server for 8 to 16 players wants the RAM headroom of Standard (2 vCPU, 4 GiB RAM, 80 GB disk); a few friends running vanilla fit Basic (2 vCPU, 2 GiB RAM, 50 GB disk) comfortably, and the move up is about heap room, not player count alone.Zur vollen Transparenz: Das ist, was wir verkaufen. Ein gemoddeter Server für 8 bis 16 Spieler will den RAM-Spielraum von Standard (2 vCPU, 4 GiB RAM, 80 GB Speicher); ein paar Freunde, die vanilla spielen, passen bequem in Basic (2 vCPU, 2 GiB RAM, 50 GB Speicher), und der Umstieg nach oben ist eine Frage des Heap-Spielraums, nicht allein der Spielerzahl.
Linux KVM VPS — EUR 4.99 to EUR 59.99 a month, on our own single-tenant bare metal in Dallas, TX and Charlotte, NC. Full hardware virtualisation (KVM), your own kernel, full root. Six tiers, vps-starter to vps-ultra. Starter is 1 vCPU, 1 GiB RAM, 25 GB disk.Linux-KVM-VPS — 4,99 bis 59,99 EUR im Monat, auf unserer eigenen Single-Tenant-Bare-Metal-Hardware in Dallas, TX und Charlotte, NC. Vollständige Hardware-Virtualisierung (KVM), eigener Kernel, volles Root. Sechs Tarife, vps-starter bis vps-ultra. Starter hat 1 vCPU, 1 GiB RAM, 25 GB Speicher.
You order in the shop, pay by card (Stripe) or SEPA bank transfer, and your login details are e-mailed to you once the service is set up. Support is e-mail, run by one person, with no guaranteed response time. All prices are final totals under the German small-business rule (§19 UStG); no VAT is added or shown.Du bestellst im Shop, zahlst per Karte (Stripe) oder SEPA-Überweisung, und deine Zugangsdaten werden dir per E-Mail zugeschickt, sobald der Dienst eingerichtet ist. Support läuft per E-Mail, von einer einzelnen Person betrieben, ohne garantierte Reaktionszeit. Alle Preise sind Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer ausgewiesen.
Order vps-standard → · Linux KVM VPS overviewvps-standard bestellen → · Übersicht Linux-KVM-VPS
Written by the person who runs overnight.host: a small, honest hosting company on dedicated bare metal — Linux VPS, game servers, web hosting. Live status at up.overnight.host.Geschrieben von der Person, die overnight.host betreibt: ein kleines, ehrliches Hosting-Unternehmen auf dedizierter Bare-Metal-Hardware — Linux-VPS, Gameserver, Webhosting. Live-Status unter up.overnight.host.
2 GiB is a realistic floor for a few friends on a vanilla server. 4 GiB is what a modded server for 8 to 16 players wants, and it climbs from there depending on how heavy the mod list is — there's no single number beyond those two honest tiers, so watch memory use after your first real session rather than trusting a mod's own description.2 GiB sind eine realistische Untergrenze für ein paar Freunde auf einem Vanilla-Server. 4 GiB ist das, was ein gemoddeter Server für 8 bis 16 Spieler will, und es steigt von dort an weiter, je nachdem wie schwer die Modliste ist — es gibt keine einzelne Zahl über diese beiden ehrlichen Tarife hinaus, beobachte also die Speichernutzung nach deiner ersten echten Session, statt der eigenen Beschreibung eines Mods zu vertrauen.
16261 and 16262, both UDP — the main game port and the direct-connect port, respectively. Once several players are connected, the server also claims additional UDP ports above the base one, scaled to MaxPlayers=; check the startup log for the exact set it binds rather than assuming only the two documented ports cover a full lobby.16261 und 16262, beide UDP — der Haupt-Spielport beziehungsweise der Direct-Connect-Port. Sobald mehrere Spieler verbunden sind, beansprucht der Server auch zusätzliche UDP-Ports oberhalb des Basisports, skaliert nach MaxPlayers=; prüfe das Start-Log auf die genaue Menge, die gebunden wird, statt anzunehmen, dass nur die zwei dokumentierten Ports eine volle Lobby abdecken.
Set both WorkshopItems= (the numeric Steam Workshop IDs, semicolon-separated) and Mods= (the mod's own internal Mod ID, a different string) in servertest.ini, then restart. Missing either line for a given mod is the most common reason a mod silently fails to load.Setze sowohl WorkshopItems= (die numerischen Steam-Workshop-IDs, durch Semikolon getrennt) als auch Mods= (die eigene interne Mod-ID des Mods, ein anderer String) in servertest.ini, dann neu starten. Eine der beiden Zeilen für einen bestimmten Mod zu vergessen, ist der häufigste Grund, warum ein Mod still und leise nicht lädt.
Send quit through the console rather than killing the process — either over RCON once you've set an RCONPort= and RCONPassword=, or through a stdin FIFO wired into a systemd unit so systemctl stop can deliver the same command. Either way, give it enough TimeoutStopSec to actually finish the save before systemd escalates to SIGKILL.Sende quit über die Konsole, statt den Prozess zu killen — entweder über RCON, sobald du RCONPort= und RCONPassword= gesetzt hast, oder über eine Stdin-FIFO, die in eine systemd-Unit verdrahtet ist, sodass systemctl stop denselben Befehl zustellen kann. So oder so, gib genug TimeoutStopSec, damit das Speichern tatsächlich fertig wird, bevor systemd zu SIGKILL eskaliert.
Prices are final totals; no VAT is shown (§19 UStG). Need something the shop does not list? Email us for a written offer.Alle Preise sind Endpreise ohne ausgewiesene USt. (§19 UStG). Du brauchst etwas, das nicht im Shop steht? Schreib uns für ein schriftliches Angebot.
Order now →Jetzt bestellen → Request a custom configIndividuelle Konfiguration anfragen