How To Self Host A Palworld Dedicated Server

Using Docker

If you’ve been living under a rock, Palworld is the newest game to take the internet by storm. It’s been coined:

Pokémon, with guns

It’s a crafting survival game where you, and friends, can build up a base and collect “Pals” together. The “and friends” is why we’re here today. One can run a server when they are actively playing, but what if you want an always on server, that your friends can hop on, even when your gaming machine is powered off?

Introducing the concept of a “dedicated server”. An instance of the game world that is always on, and not tied to when a player is actively playing. Dedicated servers make a lot of sense on locally running hardware, that has a hardwired internet connection, and is always on. Hence this makes one’s home lab an ideal place to run a dedicated server.

As a software engineer, I often use containerization to deploy new software, which is why we’ll walk through how to use Docker, and Docker Compose to run your very own Palworld dedicated server.

  1. You have Docker installed
  2. You know how to set up port forwarding on your router

This is my preferred method of running Docker containers, as it allows me to keep track of all the details in a single docker-compose.yaml file, and not have to remember, or write down various $ docker run commands. Here is a minified docker-compose.yaml:

version: "3.7"

services:
  palworld:
    image: thijsvanloef/palworld-server-docker
    container_name: palworld
    ports:
      - 8211:8211/udp
      - 27015:27015/udp
    environment:
      - PUID=99
      - PGID=100
      - PLAYERS=32
      - MULTITHREADING=TRUE
      - COMMUNITY=true  # Disable this if you do not want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
      # Enable the environment variables below if you have COMMUNITY=true
      - SERVER_PASSWORD="I love Greg Hilston"
      - SERVER_NAME="GregHilston.com Example"
      - ADMIN_PASSWORD="supersecretpassword"
    volumes:
        - /home/ghilston/config/palworld:/palworld/
    restart: unless-stopped

Be sure to modify the volumes, and environment entries to match what you desire.

You’ll notice that we’re leveraging thijsvanloef/palworld-server-docker After having dug around through a few Palworld server docker images, his seemed to be the best at the time.

Then all you have to run is $ docker compose up -d and your container will start.

I do not personally run straight $ docker run commands, but here is an equivalent to the docker compose approach above. Recall, you’ll have to modify some of the environment and volume data.

docker run -d \
  --name palworld \
  -p 8211:8211/udp \
  -p 27015:27015/udp \
  -e PUID=99 \
  -e PGID=100 \
  -e PLAYERS=32 \
  -e MULTITHREADING=TRUE \
  -e COMMUNITY=true \
  -e SERVER_PASSWORD="I love Greg Hilston" \
  -e SERVER_NAME="GregHilston.com Example" \
  -e ADMIN_PASSWORD="supersecretpassword" \
  -v /home/ghilston/config/palworld:/palworld/ \
  --restart unless-stopped \
  thijsvanloef/palworld-server-docker

Log in to your router as an admin and ensure that ports 8211 and 27015 both map to the IP address of your home server, with those same ports, for UDP.

Shell exec into your container, when its running: $ docker exec -it palworld /bin/bash

and modify the file: /palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini. This file is empty by default. Follow the discussion and steps highlighted here on how to get this empty file to be filled with content.

Documentation on the values can be found here

Are documented here

  1. launch the game
  2. select Join Multiplayer Game
  3. at the bottom there’s a little gray text box where you can type in an IP and port. Type in the [IP address of your machine]:8212. For yourself, locally, you should be able to use a local IP of your server. While your friends will need to use your public IP address. You can find this out any number of ways, the fastest way is to leverage a site like whatismyip.com.