Back to Blog

How to Install Pterodactyl: Panel and Wings Guide

How to install the Pterodactyl panel on an Ubuntu server: panel, database, queue worker, Nginx and SSL, Wings with Docker, nodes and allocation settings.

Nodesty Team7 min readGame servers
The word Pterodactyl with Panel, Wings and Docker on a dark Nodesty background

Pterodactyl is an open-source, free panel that lets you manage game servers from a web browser. From a single panel, you install, start and stop servers for Minecraft, Rust, CS2, Terraria and many more games and manage their files; each server runs in its own Docker container with the RAM, CPU and disk limits you set. If you'll host a large number of game servers for your own community or your customers, Pterodactyl is the most common choice.

This guide covers installing the two parts of Pterodactyl, the Panel and Wings, on an Ubuntu server step by step and creating your first game server. Because package and PHP versions change over time, check the current requirements in Pterodactyl's official documentation before installing, too.

How does Pterodactyl work?

Pterodactyl is made up of two components:

  • Panel: The web interface, written in PHP. It manages users, servers and settings, and uses a database and Redis.
  • Wings: The service that sits on the machine where the game servers run. It receives commands from the panel and runs each game server in a separate Docker container.

One panel can manage multiple Wings servers (called nodes in Pterodactyl) in different locations. In a small setup, both can run on the same server.

Requirements

  • Server: A KVM-based virtual server or a dedicated server. Wings needs a full Linux kernel for Docker; container-based virtualization such as OpenVZ and LXC generally doesn't work.
  • Operating system: The current LTS release of Ubuntu. In this guide we use Ubuntu 24.04.
  • Domain: A subdomain each for the panel and Wings, for example panel.yourdomain.com and node.yourdomain.com. Both need an A record pointing to the server's IP address; we cover this in our What is DNS? article.
  • Resources: The panel itself uses few resources. Your RAM and CPU needs are determined by the total of the game servers you'll run.

Step 1: Install the dependencies

The panel needs PHP, a web server (Nginx), a database (MariaDB), Redis and Composer. Connect to your server with SSH, become root and install the packages:

sudo -i
apt update
apt install -y php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} \
  mariadb-server nginx tar unzip git redis-server certbot python3-certbot-nginx
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

The PHP version Pterodactyl supports can change over time; if the version recommended in the documentation is different, change the 8.3 in the package names to match. For details on MariaDB and Redis, see our How to install MariaDB and MySQL and What is Redis? articles.

Step 2: Download the panel

mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
tar -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/

Step 3: Create the database

mariadb -u root
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'a-strong-password';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
EXIT;

Step 4: Configure the panel

