HomeStart / GuidesAnleitungen / Core Keeper dedicated server on a Linux VPS/ Core Keeper Dedicated Server auf einem Linux-VPS

Running a Core Keeper dedicated server on a Linux VPS (SteamCMD, Game ID, systemd)Einen dedizierten Core-Keeper-Server auf einem Linux-VPS betreiben (SteamCMD, Game ID, systemd)

Core Keeper's dedicated server is a free, native Linux SteamCMD app that most guides skim past the one part that actually confuses people: by default nobody connects to an address at all, they join a Game ID, and understanding why changes how you plan the rest of the setup.Core Keepers dedizierter Server ist eine kostenlose, native Linux-SteamCMD-App, bei der die meisten Anleitungen genau an dem einen Punkt vorbeigehen, der wirklich für Verwirrung sorgt: Standardmäßig verbindet sich niemand mit einer Adresse, sondern alle treten einer Game ID bei — und zu verstehen, warum, bestimmt, wie du den Rest des Setups planst.

What you are installingWas du installierst

The dedicated server is a separate, free Steam application from the game itself:Der dedizierte Server ist eine eigenständige, kostenlose Steam-Anwendung, getrennt vom Spiel selbst:

Unlike a few of its contemporaries, Core Keeper ships an actual native Linux build of the server. There is no Wine, no Proton-GE fork, no community Docker image standing in for a missing binary — SteamCMD pulls a Linux executable and a launch script, and that is the whole install.Anders als einige seiner Zeitgenossen liefert Core Keeper einen echten nativen Linux-Build des Servers aus. Es gibt kein Wine, keinen Proton-GE-Fork, kein Community-Docker-Image, das eine fehlende Binary ersetzt — SteamCMD lädt eine Linux-ausführbare Datei und ein Startskript herunter, und das ist die ganze Installation.

Sizing it honestlyEhrlich dimensionieren

Core Keeper's server is comparatively light. Memory use tracks how much of the map has been mined and built on, not player count, and it climbs slowly — a fresh world with two or three players sits well within a couple of gigabytes, and a world that has been open for months of steady play grows from there rather than jumping.Core Keepers Server ist vergleichsweise leichtgewichtig. Der Speicherverbrauch folgt wie viel von der Karte abgebaut und bebaut wurde, nicht der Spielerzahl, und er steigt langsam — eine frische Welt mit zwei oder drei Spielern liegt bequem innerhalb weniger Gigabyte, und eine Welt, die seit Monaten stetig gespielt wird, wächst von dort aus weiter, statt zu springen.

Basic (2 vCPU / 2 GiB / 50 GB) is a realistic floor for a small friends' server. It is not a number we can guarantee holds forever: a world that keeps getting bigger, more players joining at once, or a group that tunnels through most of the map in a single sitting will all push memory higher than a two-person world three weeks old. Watch actual usage after a few sessions and move up to Standard (2 vCPU / 4 GiB / 80 GB) if it is creeping past what Basic gives you, rather than guessing up front. The 50 GB disk on Basic is generous for this workload — world saves are small text-and-binary state, not the multi-gigabyte terrain snapshots some other survival games write.Basic (2 vCPU / 2 GiB / 50 GB) ist eine realistische Untergrenze für einen kleinen Server unter Freunden. Das ist keine Zahl, die wir für alle Zeit garantieren können: Eine Welt, die immer größer wird, mehr Spieler, die gleichzeitig beitreten, oder eine Gruppe, die sich in einer einzigen Sitzung durch den Großteil der Karte gräbt, treiben den Speicherverbrauch alle über den einer drei Wochen alten Zwei-Personen-Welt hinaus. Beobachte den tatsächlichen Verbrauch nach ein paar Sitzungen und steig auf Standard (2 vCPU / 4 GiB / 80 GB) um, falls er über das hinauswächst, was Basic bietet, statt vorab zu raten. Die 50-GB-Festplatte bei Basic ist für diese Last großzügig bemessen — Welt-Speicherstände sind ein kleiner Zustand aus Text und Binärdaten, nicht die mehrere Gigabyte großen Terrain-Snapshots, die manch andere Survival-Spiele schreiben.

CPU-wise, treat it the same as most single-world game servers: a couple of steady vCPUs beat many slow ones, since the simulation does not spread itself thin across cores.Bei der CPU gilt dasselbe wie bei den meisten Ein-Welt-Gameservern: ein paar gleichmäßig starke vCPUs schlagen viele langsame, da sich die Simulation nicht dünn über viele Kerne verteilt.

