SoVis Games
EN /

Palworld Dedicated Server: Linux + Docker Setup for 1.0

Two production-ready paths for hosting a Palworld 1.0 dedicated server: SteamCMD on a Linux VPS (raw control, smallest footprint) and Docker Compose on Linux/Windows/macOS (easiest ops, automatic updates). Covers port forwarding, server settings, save migration, and backups.

Freshness Written against the Palworld 1.0.2 patch (verified live on 2026-07-30). SteamCMD AppID `2394010` is for the dedicated server build; the client AppID is `1623730`. Multiple community-maintained Docker projects exist (see Sources) — pick one and pin to a specific image tag rather than running `:latest` in production.

TL;DR: Two paths. (A) SteamCMD on Linux VPS — best for full control and smallest footprint. (B) Docker Compose — easiest ops, automatic updates, works on Linux / Windows / macOS. Either way: open UDP port 8211 on your firewall, set a strong AdminPassword, and back up Saved/SaveGames/ before every patch. AppID 2394010 is the dedicated server; the client AppID is 1623730.

This guide sits alongside Getting Started and Breeding & Condenser Guide — if you’re hosting for a small friend group who wants to long-term breed Pals, this is the setup you need.


0. Before you start

You’ll need:

ResourceMinimumRecommended for 8+ players
CPU4 cores6–8 cores, high frequency
RAM8 GB (16 GB for >4 players)16 GB + 2 GB / player
Storage30 GB SSD50 GB+ NVMe SSD
NetworkStable upstream 10 Mbps+100 Mbps+ symmetric, low latency
OSUbuntu 22.04 LTS (or any modern Linux) / Windows 10+ / macOS 12+Ubuntu 22.04 LTS server, headless
Public IP or port-forwarded routerYesYes

The server build uses ~2 GB RAM per concurrent player. Plan headroom accordingly.


1. Choose your path

Path A: SteamCMD on Linux VPS

Best for: full control, smallest resource footprint, “I want to understand every byte.”

Path B: Docker Compose

Best for: easy updates, declarative config, reproducible deployments, “I want it to just work.”

If you’ve never run a game server before, start with Path B. You can migrate to Path A later if you need more control.


2. Path A: SteamCMD on Linux VPS

This is the official Pocketpair-supported flow.

Step 1: Install SteamCMD

Ubuntu / Debian:

sudo apt update
sudo apt install -y software-properties-common
sudo dpkg --add-architecture i386
sudo add-apt-repository multiverse
sudo apt update
sudo apt install -y steamcmd

If the apt steamcmd package is unavailable in your distro, use Valve’s official install method: https://developer.valvesoftware.com/wiki/SteamCMD#Linux.

Step 2: Create a non-root user for the server

sudo useradd -m -s /bin/bash palworld
sudo passwd palworld
sudo -u palworld -i

Common pitfall: running the server as root. If the server is compromised, the attacker has root. Always use a dedicated unprivileged user.

Step 3: Install / update the dedicated server

steamcmd +login anonymous +app_update 2394010 validate +quit

This downloads the server build to ~/Steam/steamapps/common/PalServer/. The first run takes a few minutes; subsequent runs are quick incremental updates.

Step 4: First launch to generate config

cd ~/Steam/steamapps/common/PalServer
./PalServer.sh

The first run creates Pal/Saved/Config/LinuxServer/PalWorldSettings.ini. Stop the server (Ctrl+C), edit the file, then restart.

Step 5: Configure

PalWorldSettings.ini controls everything. Key settings:

[/Script/Pal.PalGameWorldOptions]
ServerName=My Palworld Server
ServerDescription=Hosted on a t3.medium
AdminPassword=CHANGE_ME_TO_A_LONG_RANDOM_STRING
ServerPassword=
PublicPort=8211
PublicIP=
RCONEnabled=True
RCONPort=25575
Region=eu
bEnableInvaderEnemy=True
bEnableFastTravel=True
bIsMultiplayer=True
bIsPvP=False
Difficulty=Normal
DayTimeSpeedRate=1.000000
NightTimeSpeedRate=1.000000
ExpRate=1.000000
PalCaptureRate=1.000000
PalSpawnNumRate=1.000000
PalDamageRate=1.000000
PlayerDamageRate=1.000000
PlayerStomachDecreaseRate=1.000000
PlayerStaminaDecreaseRate=1.000000
PlayerAutoHPRegeneRate=1.000000
PlayerAutoHPRegeneRateInSleep=1.000000
PalEggHatchingTime=72.000000
BuildObjectDamageRate=1.000000
BuildObjectDeteriorationDamageRate=1.000000
CollectionDropRate=1.000000
CollectionObjectHpRate=1.000000
CollectionObjectRespawnSpeedRate=1.000000
EnemyDropItemRate=1.000000
bEnableAimAssistPad=True
bEnableAimAssistKeyboard=False

The 1.0 default config is in DefaultPalWorldSettings.ini — copy it over and edit rather than starting from scratch.

Step 6: Firewall

Open UDP 8211 inbound. If you use UFW:

sudo ufw allow 8211/udp

If you use iptables directly:

sudo iptables -A INPUT -p udp --dport 8211 -j ACCEPT

For cloud providers (AWS, GCP, Azure), also open the port in the security group / network ACL.

Step 7: Run as a systemd service

Create /etc/systemd/system/palworld.service:

[Unit]
Description=Palworld Dedicated Server
After=network.target

[Service]
Type=simple
User=palworld
WorkingDirectory=/home/palworld/Steam/steamapps/common/PalServer
ExecStart=/home/palworld/Steam/steamapps/common/PalServer/PalServer.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Then:

