Install Pterodactyl Panel on a Dedicated Server

Pterodactyl Panel is an open-source game server management panel that provides a modern web interface for managing multiple game servers from one place. This Servers99 guide walks you through installing the Pterodactyl Panel on a fresh Linux dedicated server, including required dependencies, database configuration, background workers, and optional webserver + SSL setup.

Before You Begin

Supported operating systems

Pterodactyl Panel supports modern Linux distributions such as:

  • Ubuntu 22.04 / 24.04
  • Debian 11 / 12 / 13
  • RHEL-based distributions (Rocky/Alma/RHEL)

Requirements (Dependencies)

You’ll need:

  • PHP 8.2 or 8.3 with extensions: cli, openssl, gd, mysql, PDO, mbstring, tokenizer, bcmath, xml/dom, curl, zip, and fpm (for Nginx)
  • MySQL 5.7.22+ (MySQL 8 recommended) or MariaDB 10.2+
  • Redis (redis-server) A web server (this guide uses Nginx)
  • Utilities: curl, tar, unzip, git
  • Composer v2

Step 1 - Update the Server

Log in as root (or use sudo -i), then run:

1
Bash apt update && apt -y upgrade

Step 2 - Install Dependencies (Ubuntu/Debian)

Log in as root (or use sudo -i), then run:

2
2.1 Install base packages
Bash apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg

This enables add-apt-repository and installs tools used throughout the setup

3
2.2 (Ubuntu 22.04 only) Add PHP repository

This enables add-apt-repository and installs tools used throughout the setup

Bash LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
4
2.3 Add Redis repository (recommended)
Bash curl -fsSL https://packages.redis.io/gpg | sudo 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" | sudo tee /etc/apt/sources.list.d/redis.list
5
2.4 Install Nginx + allow firewall (optional)
Bash apt -y install nginx # If UFW is enabled: ufw allow 'Nginx Full'
6
2.5 Install PHP, MariaDB, Redis, and utilities
Bash apt update 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

Step 3 - Install Composer (v2)

Composer is required to install Panel dependencies:

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

Step 4 - Download the Pterodactyl Panel

Create the installation directory:

8
Bash mkdir -p /var/www/pterodactyl cd /var/www/pterodactyl

Download and extract the latest Panel release:

9
Bash 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 5 - Create the Database and User

Log in to MariaDB:

10
Bash mariadb -u root -p

Create the database and user (replace YOUR_STRONG_PASSWORD):

10
SQL CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'YOUR_STRONG_PASSWORD'; CREATE DATABASE panel; GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION; exit

Step 6 - Configure and Install the Panel

Copy the environment file and install PHP dependencies:

10
Bash cp .env.example .env COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader

Generate the application key:

11
Bash php artisan key:generate --force
⚠️
Important Note: Back up your APP_KEY from .env. Losing it makes encrypted data irrecoverable.

Step 7 - Run the Interactive Setup

Run the built-in setup wizards:

12
Bash php artisan p:environment:setup php artisan p:environment:database php artisan p:environment:mail

Create the first admin user:

13
Bash php artisan migrate --seed --force

Create the first admin user:

14
Bash php artisan p:user:make

Step 8 - Set Correct Permissions

On Ubuntu/Debian (Nginx uses www-data):

15
Bash chown -R www-data:www-data /var/www/pterodactyl/*

Step 9 - Enable Cron + Queue Worker (Required)

Pterodactyl uses queues for background jobs

16
9.1 Add the cron job
Bash sudo crontab -e
17
Add:
Bash * * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
18
9.2 Create the systemd queue worker
Bash nano /etc/systemd/system/pteroq.service
19
Paste:
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
20
Enable services
Bash sudo systemctl enable --now redis-server sudo systemctl enable --now pteroq.service

Step 10 - Configure Nginx (Optional but Recommended)

On Ubuntu/Debian (Nginx uses www-data):

21
10.1 Remove the default Nginx site
Bash rm /etc/nginx/sites-enabled/default
21
10.2 Create the Panel site config (HTTP)
Bash nano /etc/nginx/sites-available/pterodactyl.conf

Paste (replace < domain > with your domain or server IP):

22
Nginx server { listen 80; server_name ; root /var/www/pterodactyl/public; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/pterodactyl.app-error.log error; client_max_body_size 100m; client_body_timeout 120s; sendfile off; 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_param HTTP_PROXY ""; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; } location ~ /\.ht { deny all; } }

This is based on the official Nginx configuration template

23
Enable and restart Nginx:
Bash sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf sudo systemctl restart nginx

Step 11 - SSL (HTTPS) with Certbot (Optional)

Pterodactyl’s documentation provides a simple Certbot flow for SSL certificates.

24
Install Certbot + Nginx plugin:
Bash sudo apt update sudo apt install -y certbot sudo apt install -y python3-certbot-nginx

Replace example.com with your domain:

25
Create a certificate (example)
Bash certbot certonly --nginx -d example.com

Add this to root crontab to attempt renewal daily at 23:00:

26
Auto-renew (recommended)
Cron 0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"

Access Your Panel

Once Nginx is running, open:

  • http://YOUR_SERVER_IP (HTTP), or
  • https://YOUR_DOMAIN (if SSL is configured)

Power Your Pterodactyl Setup with Servers99 Dedicated Servers

Servers99 provides dedicated hardware built for reliable performance, ideal for installing Pterodactyl Panel and running game server workloads with full control.

Fast storage
Low Latancy Network
Full root access
DDoS Protection
View Servers99 Dedicated Servers