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
- Log into your Pterodactyl panel
- Go to Admin → Nodes → Create New
- 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
- Save the node
- 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)
- Panel → Admin → Nests → Import Egg
- Download eggs from the official Pterodactyl eggs repository
- Popular eggs: Minecraft Java, Minecraft Bedrock, CS2, Valheim, Rust, ARK
Create a Minecraft server
- Panel → Servers → Create New Server
- 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
- 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.