Pterodactyl is a free, open-source game server management panel. It gives you (and your players or customers) a web interface to start, stop, configure and update game servers, with a live console, file manager, SFTP, scheduled tasks, backups and sub-users. Each game server runs in its own Docker container, which isolates games from each other. It supports Minecraft, Rust, ARK, CS2, Valheim, Terraria and many more through eggs (server templates).
A community fork, Pelican Panel, is a newer alternative with a similar architecture.
Architecture
- Panel: a PHP (Laravel) web app with MySQL/MariaDB and Redis. It manages users, servers and nodes.
- Wings: a Go daemon on each node (machine that runs game servers). It controls Docker containers, and exposes an API and SFTP.
The panel and Wings can share one server, or the panel can run on a small VPS while game servers run on bigger nodes.
Requirements
- Ubuntu 22.04/24.04 or Debian 11/12.
- Panel: 1 vCPU and 1 GB RAM is enough on its own.
- Nodes: RAM and CPU for the games you’ll host. See Minecraft server RAM.
- A domain for the panel (
panel.example.com) and one for each node (node1.example.com), both with HTTPS. - KVM virtualisation for Wings (Docker doesn’t run on OpenVZ). VPS.DO VPS plans are KVM. See KVM vs OpenVZ vs LXC.
Install the panel (summary)
The official documentation (pterodactyl.io) has the full, version-specific steps. In outline:
# 1. Dependencies: PHP 8.x with extensions, MariaDB, Redis, Nginx, Composer
sudo apt install -y php8.3-{cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb-server nginx redis-server tar unzip git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
# 2. Download the 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/
# 3. Database + environment
# CREATE DATABASE panel; CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY '…'; GRANT ALL ON panel.* …
sudo cp .env.example .env
sudo composer install --no-dev --optimize-autoloader
sudo php artisan key:generate --force
sudo php artisan p:environment:setup
sudo php artisan p:environment:database
sudo php artisan migrate --seed --force
sudo php artisan p:user:make # first admin user
sudo chown -R www-data:www-data /var/www/pterodactyl
- Add the cron job (
* * * * * php /var/www/pterodactyl/artisan schedule:run) and the queue worker systemd service (pteroq). - Configure Nginx with PHP-FPM for
panel.example.com, and get a certificate with Certbot.
Back up the APP_KEY in .env. It encrypts data in the database. See Nginx with PHP-FPM and Let’s Encrypt.
Install Wings on a node
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable --now docker
sudo mkdir -p /etc/pterodactyl
sudo curl -Lo /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
Get a certificate for node1.example.com (Certbot standalone). In the panel: Admin → Nodes → Create, with the FQDN, SSL, memory and disk limits. Then open the node’s Configuration tab, and copy the generated config to /etc/pterodactyl/config.yml. Run Wings as a systemd service (wings.service from the docs), and check that the node shows a green heart in the panel.
Allocations, eggs and servers
- Allocations: in the node settings, add IP and port ranges (for example 25565–25600) that servers can use.
- Eggs: Pterodactyl ships eggs for Minecraft (Paper, Forge, Vanilla, Bungee), Source games, Rust and more. Import community eggs for other games (JSON files).
- Create a server: Admin → Servers → Create: owner, node, allocation, egg, memory, CPU, disk limits, and startup variables. Wings pulls the Docker image and installs the game.
Users then manage their servers at panel.example.com: console, files, SFTP (port 2022), schedules (restarts, backups), databases and sub-users.
Firewall
sudo ufw allow 80,443/tcp # panel / Wings API behind HTTPS
sudo ufw allow 8080/tcp # Wings API (default port), if not proxied
sudo ufw allow 2022/tcp # SFTP
sudo ufw allow 25565:25600/tcp # game allocations (adjust per game, add /udp where needed)
Remember that Docker-published ports bypass UFW’s normal rules. See Docker and UFW.
Security
- Enable 2FA for admin accounts, and use strong passwords.
- Keep the panel, Wings and eggs updated. Panels are a target because they control many servers.
- Limit each server’s CPU, RAM and disk, so one game can’t starve the node.
- Back up the panel database,
.env, and server data (Wings can back up to local storage or S3). See backup strategy.
Quick reference
| Item | Value |
|---|---|
| Panel | Laravel + MariaDB + Redis (/var/www/pterodactyl) |
| Node daemon | Wings (/etc/pterodactyl/config.yml) |
| Wings API / SFTP | 8080 / 2022 |
| Templates | Eggs |
| First admin | php artisan p:user:make |
Related: AMP game panel, LinuxGSM, and game server VPS.