Skip to main content
Teramont Logo
How to Install Pterodactyl Panel and Wings on an Ubuntu 24.04 VPS
Back to Blog

How to Install Pterodactyl Panel and Wings on an Ubuntu 24.04 VPS

Mizael Segovia

7/28/2026 ·Mizael Segovia· 8 min read ·

1 views

To install Pterodactyl on an Ubuntu 24.04 VPS, you need a KVM server with root access, a domain, Docker, PHP 8.3, MariaDB, Redis, nginx, and TLS certificates. This guide walks through a manual Panel and Wings deployment, verifies each component, and includes a practical rollback path.

Compatibility used here: Ubuntu 24.04 LTS, Pterodactyl Panel 1.12, Wings 1.12, PHP 8.3, MariaDB, and nginx. Official documentation also supports Ubuntu 22.04 and Debian 11, 12, and 13. Wings does not run on Windows and commonly fails on OpenVZ, Virtuozzo, or LXC; KVM is the reliable choice.

How Pterodactyl is structured

Pterodactyl manages game servers inside isolated Docker containers. It has two main components:

  • Panel: web interface for users, databases, locations, nodes, servers, and permissions.
  • Wings: daemon installed on each node to control Docker, storage, console access, SFTP, and resource limits.

Panel and Wings can share one VPS for a small deployment. For production or multiple nodes, separating them provides better isolation and easier scaling.

Prerequisites

  • 64-bit Ubuntu 24.04 KVM VPS.
  • Root or sudo access.
  • A domain or subdomain pointing to the VPS IPv4 address.
  • At least 2 GB RAM for a small setup; 4 GB or more when Panel and Wings share the server.
  • Ports 80 and 443 for Panel, 8080 for Wings, and 2022 for SFTP unless customized.
  • A provider snapshot or backup before starting.

Check virtualization

systemd-detect-virt
uname -r

Continue when the first command returns kvm. If it returns openvz, lxc, or virtuozzo, ask the provider whether Docker and the required networking features are enabled.

1. Update Ubuntu

sudo apt update
sudo apt upgrade -y
sudo mkdir -p /root/pterodactyl-backup
sudo cp -a /etc/nginx /root/pterodactyl-backup/nginx-before 2>/dev/null || true

2. Install Panel dependencies

sudo apt install -y software-properties-common curl ca-certificates gnupg tar unzip git
sudo apt update
sudo apt install -y php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb-server nginx redis-server
sudo systemctl enable --now mariadb nginx redis-server php8.3-fpm
php -v
mariadb --version
nginx -v
redis-cli ping

Redis should return PONG.

3. Install Composer

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

4. Create the database

sudo mariadb
CREATE DATABASE panel;
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'A_LONG_UNIQUE_PASSWORD';
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1';
FLUSH PRIVILEGES;
EXIT;

5. Download Pterodactyl Panel

sudo mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
sudo curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
sudo tar -xzvf panel.tar.gz
sudo chmod -R 755 storage bootstrap/cache
sudo cp .env.example .env
sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
sudo php artisan key:generate --force

Back up APP_KEY

grep APP_KEY /var/www/pterodactyl/.env

Store the complete line outside the server. Losing APP_KEY makes encrypted data unrecoverable even when database backups exist.

6. Configure the environment

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

7. Configure nginx

sudo nano /etc/nginx/sites-available/pterodactyl.conf
nginx
server {
    listen 80;
    listen [::]:80;
    server_name panel.example.com;
    root /var/www/pterodactyl/public;
    index index.php;
    client_max_body_size 100m;
    client_body_timeout 120s;
    sendfile off;
    location / { try_files $uri $uri/ /index.php?$query_string; }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        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; }
}
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

8. Enable HTTPS

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d panel.example.com
sudo certbot renew --dry-run

9. Configure cron and queues

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

Run Pterodactyl on a KVM VPS

Choose a KVM VPS to run Docker, Panel, and Wings without the common limitations of OpenVZ or LXC.

Premium Character
View VPS plans
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 daemon-reload
sudo systemctl enable --now pteroq.service

10. Install Docker from the official repository

sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker run --rm hello-world