Step 1: the machineSchritt 1: die Maschine

Deploy an Ubuntu 24.04 LTS VPS and do the security basics before it is reachable from the internet: a non-root user, your SSH key on it, password login switched off, a firewall that defaults to deny. connect to your VPS over SSH and secure your VPS cover that.Setze einen Ubuntu-24.04-LTS-VPS auf und erledige die grundlegende Absicherung, bevor er aus dem Internet erreichbar ist: einen Non-Root-User, deinen SSH-Key darauf, Passwort-Login deaktiviert, eine Firewall, die standardmäßig blockiert. Über SSH mit deinem VPS verbinden und Sichere deinen VPS decken das ab.

sudo apt update
sudo apt install -y lib32gcc-s1 curl tar
sudo useradd -m -s /bin/bash corekeeper

SteamCMD itself is a 32-bit binary even on a 64-bit host, so the lib32gcc-s1 compatibility package has to be there before it will run, even though the Core Keeper server binary it downloads is 64-bit native.SteamCMD selbst ist eine 32-Bit-Binary, auch auf einem 64-Bit-Host, deshalb muss das Kompatibilitätspaket lib32gcc-s1 vorhanden sein, bevor es läuft — obwohl die Core-Keeper-Server-Binary, die es herunterlädt, nativ 64-Bit ist.

Step 2: install with SteamCMDSchritt 2: Installation mit SteamCMD

Everything below runs as the corekeeper user — never run a game server as root.Alles Folgende läuft als Benutzer corekeeper — betreibe einen Gameserver niemals als Root.

sudo -u corekeeper -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/corekeeper/server \
              +login anonymous \
              +app_update 1963720 validate \
              +quit

That produces a run.sh launch script alongside the server binary in /home/corekeeper/server. The same app_update command is also how you patch the server later.Das erzeugt ein Startskript run.sh neben der Server-Binary in /home/corekeeper/server. Mit demselben app_update-Befehl patchst du den Server auch später.

Step 3: the launch script and its flagsSchritt 3: das Startskript und seine Flags

Open run.sh before your first launch rather than running it blind — it sets a handful of values as arguments to the server binary, and editing them there is simpler than remembering a long command line by hand every time. The ones worth knowing:Öffne run.sh, bevor du es zum ersten Mal startest, statt es blind auszuführen — es setzt eine Handvoll Werte als Argumente für die Server-Binary, und sie dort zu bearbeiten ist einfacher, als sich jedes Mal eine lange Kommandozeile von Hand zu merken. Diese solltest du kennen:

Treat the exact flag spelling as something to confirm against the copy of run.sh SteamCMD just gave you rather than against an old forum post — Pugstorm has adjusted small things between updates, and the shipped script is the current source of truth for your installed version. Run it by hand once before wiring up systemd, so a typo surfaces as a readable error instead of a service that silently refuses to start:Verlass dich bei der genauen Schreibweise der Flags auf die Kopie von run.sh, die dir SteamCMD gerade gegeben hat, statt auf einen alten Forenbeitrag — Pugstorm hat zwischen Updates kleine Dinge angepasst, und das mitgelieferte Skript ist die aktuelle Quelle der Wahrheit für deine installierte Version. Führe es einmal von Hand aus, bevor du systemd einrichtest, damit ein Tippfehler als lesbare Fehlermeldung auftaucht statt als Dienst, der still den Start verweigert:

cd /home/corekeeper/server
./run.sh

Watch the console output on that first run — it is where the detail in the next section shows up.Beobachte die Konsolenausgabe bei diesem ersten Lauf — dort taucht das Detail aus dem nächsten Abschnitt auf.

Step 4: the Game ID, and why there is no port to give anyoneSchritt 4: die Game ID, und warum es keinen Port gibt, den du weitergeben kannst

The console prints a Game ID once the world has finished loading. That ID, not an IP address, is what your friends type into the game's "Join Game" screen. By default the server registers itself over Steam's own relay networking, the same peer-routing layer Steam uses for online matches generally, so there is no port to open and no address to hand out at all.Die Konsole gibt eine Game ID aus, sobald die Welt fertig geladen ist. Diese ID, nicht eine IP-Adresse, ist das, was deine Freunde in den „Join Game“-Bildschirm des Spiels eingeben. Standardmäßig registriert sich der Server über Steams eigenes Relay-Networking, dieselbe Peer-Routing-Schicht, die Steam allgemein für Online-Matches nutzt, sodass es überhaupt keinen Port zu öffnen und keine Adresse weiterzugeben gibt.

