Workload · Running a Pterodactyl game panel

Pterodactyl server hosting for all your game servers in one place

To host game servers with Pterodactyl you install two things on a Linux server you control: the Panel, the website where you create and manage servers, and Wings, the service that actually runs each game inside its own Docker container. They can live on the same machine. The one thing that trips people up is the host: Wings needs Docker, and Docker rarely works inside OpenVZ or LXC containers, so a whole server is the easy choice.

The short version
  1. One machine can run the Panel and Wings together
  2. Every game gets its own Docker container and limits
  3. Open 443, 8080 and 2022, plus your game ports
  4. Stable line is 1.x; 2.0 is still a beta
  5. No contract, so you can grow or move the node

What you are actually installing

Think of the Panel as the front desk and Wings as the workshop. You, your friends or your customers log in to the Panel to start, stop and configure servers. Wings receives those instructions and does the work: it downloads the game's Docker image, starts the container, streams the console to your browser and lets you upload files over SFTP.

Each kind of game is described by an egg, a recipe holding the image, the startup command and the settings. A fresh install comes with a set of default eggs, and the project keeps a larger catalogue on its eggs site. A machine running Wings is called a node. Start with one node; you can add more later and manage them all from the same Panel.

Will Wings run on the server you pick?

It will on a dedicated server or a KVM virtual machine; it probably will not on OpenVZ, Virtuozzo or LXC. Those older container platforms share one kernel between many customers, and Docker needs features they usually switch off. Pterodactyl's own Wings guide gives you a one-line test:

  1. Log in over SSH and run systemd-detect-virt.
  2. If it answers openvz or lxc, stop: ask your provider whether Docker is supported before going further.
  3. If it answers kvm, you are inside a normal virtual machine and Docker will work.
  4. If it answers none, there is no hypervisor at all. That is what you see on a dedicated server, and it is the simplest place for Wings to live.

Planning to split one big machine with Proxmox? Give Wings a KVM virtual machine, not an LXC container, for the same reason.

What the Panel needs before you start

Install the stable 1.x release unless you enjoy testing: the 2.0 Panel is published as a beta. For 1.x the documentation lists these pieces:

PieceWhat 1.x expectsWhy it is there
LinuxUbuntu 22.04 or 24.04, Debian 11 to 13, or RHEL, Rocky or AlmaLinux 8 and 9Wings has no Windows version, and the Panel guide targets these
PHP8.2, or the recommended 8.3, with FPM for NGINXThe Panel is a PHP application
DatabaseMariaDB 10.2 or later, or MySQL from 5.7.22 (8 is preferred)Users, nodes, servers and eggs
RedisThe redis-server packageSessions, cache and the job queue
Web serverNGINX, Apache or CaddyServes the Panel's public folder
DockerInstalled on every nodeWings starts each game as a container

The 2.0 beta moves to PHP 8.3 or 8.4 and newer databases, and also ships as a Docker image of its own. Neither version supports PostgreSQL.

Opening the right doors

Four kinds of traffic matter, and getting the firewall right saves an evening of confusion:

  • 443 (or 80 if you skip TLS): people opening the Panel, and Wings reporting back to it.
  • 8080: the Panel giving Wings orders, and your browser's live console and file transfers. Your browser talks to the node directly, so give the node a DNS name and, with an HTTPS Panel, a certificate of its own.
  • 2022: SFTP, for editing a server's files with a desktop client.
  • Your game ports: whatever each server is allocated, with the protocol that game uses.
  • Both 8080 and 2022 can be changed on the node's settings page if they clash with something.

An allocation is an address plus a port. Each game server must have one or more, so add a batch from the Allocation tab of your node, typing in the machine's public IP (hostname -I shows it first). One IPv4 address can carry dozens of servers this way, each on its own port. Do not use 127.0.0.1 for an allocation: use the machine's public IP (or its internal IP if the node sits behind NAT).

The server that fits

Pterodactyl publishes no hardware figure for itself, because the games decide that. Add up the memory limit you plan for each server, add room for the database and web stack, and choose cores by clock speed if your games care about tick rate. Memory usually runs out first; fast SSD or NVMe keeps world saves from stalling.

