Pterodactyl Panel Installation Guide

Complete guide to installing Pterodactyl Panel using automated installer and manual methods

Requirements

System Requirements

Operating System

  • Ubuntu 20.04, 22.04
  • CentOS 7, 8
  • Debian 10, 11

Hardware

  • Minimum 1GB RAM
  • Recommended 2GB+ RAM
  • At least 5GB disk space

Software

  • PHP 8.0 or 8.1
  • MariaDB 10.2+ or MySQL 5.7+
  • Redis (recommended)

Before You Begin

This comprehensive guide covers both the automated installation using Guldkage's installer script and manual installation methods. Perfect for both beginners and advanced users looking to deploy Pterodactyl on Ubuntu servers.

Important Notice

Always ensure your system is fully updated before beginning installation. Backup any existing data and configurations. This installation will modify system configurations.

Interactive Installation

The interactive method is recommended for most users as it guides you through each step:

Run Interactive Installer

bash <(curl -s https://raw.githubusercontent.com/guldkage/Pterodactyl-Installer/main/installer.sh)

Interactive Installation Steps

1

Choose Installation Type

Select whether to install Panel only, Wings only, or both components.

2

Domain Configuration

Enter your fully qualified domain name (FQDN) for the panel.

3

SSL Certificate

Choose whether to install SSL certificate via Let's Encrypt.

4

Admin Account Setup

Create your admin account with email, username, and password.

Step-by-Step Manual Installation

Step 1: System Updates & Dependencies

Update system and install dependencies

# Update system packages
sudo apt update && sudo apt upgrade -y

# Install required packages
sudo apt install -y curl wget gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release

# Add PHP repository
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

Install PHP 8.3 and extensions

sudo apt install -y php8.3 php8.3-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip,intl,sqlite3,redis}

Install Composer

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

Step 2: Database Setup

Install and configure MySQL/MariaDB

# Install MariaDB
sudo apt install -y mariadb-server mariadb-client

# Secure MySQL installation
sudo mysql_secure_installation

Create database and user

# In MySQL prompt:
CREATE DATABASE pterodactyl1;
CREATE USER 'pterodactyl'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON pterodactyl.* TO 'pterodactyl'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Automated Installation

For advanced users or server automation, use the non-interactive mode:

Basic Auto Install
Command Generator
Example Commands

Automated Installation Syntax

bash <(curl -s https://raw.githubusercontent.com/guldkage/Pterodactyl-Installer/main/autoinstall.sh) \
    <fqdn> <ssl> <email> <username> <firstname> <lastname> <password> <wings>

Parameters Explanation

<fqdn> Your panel domain (e.g., panel.yourdomain.com)
<ssl> SSL certificate installation: true or false
<email> Your email address for Let's Encrypt and admin account
<username> Admin account username
<firstname> Admin account first name
<lastname> Admin account last name
<password> Admin account password (use strong password)
<wings> Install Wings: true or false

Manual Dependencies Installation

For manual installation, install the following dependencies:

Update System

# Update package lists
sudo apt update && sudo apt upgrade -y

Install Required Packages

# Install essential packages
sudo apt install -y software-properties-common curl apt-transport-https ca-certificates gnupg

# Add PHP repository
sudo add-apt-repository -y ppa:ondrej/php

# Update package lists
sudo apt update

Install PHP 8.1 and Extensions

sudo apt install -y php8.1 php8.1-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip}

Install MariaDB

# Install MariaDB
sudo apt install -y mariadb-server mariadb-client

# Secure MariaDB installation
sudo mysql_secure_installation

Install and Configure Redis

# Install Redis
sudo apt install -y redis-server

# Start and enable Redis
sudo systemctl start redis-server
sudo systemctl enable redis-server

Panel Installation

Download Pterodactyl Panel

# Create directory and navigate

sudo mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl

# Download latest release

sudo curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz

# Extract files

sudo tar -xzvf panel.tar.gz

# Set permissions