sudo systemctl daemon-reload
sudo systemctl enable --now palworld
sudo systemctl status palworld

journalctl -u palworld -f to follow logs.


3. Path B: Docker Compose

Best for: easy updates, declarative config, cross-platform.

Step 1: Install Docker

Linux: < > Windows / macOS: Docker Desktop from < >

Step 2: Pick a Docker image

Multiple community-maintained projects exist; the most actively maintained as of August 2026 include:

Recommendation: pick one and pin to a specific image tag (e.g. thijsvanloef/palworld-server-docker:v1.0.2) rather than :latest in production — :latest will silently update when 1.0.3 lands and could break your config.

Step 3: docker-compose.yml

services:
  palworld:
    image: thijsvanloef/palworld-server-docker:v1.0.2
    container_name: palworld
    restart: unless-stopped
    ports:
      - "8211:8211/udp"
      - "25575:25575/tcp"  # RCON
    environment:
      PORT: "8211"
      PLAYERS: "16"
      SERVER_NAME: "My Palworld Server"
      SERVER_DESCRIPTION: "Hosted via Docker"
      SERVER_PASSWORD: ""
      ADMIN_PASSWORD: "CHANGE_ME_TO_A_LONG_RANDOM_STRING"
      MULTITHREADING: "true"
      COMMUNITY: "false"
      RCON_ENABLED: "true"
      RCON_PORT: "25575"
      TZ: "UTC"
    volumes:
      - ./palworld-data:/palworld/Pal/Saved

Step 4: First launch

mkdir palworld-data
docker compose up -d
docker compose logs -f

The first run takes a few minutes as the image downloads and the server initializes. Once you see “World saved” or similar in the logs, the server is up.

Step 5: Update to a new patch

docker compose pull
docker compose up -d

This pulls the new image and recreates the container. The palworld-data volume persists saves and config.


4. Connecting to your server

From the Palworld client:

  1. Open Multiplayer from the main menu.
  2. Click Add server (or use the server list if Public is enabled).
  3. Enter your server’s public IP and port 8211.
  4. If you set ServerPassword, enter it.
  5. Connect.

If you set PublicIP in PalWorldSettings.ini, your server will appear in the community server list automatically.


5. Save migration and backups

Before every patch

# Path A
cp -r ~/Steam/steamapps/common/PalServer/Pal/Saved/SaveGames/ ~/backups/palworld-$(date +%Y%m%d-%H%M)/

# Path B
cp -r ./palworld-data/SaveGames/ ./backups/palworld-$(date +%Y%m%d-%H%M)/

The 1.0 migration is one-way. If a 1.0.2 → 1.0.3 patch goes wrong, your only rollback is the save backup.

Moving a save between hosts

Both Path A and Path B use the same save layout: Saved/SaveGames/<save-id>/. To move:

  1. Stop the server.
  2. Copy the <save-id>/ directory to the new host at the same path.
  3. Restart the server. The new host should pick up the save automatically.

Pitfall: don’t copy saves between hosts running different patch versions. The format may differ.


6. RCON — remote administration

If you enabled RCON (port 25575 by default), you can administer the server from a remote shell:

# Using mcrcon or any RCON client
rcon -H your.server.ip -P 25575 -p YOUR_ADMIN_PASSWORD "broadcast Hello world"

Available RCON commands include: broadcast <msg>, shutdown, save, kick <player>, ban <player>, teleport. See Pocketpair’s documentation for the full command list.

Security: never expose RCON (25575) to the public internet. Bind it to localhost or a VPN.


7. Common pitfalls

PitfallSymptomFix
Forgot to open UDP 8211Connection timeoutsOpen the port in firewall AND cloud security group
Running as rootServer compromise = root compromiseAlways use a dedicated unprivileged user
Using :latest Docker tagSilent breakage when patch landsPin to a specific tag like v1.0.2
No backup before patchLose save if migration failsAlways backup SaveGames/ before patching
Public RCONAnyone can shut down / banBind RCON to localhost or VPN
Setting bIsPvP=False then expecting PvPPlayers can’t damage each otherToggle bIsPvP=True for PvP servers
High PalSpawnNumRateServer lags, memory spikesCap at 1.5x even on high-RAM hosts
Hosting on home internetLag for players in other regionsUse a VPS with a geographically close region setting

8. Performance tuning (post-launch)

If you see lag:

  • Reduce player countPLAYERS=8 is comfortable on a 4-core 8 GB host.
  • Lower PalSpawnNumRate — 0.7–0.8x for 8+ players.
  • Enable MULTITHREADING=true — almost always a win on 4+ core hosts.
  • Monitor with docker stats (Path B) or htop (Path A).
  • SSD or NVMe only — HDD will tank performance.
  • Check region — pick the Region setting closest to your players.

9. When the next patch lands (1.0.3+)

The same workflow handles every patch:

  1. Backup SaveGames/ first (non-negotiable).
  2. Stop the server.
  3. Pull the new image (Path B) or run steamcmd +app_update 2394010 validate (Path A).
  4. Restart.
  5. Connect and verify the world loads.

If the world doesn’t load:

  • Check the server logs for the actual error.
  • Confirm the client is on the same patch version as the server (Steam auto-updates clients).
  • If all else fails, restore from backup and stay on the previous patch until community confirms the new one is stable.

10. Where to go next

Sources

Updated 2026-08-10 — written against the Palworld 1.0.2 build. Save migration and Docker pinning advice assume you want a stable production server; if you’re spinning up a quick test server, the :latest tag is fine.