Host an Unturned server with Pterodactyl

Rent a VM, install the Pterodactyl panel with its one-script installer, import the community Unturned egg, open the three UDP ports the game needs, pull mods from the Steam Workshop, and schedule small backups and a nightly restart. No domain required, about an hour start to finish.

Prerequisites

  • A ServersCamp account (registration guide)
  • An SSH key added to your account (the Create a VM wizard can generate one)
  • Any SSH client on your machine
  • A Steam account: you will need your Steam64 ID for admin rights and a game server login token for the public server list

Pick a size for your Unturned server

Start from the map and the number of players you expect. Pterodactyl and the OS take a share of the machine themselves, so the game server never gets 100% of the box. The table already accounts for that.

Plan Specs Best for
hf-s 2 vCPU, 4 GB RAM Vanilla survival with friends, up to 8 players, on the standard maps like PEI or Washington.
hf-m 4 vCPU, 8 GB RAM The sweet spot. Large maps (Russia, Arid), a stack of weapon and vehicle mods from the Workshop, 20+ players online.
hf-l 6 vCPU, 16 GB RAM Bigger communities with an in-game economy, OpenMod or RocketMod plugins, and a large amount of custom objects.
hf-xl 8 vCPU, 32 GB RAM Networks of several interconnected servers on one box.

This guide uses hf-m (4 vCPU / 8 GB): every number below (memory limits, CPU limits) assumes it. Scale them if you picked another size.

Create the VM

  1. In the Cloud Panel go to Virtual Machines and click Create VM
  2. OS: Ubuntu. We use the current LTS; the pterodactyl-installer README lists every supported version
  3. Hardware: High Frequency. The Unturned server is a single-threaded Unity process, so fast cores matter more than many cores
  4. Size: hf-m or whatever row of the table fits your community
Choosing the VM size for an Unturned server in the ServersCamp Cloud Panel
Picking the hardware and size in the Create VM wizard
  1. Disk: 50 GB is enough for vanilla play, 100 GB or more leaves room for a modded map and a stack of backups. This guide assumes 100 GB. Disk speed can stay at the default
  2. Attach your SSH key and click Create

Connect and update

SSH to the VM's public IP (shown on the VM details page; see Connect to your VM) and bring the packages up to date:

sudo apt update && sudo apt upgrade -y
ServersCamp images usually ship with packages already at the latest versions, so this step tends to finish in seconds.

Install the Pterodactyl panel

Switch to root and run the community installer:

