SameOS ~/tools/palworld-linux-server.md

Build Your Own Palworld Server, Part 1: Launch It on Linux With Docker

Published 2026-07-13 · SameOS Tools

To celebrate the full release of Palworld, I opened a dedicated server (a multiplayer server you run yourself instead of renting one) for two or three friends on the Linux box I already run at home. Rented game servers cost real money every month; an already-running Linux machine costs nothing. This series shares the real operating experience in parts - part 1 gets the server up and your friends connected, part 2 covers the trap that loses your save data plus backups, and parts 3 and 4 build a browser admin page.

Requirements

A Palworld dedicated server is memory hungry. The official recommendation is 16GB; with a small group you can start on 8GB, but usage keeps creeping up the longer it runs, so plan for periodic restarts. Four CPU cores were plenty. On the software side you only need Docker (a tool that runs a program inside its own isolated box) with the compose plugin. A community-maintained Palworld server image automates the whole Steam server installation.

Installing Docker - a Few Commands

If your server does not have Docker yet, install it first. Connect over SSH (the terminal connection used to type commands on a remote server) and run the commands below in order. On a freshly installed server, start by refreshing apt (the package manager on Ubuntu/Debian) - basics like curl may not be there yet. Once the version check works, create a working folder for Palworld.

# 0) on a fresh server - refresh the package list and install basics
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl

# 1) official Docker install script (Ubuntu, Debian, Raspberry Pi OS, ...)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 2) verify - a version number means success (the compose plugin comes with it)
docker --version
docker compose version

# 3) (optional) use docker without sudo - takes effect after re-login
sudo usermod -aG docker $USER

# 4) create the Palworld working folder
mkdir -p ~/palworld && cd ~/palworld

The compose File

Save the content below as compose.yaml in a working folder on your server, put the two passwords into a .env file (a small file that holds only your secrets), and run docker compose up -d in the terminal - that is it. The key is treating the two ports differently. Game port 8211 is exposed to the internet; the management REST API (an interface that accepts server commands through plain web requests) on port 8212 must never be - with just the admin password it can shut the whole server down. Binding it to 127.0.0.1 (the address that means "this machine itself") keeps it safe.

# compose.yaml
services:
  palworld:
    image: thijsvanloef/palworld-server-docker:latest
    # once stable, pin a tested version tag instead of latest
    container_name: palworld         # fixed name - used by docker commands later in the series
    restart: unless-stopped          # auto-restart on crash, manual stop is respected
    stop_grace_period: 30s
    ports:
      - "8211:8211/udp"              # game port - public
      - "127.0.0.1:8212:8212"        # REST API - host only, NEVER expose publicly
    environment:
      PUID: 1000
      PGID: 1000
      PLAYERS: 8
      SERVER_NAME: "My Palworld"
      SERVER_PASSWORD: "${SERVER_PASSWORD}"    # join password
      ADMIN_PASSWORD: "${ADMIN_PASSWORD}"      # used by the REST API
      REST_API_ENABLED: true
      RCON_ENABLED: false            # not needed when the REST API is on
    volumes:
      - ./palworld-data:/palworld

# .env (next to compose.yaml, chmod 600, never commit it anywhere public)
SERVER_PASSWORD=your-join-password
ADMIN_PASSWORD=your-admin-password

Run It and Check

Create the files with nano (a simple text editor that runs in the terminal): paste the content, press Ctrl+O then Enter to save, and Ctrl+X to exit. The first start takes a few minutes while the game server downloads - watch the log, and when palworld appears in the docker ps list, you are up.

# 1) create the two config files (inside ~/palworld)
nano compose.yaml    # paste the compose.yaml above → Ctrl+O, Enter, Ctrl+X
nano .env            # paste the two password lines
chmod 600 .env       # owner-only access

# 2) start the server - the first run downloads for a few minutes
docker compose up -d

# 3) watch the progress log (Ctrl+C to leave)
docker compose logs -f

# 4) confirm it is running - success when palworld shows up
docker ps

# 5) find the addresses you need
hostname -I          # LAN IP - for the router's port forwarding
curl ifconfig.me     # public IP - the address you give your friends

Letting Friends In - Port Forwarding

A home server usually sits behind a router, so friends outside need UDP 8211 forwarded to the server's LAN address in the router settings (port forwarding: passing connections from outside the router to one specific machine inside). They join from the game's multiplayer screen with publicIP:8211 plus the server password. Residential lines can change their public IP (the address that points to your home on the internet) from time to time, so check it periodically before someone tells you they cannot connect. And if the server runs a firewall (ufw), remember to open the game port with sudo ufw allow 8211/udp.

At this point the server runs and your friends can join. But Palworld has traps the documentation barely mentions - stop it the wrong way and progress is lost; edit the config file the wrong way and the server loses its settings. Part 2 covers those traps and backups.

View the full example code on GitHub →

Next: Part 2 - the save trap and backups → Read the server webhook alerts article