Firewall warning: Docker-published ports can bypass UFW rules. Filter traffic with compatible iptables rules and the DOCKER-USER chain, or use the provider firewall.

11. Install Wings

sudo mkdir -p /etc/pterodactyl
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")"
sudo chmod u+x /usr/local/bin/wings
/usr/local/bin/wings --version

12. Create the node and load config.yml

  1. Open the admin area.
  2. Create a node under Nodes.
  3. Set the Wings FQDN, for example node1.example.com.
  4. Open Configuration.
  5. Copy the YAML to /etc/pterodactyl/config.yml or run the generated token command.

When Panel uses HTTPS, Wings also needs a valid certificate for its own FQDN.

13. Test and daemonize Wings

sudo wings --debug
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 daemon-reload
sudo systemctl enable --now wings
sudo systemctl status wings --no-pager

14. Configure allocations and firewall

hostname -I | awk '{print $1}'
sudo ss -lntup

Open only required ports: 80/443 for Panel, 8080 for Wings, 2022 for SFTP, and the exact allocation range assigned to game servers.

Validation checklist

sudo nginx -t
sudo systemctl is-active nginx php8.3-fpm mariadb redis-server pteroq docker wings
curl -I https://panel.example.com
sudo journalctl -u pteroq -n 50 --no-pager
sudo journalctl -u wings -n 100 --no-pager
sudo docker info

The deployment is ready when you can sign in, the node has a green heart, Wings reports no errors, and a test server installs, starts, and accepts connections.

Common problems

Node is red

dig +short node1.example.com
curl -vk https://node1.example.com:8080
sudo timedatectl status

Wings cannot reach Docker

sudo systemctl status docker --no-pager
sudo docker info
sudo journalctl -u docker -n 100 --no-pager

502 Bad Gateway

sudo systemctl status php8.3-fpm --no-pager
ls -l /run/php/php8.3-fpm.sock
sudo tail -n 100 /var/log/nginx/error.log

Queues or email do not run

sudo systemctl status pteroq --no-pager
sudo journalctl -u pteroq -n 100 --no-pager
sudo crontab -l
redis-cli ping

Rollback

sudo cp /var/www/pterodactyl/.env /root/pterodactyl-backup/
sudo mariadb-dump panel > /root/pterodactyl-backup/panel.sql
sudo tar -czf /root/pterodactyl-backup/pterodactyl-files.tar.gz /var/www/pterodactyl /etc/pterodactyl
sudo systemctl disable --now wings pteroq

For a fresh VPS, restoring the pre-installation snapshot is usually safer than removing every package manually.

Ongoing maintenance

  • Read Panel and Wings release notes before updates.
  • Back up the database, .env, APP_KEY, config.yml, and game data.
  • Apply Ubuntu security updates regularly.
  • Monitor disk, RAM, CPU, I/O, and Docker image usage.
  • Never expose Redis or database ports to the public Internet.
  • Enable two-factor authentication for administrators.

FAQ

Can Panel and Wings share one VPS?

Yes for testing and small installations. Separating them is preferable in production.

Does Pterodactyl work on OpenVZ or LXC?

Not reliably. Official documentation warns about Docker limitations. Use KVM or dedicated hardware.

Do I need a domain?

It is strongly recommended and effectively required for clean HTTPS configuration.

How much RAM does Pterodactyl need?

The game servers determine most resource usage. Size the node for players, mods, plugins, and workload, then reserve headroom for Docker and the operating system.

Conclusion

A proper Pterodactyl deployment does not end at the login screen. Validate queues, cron, Docker, Wings, TLS, allocations, backups, and recovery so the platform remains manageable after launch.

Official sources

How to Install Pterodactyl Panel and Wings on an Ubuntu 24.04 VPS
GeneralCVE-2026-53359VPSMinecraft ServersServer AdministrationDockerPterodactyl
Did you like this article?Share it:

About the Author

Mizael Segovia

Mizael Segovia

CEO & Desarrollador Full Stack y DevOps en Teramont Host

Keep exploring related guides, news, and analysis.

CTA Pattern

Need Help with Your Server?

Our team is ready to help with any questions or issues you may have.

Contact Us