EXCLUSIVE OFFER: UNLOCK 15% SAVINGS IN LONDON! Claim Offer

How to Install Pterodactyl Panel on Ubuntu 24.04

How to Install Pterodactyl Panel on Ubuntu 24.04
Ask AI to extract steps & commands from this tutorial:

Pterodactyl is a free, open-source, Docker-based game server management panel. This guide walks you through a complete, production-ready installation on Ubuntu 24.04 LTS — covering PHP 8.3, MariaDB, Redis, Nginx, Let's Encrypt SSL, and the Wings daemon.

Published: 25 May 2026 · Reading time: ~15 minutes · Difficulty: Intermediate

Requirements & Server Specifications

Before you begin, make sure your dedicated server meets the minimum specifications. Running Pterodactyl on shared hosting or a low-resource VPS will result in instability under load.

  • Operating System: Ubuntu 24.04 LTS
  • CPU: 4+ cores recommended
  • RAM: 8 GB+ recommended
  • Storage: 100 GB+ NVMe SSD recommended
  • PHP Version: PHP 8.3
  • Domain Name: Required — you need a domain pointed to your server IP for SSL

PHP 8.1 is not supported: Pterodactyl Panel 1.11+ requires PHP 8.2 or 8.3. Do not follow guides that use PHP 8.1 — they will not work on a current installation.

What Is Pterodactyl Panel?

Pterodactyl consists of two parts: Panel (The web interface) and Wings (The daemon installed on each node that monitors game servers inside Docker containers). Because each game server runs in its own Docker container, a crashing modpack cannot affect other servers. This makes Pterodactyl an excellent fit for a bare-metal dedicated server.

Step 1 — Update the System

Always start with a fully updated system. Run all commands as root.

bash

apt update && apt upgrade -y
apt install -y curl wget git unzip tar software-properties-common apt-transport-https ca-certificates gnupg lsb-release
                            

Step 2 — Install Required Dependencies

Install Nginx and set up the PHP 8.3 repository via the Ondřej Surý PPA.

bash

apt install -y nginx
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
apt update
                            

Step 3 — Install PHP 8.3

Install PHP 8.3 and all required extensions, then enable PHP-FPM.

bash

apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-mbstring php8.3-bcmath php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-tokenizer php8.3-intl
systemctl enable php8.3-fpm
systemctl start php8.3-fpm
                            

Step 4 — Install MariaDB & Create the Database

Install MariaDB and secure the installation.

bash

apt install -y mariadb-server mariadb-client
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation
                            

Log in to MySQL (mysql -u root -p) and create the database:

sql

CREATE DATABASE pterodactyl;
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON pterodactyl.* TO 'pterodactyl'@'127.0.0.1';
FLUSH PRIVILEGES;
EXIT;
                            

Step 5 — Install Redis

bash

curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
apt update
apt install -y redis-server
systemctl enable redis-server
systemctl start redis-server
                            

Step 6 — Install Composer

bash

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
                            

Step 7 — Download & Configure the Panel

Set up the web directory and install Laravel dependencies.

bash

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/
cp .env.example .env
composer install --no-dev --optimize-autoloader
php artisan key:generate --force
                            

Run the environment setup wizard and create your admin user:

bash

php artisan p:environment:setup
php artisan p:environment:database
php artisan migrate --seed --force
php artisan p:user:make
chown -R www-data:www-data /var/www/pterodactyl/*
                            

Step 8 — Configure Nginx & SSL

Create an Nginx configuration file: nano /etc/nginx/sites-available/pterodactyl.conf

nginx

server {
    listen 80;
    server_name panel.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name panel.yourdomain.com;

    root /var/www/pterodactyl/public;
    index index.php;

    access_log /var/log/nginx/pterodactyl.access.log;
    error_log  /var/log/nginx/pterodactyl.error.log error;

    ssl_certificate     /etc/letsencrypt/live/panel.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.yourdomain.com/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}
                            

Enable the site and install SSL via Certbot:

bash

ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/
apt install -y certbot python3-certbot-nginx
certbot certonly --nginx -d panel.yourdomain.com --email [email protected] --agree-tos -n
systemctl reload nginx
                            

Step 9 — Set Up the Queue Worker & Cron

Create the queue worker service (nano /etc/systemd/system/pteroq.service):

ini

[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
                            
bash

systemctl enable pteroq.service
systemctl start pteroq.service
(crontab -u www-data -l 2>/dev/null; echo "* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1") | crontab -u www-data -
                            

Step 10 — Install Docker & Wings

Install Docker and download the Wings daemon.

bash

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable docker
systemctl start 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
                            

Create the Wings service (nano /etc/systemd/system/wings.service):

ini

[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
                            

Step 11 — Link Wings to the Panel

Log in to your Panel. Go to Admin Panel → Nodes → Create New. Fill in the details, save, and go to the Configuration tab. Copy the auto-deploy command and run it on your server:

bash

cd /etc/pterodactyl && wings configure --panel-url https://panel.yourdomain.com --token your_token_here --node 1
systemctl enable wings
systemctl start wings
                            

Step 12 — Add Your First Game Server & Firewall Setup

Go to Admin Panel → Servers → Create New Server. Finally, ensure your firewall allows the necessary ports:

bash

                        ufw allow 22/tcp
                        ufw allow 80/tcp
                        ufw allow 443/tcp
                        ufw allow 8080/tcp
                        ufw allow 25565/tcp
                        ufw allow 27015/udp
                        ufw allow 7777/udp
                        ufw enable
                            

Ready to Host Your Game Servers?

Pterodactyl performs best on bare-metal dedicated hardware — full CPU access, NVMe storage, and no noisy neighbours competing for your game server's resources. eServers provides DDoS-protected, low-latency dedicated servers from UK data centres.

Need a more powerful hosting solution? Contact the eServers team today for 24/7 expert support.

Discover eServers Dedicated Server Locations

eServers provides reliable dedicated servers across multiple global regions. Whether you need low latency, regional compliance, or proximity to your audience, our wide geographic coverage ensures the perfect hosting environment for your project.

Our Bandwith providers

We are Partners with 15 +

At eServers , we proudly partner with 15+ leading global tech providers to deliver secure, high-performance hosting solutions. These trusted alliances with top hardware, software, and network innovators ensure our clients benefit from modern technology and enterprise-grade reliability.

Hosting Solutions