cp .env.example .env
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
php artisan key:generate --force
php artisan p:environment:setup
php artisan p:environment:database
php artisan p:environment:mail
php artisan migrate --seed --force
php artisan p:user:make
chown -R www-data:www-data /var/www/pterodactyl/*
  • key:generate: Creates the panel's encryption key. Be sure to back up the APP_KEY value in the .env file; if you lose this key, encrypted data can't be read.
  • p:environment:setup: Asks for the panel URL, the time zone, and Redis for the cache and sessions. Enter the panel URL as https://panel.yourdomain.com.
  • p:environment:database: Asks for the details of the database you created in step 3.
  • p:user:make: Creates your first admin account.

Step 5: The scheduler and the queue worker

The panel needs a scheduler that runs every minute and a queue worker for background jobs. Add this line with crontab -e:

* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1

We explain how cron works in our What is cron? article. For the queue, create the /etc/systemd/system/pteroq.service file:

[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s

[Install]
WantedBy=multi-user.target
systemctl enable --now redis-server
systemctl enable --now pteroq.service

Step 6: Nginx and SSL

First get an SSL certificate for the panel domain, then copy the example Nginx configuration from Pterodactyl's documentation into the /etc/nginx/sites-available/pterodactyl.conf file and replace <domain> with your own domain. The configuration passes PHP requests to PHP-FPM and redirects HTTP to HTTPS.

systemctl stop nginx
certbot certonly --standalone -d panel.yourdomain.com
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
nginx -t
systemctl start nginx

Open https://panel.yourdomain.com in your browser and log in with the admin account you created in step 4. We cover the basics of Nginx in How to install Nginx and SSL in What is an SSL certificate?

Step 7: Install Wings

Wings runs game servers in Docker. Install Docker and Wings:

curl -sSL https://get.docker.com/ | CHANNEL=stable bash
systemctl enable --now docker
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

Get an SSL certificate for the Wings domain too (if it's on the same server as the panel, you can also use the panel's domain):

certbot certonly --nginx -d node.yourdomain.com

We cover general Docker usage in our Docker installation guide.

Step 8: Location, node and allocation

Switch to the Admin section in the panel:

  1. Locations → Create New: Create a location, for example fra (Frankfurt).
  2. Nodes → Create New: Enter the node's domain (node.yourdomain.com), that it uses SSL, and the RAM and disk limits. For memory and disk, give a value a little lower than what the server actually has, leaving room for the operating system.
  3. Once the node is created, copy the configuration from the Configuration tab and paste it into the /etc/pterodactyl/config.yml file on the server.
  4. In the Allocation tab, add the IP address and port range the game servers will use, for example 25565-25575.

Start Wings in debug mode first to test the connection:

wings --debug

If the node icon in the panel turns green, stop it with Ctrl + C and run Wings as a permanent service. /etc/systemd/system/wings.service:

[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service

[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s

[Install]
WantedBy=multi-user.target
systemctl enable --now wings

Firewall

For Pterodactyl to work, these ports need to be open:

  • 80 and 443 TCP: The panel.
  • 8080 TCP: The port the panel uses to talk to Wings.
  • 2022 TCP: SFTP access to the game servers' files.
  • Allocation ports: The game servers' ports; TCP, UDP or both, depending on the game.
ufw allow 80,443,8080,2022/tcp
ufw allow 25565:25575/tcp

We explain how ports work in our What is a port? article.

Creating your first game server

In Admin → Servers → Create New, choose the server's owner, the node and the allocation, set the RAM, CPU and disk limits and pick the game as the Nest/Egg (for example Paper for Minecraft). The installation takes a few minutes; after that, the server's console, files and backups are managed from the user panel.

Nodesty servers for Pterodactyl

Pterodactyl requires KVM virtualization or physical hardware. Nodesty AMD Ryzen 9 9950X VPS plans are virtualized with KVM and are a great fit for game servers with single-core speeds up to 5.7 GHz; if you'll host a large number of servers, dedicated servers with hardware reserved entirely for you offer more resources. Panel installations, including Pterodactyl, are done by the customer; if you want a ready-made server for a single game, take a look at our game server plans.

Pterodactyl is an independent open-source project. Nodesty is not affiliated with or endorsed by the Pterodactyl project.

Frequently Asked Questions

Is Pterodactyl free?

Yes. Pterodactyl is an open-source, free game server management panel. You only pay for the machines the panel and the game servers run on.

Can the panel and Wings run on the same server?

Yes. In small setups, the panel and Wings can run on the same server, and the steps in this guide fit that scenario too. If you'll host a large number of game servers, running the panel on a small server and Wings on one or more powerful servers spreads the resources better.

Which virtualization does Pterodactyl run on?

Wings runs game servers in Docker containers and needs a full Linux kernel for this. It runs without problems on KVM-based virtual servers and on dedicated servers; container-based virtualization such as OpenVZ and LXC is generally not supported.

What is an egg?

An egg is a template in Pterodactyl that defines how a game server is installed and started. Ready-made eggs for games like Minecraft, Rust and CS2 come with the panel, and you can import hundreds of extra community-made eggs as JSON files.

Wings won't connect and the node shows up red. What should I do?

Check that the Wings service is running with systemctl status wings, make sure port 8080 is open and confirm that the domain and SSL setting in the node settings on the panel match the Wings configuration. If the panel uses HTTPS, Wings also needs to run with a valid SSL certificate.

Does Nodesty install Pterodactyl?

No. App and game panel installations, including Pterodactyl, are done by the customer. With the steps in this guide, you can install Pterodactyl yourself on your Nodesty virtual or dedicated server; if you want a single ready-made game server, you can choose our game server plans.

Nodesty

About the author

Nodesty Team · Infrastructure & Support

The Nodesty team runs our servers, network and DDoS protection day to day and answers customer support requests around the clock. These guides come from that work.

Related articles

Launch your server now.

Build, scale, and conquer without limits on Nodesty's premium infrastructure.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································