That is convenient right up until you want a stable, always-the-same way in, because the Game ID is tied to the running Steam session: restart the server and you get a new one. Anyone holding the old ID cannot reconnect with it — they need the fresh value, which means checking it again after every restart rather than relying on what you told them last week. This is the thing that bites later on a server you restart often for updates.Das ist bequem — bis du einen stabilen, immer gleichen Zugang willst, denn die Game ID hängt an der laufenden Steam-Sitzung: Startest du den Server neu, bekommst du eine neue. Wer die alte ID hat, kann sich damit nicht mehr verbinden — er braucht den frischen Wert, das heißt, ihn nach jedem Neustart erneut nachzusehen, statt sich auf das zu verlassen, was du letzte Woche gesagt hast. Das ist der Punkt, der später bei einem Server zuschlägt, den du für Updates häufig neu startest.

If you would rather connect by address than by re-sharing an ID, the launch script also exposes a direct-connect option — typically -port and -ip in current builds, but confirm the exact flag names against your copy of run.sh — that makes the server listen directly instead of only through the relay. That trades the zero-configuration Game ID flow for a normal address-and-port connection, which is also the option to reach for if your group is on a network that blocks Steam's relay traffic outright.Willst du dich lieber per Adresse verbinden als die ID immer wieder neu zu teilen, bietet das Startskript auch eine Direktverbindungs-Option — in aktuellen Builds typischerweise -port und -ip, aber prüfe die genauen Flag-Namen an deiner Kopie von run.sh — die den Server direkt statt nur über das Relay lauschen lässt. Das tauscht den Zero-Configuration-Game-ID-Ablauf gegen eine normale Adresse-und-Port-Verbindung, und ist auch die Option, zu der du greifst, wenn deine Gruppe in einem Netzwerk sitzt, das Steams Relay-Traffic von vornherein blockiert.

Either way, NAT IPv4 vs a dedicated IP and NAT IPv4, ports and forwarding are worth reading before you commit to the direct-connect path: if your VPS gives you NAT IPv4 rather an address of your own, you get a fixed, small set of forwarded ports rather than the ability to pick any number you like, so the port flag has to be set to one your provider actually forwards. The alternative is a dedicated IPv4; on our plans that's arranged by e-mail.So oder so lohnt es sich, NAT IPv4 vs. dedizierte IP und NAT IPv4, Ports und Weiterleitung zu lesen, bevor du dich auf den Direktverbindungs-Weg festlegst: Gibt dir dein VPS NAT-IPv4 statt einer eigenen Adresse, bekommst du eine feste, kleine Auswahl weitergeleiteter Ports statt der Möglichkeit, dir eine beliebige Zahl auszusuchen, also muss das Port-Flag auf einen Port gesetzt werden, den dein Provider tatsächlich weiterleitet. Die Alternative ist eine dedizierte IPv4; bei unseren Tarifen wird das per E-Mail geregelt.

Step 5: systemdSchritt 5: systemd

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

[Service]
Type=simple
User=corekeeper
WorkingDirectory=/home/corekeeper/server
ExecStart=/home/corekeeper/server/run.sh
Restart=on-failure
RestartSec=10
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

Bring it up with sudo systemctl enable --now corekeeper and follow it with journalctl -u corekeeper -f. Because a restart hands out a new Game ID, keep restarts deliberate — an update or a config change, not something a jumpy Restart= policy triggers on its own. Restart=on-failure rather than always is the safer default here for exactly that reason: it comes back after a crash without cycling the ID on every transient hiccup.Starte ihn mit sudo systemctl enable --now corekeeper und beobachte ihn anschließend mit journalctl -u corekeeper -f. Da ein Neustart eine neue Game ID vergibt, solltest du Neustarts bewusst auslösen — als Update oder Konfigurationsänderung, nicht als etwas, das eine nervöse Restart=-Policy von selbst anstößt. Genau deshalb ist Restart=on-failure statt always hier die sicherere Standardeinstellung: Der Dienst kommt nach einem Absturz zurück, ohne die ID bei jeder vorübergehenden Störung zu wechseln.

Step 6: GameID.txt and the world saveSchritt 6: GameID.txt und der Welt-Speicherstand