Our bare metal for game servers gives Wings exactly what it wants: a whole HPE enterprise machine with nobody else on it, root access, and a port that is not shared with any other customer at the access switch. Traffic is unmetered, so a busy weekend never turns into a bandwidth bill. Choose the city nearest your players: Bucharest, Amsterdam, New York, San Francisco or Miami, and install Ubuntu, Debian or AlmaLinux from the order form.

A machine already in the rack is usually ready about 30 minutes after your order is approved; payment checks can add time. Browse what is racked today on instant servers, or the whole catalogue on dedicated servers.

Up and running in an evening

  1. Install PHP, MariaDB, Redis and NGINX, then Composer, then unpack the latest Panel release in /var/www/pterodactyl.
  2. Open MariaDB and create a database called panel and a pterodactyl user that connects from 127.0.0.1, with a password you generate.
  3. Copy .env.example to .env, run COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader, generate the app key once with php artisan key:generate --force, then walk through the p:environment:setup, p:environment:database and p:environment:mail prompts. Pick Redis for cache, sessions and queue.
  4. Run php artisan migrate --seed --force, create your admin with php artisan p:user:make, and hand the folder to www-data.
  5. Add the every-minute scheduler line to root's crontab, create the pteroq queue service, and configure NGINX with an SSL certificate.
  6. Install Docker and Wings with the commands below, add a node under Admin, Nodes, and paste its Configuration tab into /etc/pterodactyl/config.yml.
  7. Run wings --debug until it starts cleanly, then set it up as wings.service so it survives reboots.
# Panel prerequisites on Ubuntu 24.04
apt -y install php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb-server nginx tar unzip git redis-server
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

# after the Panel files are in place
php artisan migrate --seed --force
php artisan p:user:make
# Docker and Wings on the node
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
sudo systemctl enable --now docker
sudo mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
sudo chmod u+x /usr/local/bin/wings
sudo wings --debug

Save the APP_KEY line from .env somewhere other than the server, such as a password manager. It encrypts API keys and node tokens; without it a database backup cannot bring them back. And the Docker one-liner runs a script from the internet as root, so read it first if that worries you.

Keeping it healthy

  • Use the Panel's own backups for game files, and dump the panel database on a schedule as well.
  • Hosting servers for other people on a kernel older than 6.1? Turn on swap accounting with swapaccount=1 in GRUB so container memory limits hold.
  • Update the Panel and Wings separately, each by its own upgrade guide.
  • Only import eggs you trust: an egg decides which image runs and what its install script does.
  • If the Panel goes down, nobody gets kicked: Wings keeps the games running. Rack servers and blades also give you a browser console, so a firewall mistake is fixable without a ticket.

When Pterodactyl is more than you need

If you only want one world for a few friends, a panel, a database and Docker are extra things to look after. Running the game's server directly is lighter, as our Minecraft server walkthrough shows. If a game's server only exists for Windows, Wings cannot host it. And for a quick trial of the Panel, a small Cloud VPS runs on KVM, so Wings works there too; just remember its processor is shared with other customers, which games notice.

Questions people ask

Do I need two servers for the Panel and Wings?
No. The Pterodactyl documentation says both can run on one machine, and that machine can hold many game servers. When you outgrow it, add a second node and manage both from the same Panel.
Why does my VPS refuse to run Wings?
Most often because it is an OpenVZ, Virtuozzo or LXC container, where Docker does not work without special provider support. Run systemd-detect-virt: kvm or none is good news, openvz or lxc is the problem.
Is Pterodactyl free?
Yes. The code is released under the MIT License. What you pay for is the server it runs on, and any game licences your players need.
Can I run several game servers on one IP address?
Yes. Each server is given an allocation, an IP address and a port, so one address can carry many servers on different ports. If you want two servers on the same default game port, you need a second IP, which can be added when you order.
Is Pterodactyl 2.0 ready to use?
Not for production yet: it is published as a beta. The 2.0 documentation says Wings 1.13.2 and 1.13.3 work with the 2.0 Panel, so you do not have to rebuild your nodes, and there is an upgrade guide from 1.x (Panel 1.12.0 or newer).
Will my game servers stop if the Panel crashes?
No. Wings runs the containers, not the Panel, so players stay connected. You just cannot manage the servers from the web until the Panel is back.

Give your game servers a home of their own

A whole server for your Pterodactyl node: nobody meters the traffic, and you sign no long-term contract.

Find a server for your game panel

Read next