sudo chmod -R 755 storage/* bootstrap/cache/

Install Composer Dependencies

# Install Composer

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

# Install PHP dependencies

sudo composer install --no-dev --optimize-autoloader

# Copy environment file

sudo cp .env.example .env

# Generate application key

sudo php artisan key:generate --force

Database Setup

Create database and user for Pterodactyl:

-- Login to MySQL/MariaDB

sudo mysql -u root -p

-- Create database and user

CREATE DATABASE panel;
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'yourPassword';
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Environment Configuration

Edit the .env file with your database credentials:

# Database configuration

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=panel
DB_USERNAME=pterodactyl
DB_PASSWORD=yourPassword

# Redis configuration
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Database Migration

# Run database migrations

sudo php artisan migrate --seed --force

Create Administrative User

# Create admin user

sudo php artisan p:user:make

Set File Permissions

# Set ownership

sudo chown -R www-data:www-data /var/www/pterodactyl/*

# Set permissions

sudo chmod -R 755 /var/www/pterodactyl/storage/* /var/www/pterodactyl/bootstrap/cache/

Manual Installation Complete!

Your Pterodactyl Panel should now be accessible at your domain. The next step is to install Wings for server management.

Wings Installation

Install Docker

# Install Docker

curl -sSL https://get.docker.com/ | CHANNEL=stable bash

# Start and enable Docker

sudo systemctl enable --now docker

Install Wings

# Create directories

sudo mkdir -p /etc/pterodactyl

# Download Wings binary

sudo 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")"

# Make executable

sudo chmod u+x /usr/local/bin/wings

Configure Wings

Create the Wings configuration file from the panel:

  1. Login to your Pterodactyl Panel
  2. Go to Admin Control Panel
  3. Navigate to Nodes → Create New
  4. Fill in node details and copy the configuration
  5. Save configuration to /etc/pterodactyl/config.yml

Create Wings Service

# Create systemd service file

sudo nano /etc/systemd/system/wings.service

Add the following content:

Add the following content:

[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

Start Wings

# Reload systemd and start Wings

sudo systemctl enable --now wings

# Check status

sudo systemctl status wings

Configuration

Panel Initial Setup

After installation, access your panel through your domain and complete the initial setup process. You'll need to configure locations, nodes, and create your first server.

Web Server Configuration

Nginx Configuration

Create Nginx virtual host for Pterodactyl:

Create Nginx virtual host for Pterodactyl:

server {
    listen 80;
    server_name your-domain.com;
    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;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-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;
    }
}

SSL Configuration with Let's Encrypt

# Install Certbot

sudo apt install certbot python3-certbot-nginx

# Obtain SSL certificate

sudo certbot --nginx -d your-domain.com

Queue Workers Configuration

Set up queue workers for background tasks:

# Create systemd service for queue worker

sudo nano /etc/systemd/system/pteroq.service

Add the following content:

Add the following content:

[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

# Enable and start the service

sudo systemctl enable --now pteroq.service

Cron Configuration

# Add cron job for scheduled tasks

sudo crontab -e

# Add the following line:

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

Initial Configuration Steps

  • Access Panel - Navigate to your domain in a web browser and login with your admin credentials.
  • Create Node - Go to Admin Panel → Nodes → Create New and configure your server node.
  • Configure Allocations - Set up IP addresses and port ranges for your servers.
  • Create Server - Build your first game server with the desired egg and resource limits.

Server Management

Game Server Management

Powerful Game Server Management

Powerful panel for managing Minecraft, CS:GO, Rust, and hundreds of other game servers with ease.

Modern Architecture

Built with modern technologies including React, Docker containers, and secure API architecture.

Creating Servers

Steps to create a new game server:

  1. Login to Admin Panel
  2. Navigate to Servers → Create New
  3. Select Node and Nest (game type)
  4. Configure server specifications
  5. Set startup parameters
  6. Assign to user

Server Allocation Management

Manage IP addresses and ports for your servers:

# Add allocations to a node

# Go to Admin Panel → Nodes → [Your Node] → Allocation

# Example allocation ranges:
# IP: 0.0.0.0 (or specific IP)
# Ports: 25565-25665 (for Minecraft servers)

User Management

Create and manage users through the admin panel:

  • Set user permissions and server access
  • Configure resource limits
  • Manage API keys
  • Monitor user activity

Advanced Topics

Custom Docker Images

Create custom Docker images for specific game configurations:

# Example Dockerfile for custom Minecraft server

FROM openjdk:17-jre-slim

WORKDIR /app
COPY server.jar /app/
COPY plugins/ /app/plugins/

EXPOSE 25565

CMD ["java", "-Xmx2G", "-Xms1G", "-jar", "server.jar", "nogui"]

API Integration

Use Pterodactyl's API for automation:

# Example API calls

# Get all servers
curl -X GET "https://panel.example.com/api/application/servers" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

# Create new server

curl -X POST "https://panel.example.com/api/application/servers" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Test Server",
    "user": 1,
    "egg": 5,
    "node": 1,
    "limits": {
      "memory": 512,
      "swap": 0,
      "disk": 1024,
      "io": 500,
      "cpu": 100
    }
  }'

Backup Configuration

Set up automated backups for your panel:

# Create backup script

sudo nano /usr/local/bin/pterodactyl-backup.sh

#!/bin/bash

# Backup database
mysqldump -u pterodactyl -p panel > /backups/pterodactyl-$(date +%Y%m%d).sql

# Backup panel files
tar -czf /backups/pterodactyl-files-$(date +%Y%m%d).tar.gz /var/www/pterodactyl

# Make executable

sudo chmod +x /usr/local/bin/pterodactyl-backup.sh

# Add to cron for daily backups

sudo crontab -e
# Add: 0 2 * * * /usr/local/bin/pterodactyl-backup.sh

Multi-Node Setup

Scale your infrastructure with multiple Wings nodes:

  1. Install Wings on additional servers
  2. Create new nodes in the admin panel
  3. Configure network connectivity between nodes
  4. Distribute servers across nodes for load balancing

Troubleshooting

Common Issues

Panel Not Loading

Check these common causes:

  • Verify Nginx/Apache configuration
  • Check PHP-FPM status: sudo systemctl status php8.1-fpm
  • Review error logs: sudo tail -f /var/log/nginx/error.log
  • Ensure database connection is working

Wings Connection Issues

Debug Wings connectivity:

# Check Wings status

sudo systemctl status wings

# View Wings logs

sudo journalctl -u wings -f

# Test Docker connectivity

sudo docker ps

# Check configuration

sudo cat /etc/pterodactyl/config.yml

Server Installation Failing

Common server installation problems:

  • Check disk space availability
  • Verify Docker image accessibility
  • Review Wings logs for specific errors
  • Ensure proper file permissions

Log Files Location

# Panel logs

/var/www/pterodactyl/storage/logs/

# Wings logs

sudo journalctl -u wings

# Nginx logs

/var/log/nginx/

# System logs

sudo journalctl -xe

Performance Monitoring

# Monitor system resources

htop
iostat -x 1
free -h

# Check database performance

sudo mysql -u root -p -e "SHOW PROCESSLIST;"

# Monitor Wings resource usage

sudo docker stats

Support Resources

For additional help:

  • Official Pterodactyl Documentation
  • Community Discord Server
  • GitHub Issues for bug reports
  • Community forums and guides