The server also writes the current Game ID to a file named GameID.txt in the server's install directory, /home/corekeeper/server. That is the more reliable way to read it back for a friend or a script — cat /home/corekeeper/server/GameID.txt beats scrolling back through journalctl output looking for the line that printed it at boot, and it always reflects the value from the current run.Der Server schreibt die aktuelle Game ID außerdem in eine Datei namens GameID.txt im Installationsverzeichnis des Servers, /home/corekeeper/server. Das ist der zuverlässigere Weg, sie für einen Freund oder ein Skript wieder auszulesen — cat /home/corekeeper/server/GameID.txt schlägt das Zurückscrollen durch die journalctl-Ausgabe auf der Suche nach der Zeile, die sie beim Start ausgegeben hat, und es spiegelt immer den Wert des aktuellen Laufs.

The world save itself lives under a Worlds folder inside the same install directory, one subfolder per world name you set in Step 3. Back that folder up whole rather than picking individual files out of it — confirm the exact structure against what actually appears there after your first save, since it is the running server's own layout that matters, not a description of it.Der Welt-Speicherstand selbst liegt in einem Ordner namens Worlds innerhalb desselben Installationsverzeichnisses, ein Unterordner pro Weltname, den du in Schritt 3 gesetzt hast. Sichere diesen Ordner als Ganzes, statt einzelne Dateien daraus herauszupicken — prüfe die genaue Struktur an dem, was nach deinem ersten Speichern tatsächlich dort erscheint, denn maßgeblich ist das Layout des laufenden Servers selbst, nicht eine Beschreibung davon.

tar czf ~/corekeeper-backup-$(date +%F).tar.gz -C /home/corekeeper/server Worlds

Copy the resulting archive off the VPS on a schedule. A tarball sitting on the same disk as the world it backs up protects you from nothing if the disk or the machine goes away; back up your VPS covers what an actual off-machine backup looks like and what is not included by default anywhere.Kopiere das entstehende Archiv planmäßig vom VPS herunter. Ein Tarball, der auf derselben Platte liegt wie die Welt, die er sichert, schützt dich vor nichts, falls die Platte oder die Maschine verschwindet; Backup deines VPS beschreibt, wie ein echtes Backup abseits der Maschine aussieht und was standardmäßig nirgends enthalten ist.

UpdatesUpdates

sudo systemctl stop corekeeper
sudo -u corekeeper /home/corekeeper/steamcmd/steamcmd.sh \
  +force_install_dir /home/corekeeper/server \
  +login anonymous \
  +app_update 1963720 validate \
  +quit
sudo systemctl start corekeeper

Run that after every game patch — a client on a newer build cannot join an older server. Stop the service first rather than updating against a live process: validate can rewrite binaries and files the running server still has open, and an update landing mid-session risks partial state. Since a restart means a new Game ID either way, batching an update with your next planned restart rather than patching mid-session is the easy way to avoid re-sending the code twice in one evening.Führe das nach jedem Spiel-Patch aus — ein Client auf einem neueren Build kann keinem älteren Server beitreten. Stoppe den Dienst zuerst, statt gegen einen laufenden Prozess zu aktualisieren: validate kann Binaries und Dateien überschreiben, die der laufende Server noch geöffnet hat, und ein Update, das mitten in einer Sitzung landet, riskiert einen inkonsistenten Zustand. Da ein Neustart ohnehin eine neue Game ID bedeutet, bündelst du ein Update am einfachsten mit deinem nächsten ohnehin geplanten Neustart, statt mitten in einer Sitzung zu patchen — so verschickst du den Code nicht zweimal an einem Abend.

On overnight.hostBei overnight.host

Full disclosure: this is what we sell. Basic (2 vCPU / 2 GiB / 50 GB) is a comfortable floor for a friends' Core Keeper world, since the server's memory use tracks explored map area and climbs slowly rather than spiking; move up to Standard (2 vCPU / 4 GiB / 80 GB) once the world has been open for months or you are pushing well past a handful of regular players.Zur vollen Transparenz: Das ist, was wir verkaufen. Basic (2 vCPU / 2 GiB / 50 GB) ist eine komfortable Untergrenze für eine Core-Keeper-Welt unter Freunden, da der Speicherverbrauch des Servers der erkundeten Kartenfläche folgt und langsam steigt statt zu springen; steig auf Standard (2 vCPU / 4 GiB / 80 GB) um, sobald die Welt seit Monaten offen ist oder du deutlich über eine Handvoll regelmäßiger Spieler hinausgehst.

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 Festplatte.

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-basic → · Linux KVM VPS overviewvps-basic 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.

