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
- In the Cloud Panel go to Virtual Machines and click Create VM
- OS: Ubuntu. We use the current LTS; the pterodactyl-installer README lists every supported version
- Hardware: High Frequency. The Unturned server is a single-threaded Unity process, so fast cores matter more than many cores
- Size: hf-m or whatever row of the table fits your community
- 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
- 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
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
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.
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:
- Click Create New and name the nest
Unturned - Download the egg JSON from the parkervcp eggs repository (the Unturned folder under SteamCMD servers)
- Back in Nests, click Import Egg, pick the downloaded file and associate it with the
Unturnednest
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
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.
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 → Servers → Create 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:
27016and27017, 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
Service variables
- OpenMod / RocketMod:
0for vanilla. Set1if 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
PEIorRussia - 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.
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.
- Open the server's Schedules tab and click Create Schedule
- The timing uses cron syntax: minutes, hours, day of month, month, day of week.
30 23 * * *is every night at 23:30 - Open the new schedule, click New Task, and pick Create backup as the action
- In Ignored Files paste this list:
Unturned_Headless_Data/**
Bundles/**
Maps/**
Modules/**
steamapps/**
*.log
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:
- Send command with the command
Save, so the world is written to disk and nobody loses progress - Send command with the command
Restart(or Send power action → Restart), with a Time offset of30seconds so the save finishes first
What's next?
- Host a Minecraft server on the same panel, the node and Wings setup is shared
- Add a second disk when the Workshop folder outgrows the first one
- VM-level snapshots and backups on top of the in-panel ones
Stuck anywhere? Open a ticket from the Cloud Panel, we are happy to help with game server setups.