Pterodactyl
Documentation

Install, run and extend the Panel and Wings, for 1.x and the 2.0 pre-release.

Your server

Web server
SSL
PHP

/etc/nginx/sites-available/pterodactyl.conf

server {
    listen 443 ssl http2;
    server_name <domain>;
    root /var/www/pterodactyl/public;

    ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Stable

Pterodactyl 1.x

The current release. Start here unless you are testing what comes next.

Pre-release

Pterodactyl 2.0

The next major version, with extensions and a new API. Not yet for production.

The Panel manages.
Wings runs.

Your browser talks to the Panel. The Panel talks to Wings on each node, and players connect straight to their game servers.

How the parts connect

44380802022808044333066379Dockergame portBrowserSFTP clientPanelweb server + PHPWingson each nodeDatabaseRedisPlayersGame serversDocker containers

The Panel manages everything, and Wings runs it. The Panel never connects to your game servers. Players connect to them directly, on the ports you assign to each server.

Extend the Panel
without forking it.

Extensions add pages, tabs, table columns and API routes through slots the Panel exposes.

Slots

Pterodactyl

Survival SMP

play.example.com:25565

StartRestartStop

[04:00:01 INFO]: Starting minecraft server version 26.3

[04:00:03 INFO]: Preparing level "world"

[04:00:09 INFO]: Done (6.2s)! For help, type "help"

> _

CPU

41 %

Memory

3.3 GiB

Disk

8.6 GiB

server.console.before receives { data: SdkServer }. The server this spot belongs to, as the Client API returns it.

import { definePterodactylExtension } from '@pterodactyl/sdk';export default definePterodactylExtension({    setup({ slots }) {        slots.register('server.console.before', ({ data }) => <p>{data.attributes.name}</p>);    },});

Find the fix
by its error.

Fixes for the problems people hit most, from a node that will not connect to a console stuck connecting.

Match an error to its fix

Common problems

Automate it
over the API.

Everything the Panel does is an API call. A client key acts as one user on their servers; an application key administers the Panel. The reference is generated from the API's own specification.

GET/api/client/servers/1a7ce997/resources

curl "https://panel.example.com/api/client/servers/1a7ce997/resources" \
  -H "Authorization: Bearer ptlc_••••••••" \
  -H "Accept: application/json"

200 OK

{
  "object": "stats",
  "attributes": {
    "current_state": "running",
    "is_suspended": false,
    "resources": {
      "memory_bytes": 1285394432,
      "cpu_absolute": 44.21,
      "disk_bytes": 536870912,
      "network_rx_bytes": 694220,
      "network_tx_bytes": 337156
    }
  }
}