Technical guidance is informational. Plans, specifications and final prices are listed in the shop and can be ordered directly; VPS, game server, web hosting, one-click app and automation plans are provisioned automatically after payment. Custom configurations are still arranged by e-mail.Technische Hinweise dienen der Information. Pläne, Spezifikationen und Endpreise stehen im Shop und können direkt bestellt werden; VPS-, Gameserver-, Webhosting-, One-Click-App- und Automatisierungs-Pläne werden nach der Zahlung automatisch bereitgestellt. Sonderkonfigurationen werden weiterhin per E-Mail vereinbart.

FAQFAQ

How much RAM does a Core Keeper server need?Wie viel RAM braucht ein Core-Keeper-Server?

Basic's 2 GiB is a workable floor for a small friends' world. Usage tracks how much of the map has been explored and built on, growing slowly rather than spiking, so budget more once the world is old or the group is larger than a handful — there is no fixed number that fits every world.Basics 2 GiB sind eine brauchbare Untergrenze für eine kleine Welt unter Freunden. Der Verbrauch folgt, wie viel von der Karte erkundet und bebaut wurde, wächst langsam statt zu springen — plane also mehr ein, sobald die Welt alt ist oder die Gruppe größer als eine Handvoll ist. Es gibt keine feste Zahl, die für jede Welt passt.

How do my friends actually connect?Wie verbinden sich meine Freunde tatsächlich?

By default, with the Game ID the server prints to its console and writes to GameID.txt — they enter it on the game's join screen, and Steam's relay networking handles the connection with no port forwarding needed. Set the direct-connect flags (-port and -ip in current builds — confirm against your copy of run.sh) instead if you want a stable address-based connection.Standardmäßig mit der Game ID, die der Server auf seiner Konsole ausgibt und in GameID.txt schreibt — sie geben sie auf dem Join-Bildschirm des Spiels ein, und Steams Relay-Networking übernimmt die Verbindung, ganz ohne Port-Forwarding. Setze stattdessen die Direktverbindungs-Flags (-port und -ip in aktuellen Builds — prüfe das an deiner Kopie von run.sh), wenn du eine stabile, adressbasierte Verbindung willst.

Why did my Game ID stop working?Warum funktioniert meine Game ID nicht mehr?

Because the server restarted. The ID is tied to the live Steam session, so a crash, an update, or a manual restart all hand out a new one — check GameID.txt again rather than reusing the old value.Weil der Server neu gestartet ist. Die ID hängt an der laufenden Steam-Sitzung, also vergeben ein Absturz, ein Update oder ein manueller Neustart alle eine neue — sieh erneut in GameID.txt nach, statt den alten Wert weiterzuverwenden.

Do I need to own Core Keeper to run the dedicated server?Muss ich Core Keeper besitzen, um den dedizierten Server zu betreiben?

No. It is a separate, free Steam application (app ID 1963720) that installs anonymously through SteamCMD. You do need the game itself to actually play, on a different account or the same one.Nein. Es ist eine eigenständige, kostenlose Steam-Anwendung (App-ID 1963720), die sich anonym über SteamCMD installiert. Um tatsächlich zu spielen, brauchst du das Spiel selbst schon — auf einem anderen Account oder demselben.

Is there a maximum player count I can rely on?Gibt es eine maximale Spielerzahl, auf die ich mich verlassen kann?

The launch script's max-players setting is yours to raise, but Pugstorm does not publish a guaranteed player count for the dedicated server beyond what the game supports normally, and performance at a high count depends on your world and your VPS as much as the number itself. Size the machine for the group you actually have, and watch it after raising the cap rather than assuming it will hold.Die Max-Players-Einstellung im Startskript kannst du selbst erhöhen, aber Pugstorm veröffentlicht keine garantierte Spielerzahl für den dedizierten Server über das hinaus, was das Spiel normal unterstützt, und die Performance bei einer hohen Zahl hängt genauso von deiner Welt und deinem VPS ab wie von der Zahl selbst. Dimensioniere die Maschine für die Gruppe, die du tatsächlich hast, und beobachte sie, nachdem du das Limit angehoben hast, statt anzunehmen, dass es hält.

Ready to order?Bereit zu bestellen?

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