OrbitHost
Game hosting

Install Pterodactyl Panel on Ubuntu 24.04 VPS

Install Pterodactyl Panel with Nginx, MariaDB/Redis, PHP, and Wings on Ubuntu 24.04. Covers SSL, firewall ports, and node sizing for FiveM and Minecraft.

By Sofia Martinez · Game Hosting Lead12 min read
Author
Sofia Martinez
Game Hosting Lead

Sofia runs OrbitHost game stacks — FiveM FXServer, Minecraft Paper/Purpur, and Pterodactyl Panel + Wings. She tunes tick rates, egg configs, and DDoS-aware ports so EU RP and survival communities stay online.

Architecture in one minute

Pterodactyl has two parts: Panel (Laravel web UI + API) and Wings (Go daemon that spawns Dockerized game servers). One Panel can manage many Wings nodes.

For EU RP cities, keep Wings close to players — Frankfurt or Amsterdam — and put Panel wherever your admins live, as long as HTTPS is solid. On OrbitHost, a Pro Ryzen NVMe VPS is a common all-in-one starter; split nodes when player counts grow.

Base packages and MariaDB

Start from an updated Ubuntu 24.04 KVM VPS. Install Nginx, MariaDB (or MySQL), Redis, and the PHP extensions Panel expects. Create a dedicated database and user — do not reuse root for the app.

Set a strong DB password and store it in Panel’s `.env`. Enable Redis for queues and cache so the panel stays responsive under many simultaneous console streams.

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server redis-server \
  php8.3 php8.3-{fpm,mysql,gd,mbstring,bcmath,xml,curl,zip,intl,redis} \
  composer git curl unzip

sudo mysql -e "CREATE DATABASE panel;"
sudo mysql -e "CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'CHANGE_ME_STRONG';"
sudo mysql -e "GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1';"
sudo mysql -e "FLUSH PRIVILEGES;"

Download and configure the Panel

Official releases live on GitHub. Install into `/var/www/pterodactyl`, run Composer, copy `.env.example`, then generate the app key. Point DB and Redis settings at localhost.

Run migrations and create the first admin user with the artisan commands from Pterodactyl’s documentation. Keep file ownership on `www-data` for the web tree.

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 composer install --no-dev --optimize-autoloader
sudo cp .env.example .env
sudo php artisan key:generate --force
# edit .env: DB_*, REDIS_*, APP_URL=https://panel.example.com
sudo php artisan migrate --seed --force
sudo php artisan p:user:make
sudo chown -R www-data:www-data /var/www/pterodactyl/*

Nginx + Let’s Encrypt

Serve Panel over HTTPS only. Create an Nginx site that proxies PHP-FPM and points `root` at `/var/www/pterodactyl/public`. Issue certificates with Certbot once DNS A/AAAA records hit your VPS IP.

Set `APP_URL` to the exact HTTPS hostname. Mixed content and cookie issues usually mean APP_URL still says http:// or a wrong domain.

server {
    listen 80;
    server_name panel.example.com;
    root /var/www/pterodactyl/public;
    index index.php;
    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;
    }
}

Queue workers and cron

Panel needs a scheduler and queue worker. Add the artisan schedule cron and a systemd unit (or supervisor) for `queue:work`. Without them, installs stall and mail/notifications lag.

After workers are up, log into the Panel UI and create a Location, then a Node. The node creation wizard shows the Wings token and configuration snippet you will paste on the game host.

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

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

Install Docker and Wings

On each game node (or the same VPS), install Docker Engine, then Wings. Wings’ config YAML comes from the Panel node page — place it at `/etc/pterodactyl/config.yml` and enable the systemd service.

Allocate enough disk under Wings’ data directory for server files and backups. NVMe helps when many Minecraft worlds or FiveM resources unpack at once.

# After Docker is installed (see OrbitHost Docker guide):
sudo mkdir -p /etc/pterodactyl /var/lib/pterodactyl
curl -L -o /usr/local/bin/wings \
  "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64"
sudo chmod +x /usr/local/bin/wings
# paste config.yml from Panel → Nodes → Configuration
sudo systemctl enable --now wings

Firewall checklist for game nodes

Open Panel HTTPS, Wings API/SFTP, and per-game ports. FiveM typically needs TCP/UDP 30120; Minecraft Java uses TCP 25565. Document every allocation so future you does not open the entire ephemeral range forever.

PletX DDoS protection on OrbitHost helps at the network edge, but you still want UFW/nftables hygiene and unused ports closed.

  • 80/443 — Panel / HTTPS
  • 8080 — Wings (default, confirm in config)
  • 2022 — Wings SFTP
  • Game ports per egg allocation

First server and ops tips

Create an egg (FiveM, Paper, etc.), assign memory/CPU limits honestly, and start with a staging server. Watch `wings` logs and container stats when players join — OOM kills are the usual silent failure.

Back up Panel’s database and Wings volumes on a schedule. For bigger cities, move to a dedicated Wings node or a bare-metal fleet and keep Panel light. See also our FiveM and Minecraft hosting guides for egg-specific tuning.

FAQ

Can Panel and Wings run on the same VPS?

Yes for small communities. Give the box enough RAM for Panel services plus game processes. Larger networks usually put Panel on a small VPS and Wings on heavier game nodes.

Which ports must be open?

Panel needs 80/443. Wings needs 8080 (configurable) for the daemon API and 2022 for SFTP by default, plus each game’s query/game ports (e.g. FiveM 30120, Minecraft 25565).

Do I need Docker for Wings?

Yes. Wings runs game servers inside Docker containers. Install Docker Engine before configuring Wings, then allocate egg images as usual.

Is Ubuntu 24.04 supported?

Use current Pterodactyl docs for PHP and extension versions. This guide follows the common LEMP-style Panel install pattern on Noble; always cross-check PHP version requirements when you upgrade Panel.

Managed alternative?

If you want less panel ops, OrbitHost also offers managed game products and FiveM-focused hosting so you are not babysitting MariaDB and Wings on day one.

Ready to Launch?

Create your server today.