How to Install Pterodactyl Panel on a VPS for Game Server Management

How to Install Pterodactyl Panel on a VPS for Game Server Management

Managing multiple game servers manually — starting, stopping, updating, managing files — quickly becomes unmanageable. Pterodactyl Panel is the industry-standard open-source game server management panel: a beautiful web interface for creating, controlling, and monitoring game servers with a permission system for multiple admins and users.

This guide installs Pterodactyl Panel and its Wings daemon on Ubuntu VPS — giving you a professional game hosting control panel for Minecraft, CS2, Valheim, Rust, and dozens of other games.

Pterodactyl Architecture

Component Role
Panel Web interface (PHP/Laravel) — what admins and users see
Wings Go daemon running on the same or separate nodes — actually runs the game servers
MySQL Stores all panel data (users, servers, configurations)
Redis Queue and cache for the panel

Wings and Panel can run on the same VPS (single-node setup, easiest) or on separate VPS instances (multi-node, for hosting many clients).

💡 VPS.DO Recommendation: For a single-node setup hosting 5–10 game servers, the USA VPS 30IPs plan (4 vCPU / 8 GB RAM) provides comfortable headroom. Game servers are RAM-intensive. View Plans →


Requirements

  • Ubuntu 22.04 LTS VPS with at least 2 GB RAM (4 GB+ recommended)
  • A domain name pointed to your VPS IP
  • Root access via SSH
  • Ports 80, 443, 8080, 2022 available

Part 1: Install the Panel

Step 1: Install Dependencies

sudo apt update && sudo apt upgrade -y

# Install PHP 8.3 and extensions
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php8.3 php8.3-cli php8.3-gd php8.3-mysql \
  php8.3-mbstring php8.3-bcmath php8.3-xml php8.3-curl \
  php8.3-zip php8.3-intl php8.3-sqlite3 php8.3-fpm

# Install other dependencies
sudo apt install -y nginx mariadb-server redis-server \
  tar unzip git curl wget composer

sudo systemctl enable mariadb redis-server nginx
sudo mysql_secure_installation

Step 2: Create Database

sudo mysql -u root -p
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'SecurePass123!';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Step 3: Download and Configure Pterodactyl 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
cp .env.example .env
composer install --no-dev --optimize-autoloader

php artisan key:generate --force

Step 4: Configure Environment

php artisan p:environment:setup

Follow the prompts:

  • Application URL: https://panel.yourdomain.com
  • Timezone: your timezone
  • Cache driver: Redis
  • Session driver: Redis
  • Queue driver: Redis
php artisan p:environment:database
  • Database host: 127.0.0.1
  • Database name: panel
  • Username: pterodactyl
  • Password: SecurePass123!

Step 5: Database Setup and Admin User

php artisan migrate --seed --force

php artisan p:user:make

Follow the prompts to create your admin account.

Step 6: Set Permissions

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

Step 7: Configure Cron and Queue Worker

sudo crontab -u www-data -e
# Add:
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
sudo nano /etc/systemd/system/pteroq.service
[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
sudo systemctl enable --now pteroq

Part 2: Configure Nginx for the Panel

sudo nano /etc/nginx/sites-available/pterodactyl
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;

    ssl_certificate /etc/letsencrypt/live/panel.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.yourdomain.com/privkey.pem;

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

    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    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_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;
    }
}
sudo ln -s /etc/nginx/sites-available/pterodactyl /etc/nginx/sites-enabled/
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d panel.yourdomain.com
sudo nginx -t && sudo systemctl reload nginx

Access your panel at https://panel.yourdomain.com


Part 3: Install Wings (Game Server Daemon)

Step 1: Install Docker

curl -sSL https://get.docker.com/ | CHANNEL=stable bash
sudo systemctl enable --now docker

Step 2: Install Wings

sudo mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings \
  "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64"
sudo chmod u+x /usr/local/bin/wings

Step 3: Configure Wings from the Panel

  1. Log into your Pterodactyl panel
  2. Go to Admin → Nodes → Create New
  3. Fill in:
    • Name: Main Node
    • FQDN: panel.yourdomain.com (or a separate node domain)
    • Communicate over SSL: Yes
    • Total Memory: your VPS RAM minus 1 GB for system
    • Total Disk Space: your available disk
  4. Save the node
  5. Click Configuration tab → copy the auto-deploy command
# Run the auto-deploy command on your VPS (looks like):
cd /etc/pterodactyl && sudo wings configure \
  --panel-url https://panel.yourdomain.com \
  --token YOUR_TOKEN \
  --node YOUR_NODE_ID

Step 4: Start Wings as a Service

sudo nano /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
sudo systemctl enable --now wings
sudo systemctl status wings

Part 4: Create Your First Game Server

Install game server eggs (server templates)

  1. Panel → Admin → Nests → Import Egg
  2. Download eggs from the official Pterodactyl eggs repository
  3. Popular eggs: Minecraft Java, Minecraft Bedrock, CS2, Valheim, Rust, ARK

Create a Minecraft server

  1. Panel → Servers → Create New Server
  2. Configure:
    • Server Name: My Minecraft Server
    • Server Owner: your admin account
    • Node: Main Node
    • Memory: 2048 MB
    • Disk: 10240 MB
    • Nest: Minecraft
    • Egg: Paper
    • Minecraft version: latest
  3. Click Create Server

Wings downloads the server files automatically. The server appears in the panel with start/stop/restart buttons and a real-time console. ✅


Part 5: User and Permission Management

# Create a user for a client/player
Panel → Admin → Users → New User

# Assign server access to a user
Panel → Servers → Select Server → Users tab → Add user
# Set permissions: Console, Files, Startup, Database, etc.

The permission system lets you give clients access to their server’s console and files without admin access to the panel itself — ideal for game hosting businesses.


Firewall Configuration

# Panel ports
sudo ufw allow 80/tcp   # HTTP redirect
sudo ufw allow 443/tcp  # Panel HTTPS

# Wings ports
sudo ufw allow 8080/tcp  # Wings API
sudo ufw allow 2022/tcp  # Wings SFTP

# Game server ports (open range for allocated servers)
sudo ufw allow 25565/tcp  # Minecraft default
sudo ufw allow 25565/udp
sudo ufw allow 27015/tcp  # Steam game servers
sudo ufw allow 27015/udp
sudo ufw allow 19132/udp  # Minecraft Bedrock

Final Thoughts

Pterodactyl transforms raw VPS compute into a managed game hosting platform. Whether you’re running servers for your friend group or operating a game hosting business with paying clients, the panel’s clean interface, permission system, and Docker-based server isolation make it the right tool. Wings handles all server lifecycle management while you focus on the player experience.

Fast • Reliable • Affordable VPS - DO It Now!

Get top VPS hosting with VPS.DO’s fast, low-cost plans. Try risk-free with our 7-day no-questions-asked refund and start today!