A Minecraft server for one friend group, a Valheim world for another, and a Rust server you spin up on weekends, each one usually means a separate config file, a separate set of ports, and a separate way to log in and restart it. Pterodactyl replaces all of that with one web panel: create, start, stop, and manage every server from a single login, each isolated in its own Docker container. This guide covers installing Pterodactyl, when to reach for the lighter PufferPanel instead, and exposing both the panel and every game server correctly with Localtonet.
Why One Panel Beats Juggling Servers Manually
Running a single game server by hand is manageable. Running three or four, each with its own start command, its own port, its own restart schedule, and its own file access method, turns into its own small chore every time someone wants to add a plugin or restart after a crash.
A panel turns every one of those into a button click, and gives each server its own resource limits so a memory leak in one does not take down the others.
The difference is not features, it is how much of your evening a routine restart takes up.
What Is Pterodactyl?
Pterodactyl is an open-source game server management panel built from two parts: the Panel, a Laravel and React web application you log into, and Wings, a Go-based daemon that actually starts, stops, and isolates each game server in its own Docker container. On a single machine you run both together, on a larger setup Wings can run on separate nodes while one Panel manages all of them.
The Panel by itself is light, around 1 to 2GB of RAM is enough. Running Panel, Wings, and a handful of game servers on the same all-in-one machine is heavier: 4 CPU cores and 8GB of RAM (6GB minimum) with 60GB of SSD storage is a reasonable starting point for testing or a small friend group, on top of whatever each individual game server needs.
Install Pterodactyl (Panel + Wings)
Install the Panel
The official installer script sets up Nginx, PHP, MariaDB, Redis, and Certbot for you.
bash <(curl -s https://pterodactyl-installer.se)
Create your admin account
cd /var/www/pterodactyl
php artisan p:user:make
Add a Location and a Node in the Panel
In the admin area, create a Location, then a Node inside it. The Node's Configuration tab generates the exact config.yml Wings needs.
Install Wings and paste the config
mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings \
"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64"
chmod u+x /usr/local/bin/wings
# paste the generated config.yml into /etc/pterodactyl/config.yml
systemctl start wings
Create your first server
Back in the Panel, create a server on your new Node, pick an egg (Minecraft, Valheim, Rust, and dozens more are available by default), assign it a port, and start it.
Remote Access With Localtonet
Two different things need to reach the outside world here, and they need different treatment: the Panel, which is an admin login, and each game server's port, which is what players actually connect to.
๐ Expose the Panel behind Basic Auth
Create an HTTP tunnel to the Panel
Point it at 127.0.0.1:443 (or 80 if you have not set up Certbot locally) and map a custom domain, such as panel.example.com.
Turn on Basic Auth for that tunnel
The Panel already has its own login, Basic Auth adds a second check in front of it, so a leaked Panel URL alone is not enough to reach the login screen.
๐ฎ Expose each game server's port
Every game server gets its own port when you create it in the Panel. Tunnel each one individually with the matching protocol, TCP or UDP depending on the game, and reserve the port so it stays the same every time players connect.
Tunnel type: TCP
Local IP: 127.0.0.1
Local port: 25565
Reserved external port: 25565
Wings talks to the Panel over port 8080 (or 443 with SSL) and handles SFTP over port 2022. If Panel and Wings run on the same machine, that communication happens over localhost and never needs a public tunnel. Only expose Wings' API port if you are running Wings on a separate, remote node from your Panel.
Prefer Something Lighter? PufferPanel
Pterodactyl's two-part architecture is powerful, but it is more moving parts than a single-server hobbyist setup usually needs. PufferPanel, written in Go, is a single binary that runs the panel and manages servers with far less overhead, at the cost of the multi-node scalability Pterodactyl offers.
docker volume create pufferpanel-config
docker volume create pufferpanel-servers
docker create --name pufferpanel \
-p 8080:8080 -p 5657:5657 \
-v pufferpanel-config:/etc/pufferpanel \
-v pufferpanel-servers:/var/lib/pufferpanel:z \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=on-failure \
pufferpanel/pufferpanel:latest
docker start pufferpanel
The web UI lands on port 8080 by default, tunnel it the same way as the Pterodactyl Panel: HTTP tunnel, custom domain, Basic Auth in front.
Pterodactyl vs. PufferPanel vs. Running Servers Manually
| Feature | Manual (no panel) | PufferPanel | Pterodactyl |
|---|---|---|---|
| Resource usage | Lowest, nothing extra running | Low, single Go binary | Higher, PHP, MariaDB, Redis, and Wings |
| Docker isolation per server | Only if you set it up yourself | Optional, recommended | Built in by default |
| Multi-node support | โ | โ | โ |
| Setup effort | Different for every game | One Docker command | Panel plus Wings on every node |
| Best for | One server, no plans to grow | A handful of servers for friends | Several servers, multiple users, or room to scale |
The honest trade-off: PufferPanel is genuinely the better fit if you are running two or three servers for close friends and do not want PHP, MariaDB, and Redis running just to manage them. Pterodactyl's advantage shows up the moment you want per-user permissions, multiple nodes, or enough servers that a lighter panel starts feeling like it is missing features you actually need.
๐ Tips for Running a Multi-Server Panel
Troubleshooting Common Issues
| Symptom | Likely cause | Fix |
|---|---|---|
| Node shows offline in the Panel | Wings is not running, or its port is not reachable | Check systemctl status wings and confirm the config.yml token matches what the Panel generated |
| Players can't connect to a game server remotely | The tunnel's reserved port does not match the port set in the Panel | Confirm the Reserved Port on the tunnel is identical to the port assigned to that server |
| Panel login page loads but Basic Auth never prompts | Basic Auth is not enabled on that specific tunnel | Open the tunnel's settings in the Localtonet dashboard and confirm Basic Auth is turned on |
| Server won't start, stuck installing | Insufficient disk space or RAM for that egg | Check Wings' logs at /var/log/pterodactyl/wings.log for the specific error |
Frequently Asked Questions
Do I need multiple machines to use Pterodactyl?
No. An all-in-one setup with Panel and Wings on the same machine is the most common configuration for hobbyist use. Multiple nodes only matter once you need to spread servers across more than one machine.
Which games does Pterodactyl support?
Any game with an available egg definition, which covers Minecraft (including modded and Bedrock), Valheim, Rust, Terraria, ARK, and dozens of others maintained by the community.
Should I choose Pterodactyl or PufferPanel?
PufferPanel if you are running a couple of servers for friends and want the lightest possible setup. Pterodactyl if you want per-user permissions, plan to run several servers, or want room to add more nodes later.
Do I need to tunnel Wings' API port?
Only if Wings runs on a different machine from the Panel. On a single all-in-one machine, that communication stays on localhost and never needs to be public.
Can I let a friend manage just their own server?
Yes. Pterodactyl's subuser permissions can be scoped to a single server, console access, file access, or both, without giving that person access to your Panel's admin settings or other servers.
Is Pterodactyl free?
Yes, both Pterodactyl and PufferPanel are free and open source. Your only cost is the hardware or VPS they run on.
What happens to my game servers if the panel goes down?
Running game servers keep running, Wings manages them directly through Docker independent of the Panel's web interface. You just lose the ability to start, stop, or manage them from the browser until the Panel is back.
Ready to Manage Every Server From One Panel?
Install Pterodactyl or PufferPanel, create your first server, then expose the panel and its ports safely with Localtonet. Free to start, no credit card required.
Get Started Free โ