sudo su
bash <(curl -s https://pterodactyl-installer.se)

The script asks a series of questions. Here is the map:

  • What to install: option 2, panel and Wings together
  • Database: press Enter for database name and username, set your own password
  • Timezone: yours, in tz format, for example Europe/Berlin
  • Email for Let's Encrypt: any address. This walkthrough runs without a domain, so it is not used
  • Admin profile: email, username, first and last name, password. The email and username are your panel login, remember them
  • FQDN: the VM's public IP. The script warns that no SSL certificate will be requested for a bare IP, accept
  • UFW rules: yes, let it configure the firewall
  • Answer the telemetry question, confirm with y, and let it install
Pterodactyl installer summary before installation starts
The installer summary: check the FQDN is your public IP, then confirm

When the panel part finishes, the script moves on to Wings (the daemon that actually runs game servers):

  • Let it configure UFW rules for Wings
  • Let it configure the database user automatically
  • Say no to exposing MySQL publicly, a single-box setup does not need it
  • Set the database password when prompted
  • Say no to HTTPS via Let's Encrypt (no domain, remember)

Open http://your_server_ip in a browser and log in with the admin credentials you just created. The login page may show a captcha, that is the panel's built-in bot protection.

Pterodactyl panel login page
The Pterodactyl login page on the VM's public IP

Import the Unturned egg

Pterodactyl does not ship an Unturned egg, so it comes from the community egg repository. Open the admin area (the gear icon, top right) and go to Nests:

  1. Click Create New and name the nest Unturned
  2. Download the egg JSON from the parkervcp eggs repository (the Unturned folder under SteamCMD servers)
  3. Back in Nests, click Import Egg, pick the downloaded file and associate it with the Unturned nest

Configure the panel: location and node

Pterodactyl was designed to manage fleets, so it has a Location → Node → Servers hierarchy. Even a single-box setup needs one of each.

1. Create a location

Under Management → Locations click Create New and enter any short code, for example lvl0. Locations only group nodes; with one server the name does not matter.

2. Create the node

Go to Nodes → Create New and fill in:

  • Name: Default Node
  • Location: lvl0
  • Node Visibility: public
  • FQDN: the VM's public IP
  • Communicate over SSL: Use HTTP Connection
  • Behind Proxy: Not Behind Proxy
  • Total Memory: 8192, Memory Over-allocation: 0
  • Total Disk Space: 100000, Disk Over-allocation: 0
  • Daemon Port: 8080, Daemon SFTP Port: 2022

Zero over-allocation means the panel will refuse to create a second server past the machine's real capacity, a useful guard on a single box. Click Create Node.

3. Allocate three ports

Unturned needs three consecutive UDP ports: the game port plus the two after it. Open all three from the start, the egg expects them.

After the node is created you land on its allocations page. Under Assign New Allocations enter:

  • IP Address: 0.0.0.0
  • Ports: 27015, 27016, 27017

Click Submit.

Pterodactyl node allocations page with ports 27015, 27016 and 27017 added
The three allocations Unturned needs, all on 0.0.0.0

Connect Wings to the panel

Open the node's Configuration tab and click Generate Token. Copy the generated command into your SSH session and run it: it writes the Wings config for this panel.

Two small config fixes remain. First, the panel talks to Wings from the browser, and a bare-IP setup needs the origin allowed explicitly:

nano /etc/pterodactyl/config.yml

Find allowed_origins: [] and change it to (with your real IP):

allowed_origins:
  - http://your_server_ip

Save with Ctrl+S, exit with Ctrl+X. Second, game servers run in Docker containers, and UFW blocks forwarded traffic by default:

sudo nano /etc/default/ufw

Change DEFAULT_FORWARD_POLICY="DROP" to "ACCEPT", save, then sudo ufw reload. Give the containers public DNS resolvers as well:

sudo nano /etc/docker/daemon.json
{
  "dns": ["8.8.8.8", "1.1.1.1"]
}

Restart everything and enable autostart:

systemctl restart wings
systemctl restart docker
systemctl enable docker
systemctl enable wings
ufw enable

Back in the panel, the node should now show a green heart: Wings is healthy and connected.

Create the Unturned server

Admin area → ServersCreate New:

  • Server Name: anything, for example UnturnedServer
  • Server Owner: start typing your admin username and pick it
  • Node: Default Node
  • Default Allocation: 0.0.0.0:27015
  • Additional Allocations: 27016 and 27017, both of them
  • Backup Limit: 30. With the ignore list from the backups section a save weighs a few megabytes, so keeping a month of them is cheap
  • CPU Limit: 400%, all four cores
  • Memory: 6500. The OS and the panel's web stack take about 1 to 1.5 GB, so out of 8 GB the game safely gets 6.5 GB
  • Disk Space: 100000
  • Nest / Egg: Unturned / the egg you imported
Resource Management block in the Pterodactyl server creation form with CPU, memory and disk limits
Resource limits for an hf-m box: 400% CPU, 6500 MiB memory, 100000 MiB disk

Service variables

  • OpenMod / RocketMod: 0 for vanilla. Set 1 if you plan to run plugins
  • Unturned Auto Update: 1, so the server pulls the matching game build after each Steam update
  • Map: the map name, for example PEI or Russia
  • Name: how the server shows up in the in-game browser
  • Perspective: both (first and third person)
  • Mode: Normal
  • PVP / PVE: whichever your group plays
  • Max Players: 30
  • Owner: your Steam64 ID. This account gets admin rights on first join; steamid.io resolves a profile URL into the 17-digit ID
  • Login Token: create one on the Steam game server accounts page with App ID 304930 (Unturned). Without it the server stays off the public server list, though friends can still join by IP

Click Create Server, open the server's console and wait. The first start downloads the game through SteamCMD, which takes 5 to 10 minutes. When the console prints Loading level: 100% followed by a Server Code line, the server is up: in Unturned go to Play → Connect, enter the VM's public IP and port 27015, and join.

Add mods from the Steam Workshop

The server downloads Workshop items itself and sends them to players on connect, so there is nothing to upload by hand. In the server's Files tab open Servers/unturned/WorkshopDownloadConfig.json.

Every Workshop item has a numeric ID at the end of its URL: for steamcommunity.com/sharedfiles/filedetails/?id=3793368469 the ID is 3793368469. Put the IDs you want into the File_IDs array:

"File_IDs": [
    3793368469,
    1234567890
]

Save the file and restart the server. The next start fetches the items, and players receive them automatically when they connect.

Editing WorkshopDownloadConfig.json in the Pterodactyl file manager with a mod ID in File_IDs
WorkshopDownloadConfig.json in the panel's file editor

Backups that stay small

A full copy of the server folder is around 4 GB, almost all of it the game engine and maps that SteamCMD can re-download at any time. The player data you actually care about is a few megabytes. Tell the backup task to skip the engine and each backup drops to 5 to 50 MB.

  1. Open the server's Schedules tab and click Create Schedule
  2. The timing uses cron syntax: minutes, hours, day of month, month, day of week. 30 23 * * * is every night at 23:30
  3. Open the new schedule, click New Task, and pick Create backup as the action
  4. In Ignored Files paste this list:
Unturned_Headless_Data/**
Bundles/**
Maps/**
Modules/**
steamapps/**
*.log
A nightly Create backup task in Pterodactyl with the Unturned engine folders in the ignore list
A nightly backup task with the engine folders ignored

Every so often, download a backup off the box too: Backups tab → the three dots next to a backup → Download. A copy on your own machine survives anything that happens to the server.

Nightly restart

Over a long uptime an Unturned server accumulates dropped items and stale state in memory, and tick performance drifts down with it. A daily restart at a quiet hour resets that. Create a second schedule, for example 0 23 * * * (every night at 23:00, half an hour before the backup), and add two tasks:

  1. Send command with the command Save, so the world is written to disk and nobody loses progress
  2. Send command with the command Restart (or Send power action → Restart), with a Time offset of 30 seconds so the save finishes first
A Pterodactyl schedule with a Save command followed by a Restart command 30 seconds later
Save, then Restart 30 seconds later

What's next?

Stuck anywhere? Open a ticket from the Cloud Panel, we are happy to help with game server setups.