Pterodactyl combines a browser-based Panel with Wings and Docker to create and control separate game-server containers. It can manage compatible Minecraft, Factorio, Luanti and other game servers from one interface.
This guide takes you from the first administrator login through nodes, allocations, eggs and server creation, then explains files, SFTP, users, schedules, backups, commands, performance, security, updates and troubleshooting. The service remains self-managed, so you are responsible for operating and protecting the complete installation.
Three stages in this Pterodactyl guide
Understand The Architecture
Know which tasks belong to the Panel, Wings, Docker, an egg or the game itself.
Build A Working Server
Create a node, add allocations, import a suitable egg and provision the first container.
Operate It Safely
Manage users, files, schedules, backups, updates, logs and common failures.
The image provides a faster starting point, but it does not turn the service into managed hosting. Before opening the Panel publicly, verify DNS, SSL, administrator access, Wings connectivity, firewall rules, mail delivery, updates and backups.
View Pterodactyl Game Server Panel UK →What Is Pterodactyl?
Pterodactyl is an open-source game server management panel. It gives administrators and users a browser interface for operating supported game servers without giving every user unrestricted access to the underlying Linux host.
It is important to separate the management panel from the games. Pterodactyl does not turn one game into another, and it does not automatically know how every dedicated server should be installed. The platform relies on templates, Docker images, allocations and configuration supplied for each application.
| Term | What It Means | Where You Manage It |
|---|---|---|
| Panel | The website, administrator area, API, database and user interface. | Browser and Linux web stack |
| Wings | The node service that controls containers, files, networking and server lifecycle actions. | Linux systemd service |
| Node | A machine running Wings and Docker. One Panel can manage one or more nodes. | Admin → Nodes |
| Allocation | An IP address and port that can be assigned to a server. | Admin → Node → Allocations |
| Nest | An organisational group for related eggs. | Admin → Nests |
| Egg | A template defining installation, startup, variables, configuration and compatible images. | Admin → Nests → Egg |
| Docker image | The container environment containing the runtime and dependencies used by an egg. | Egg and server startup settings |
| Server | One provisioned game or application container with assigned resources and files. | Admin or user server view |
How The Panel, Wings And Docker Work Together
Admin and users
Web app and database
Docker and game containers
The browser connects to the Panel. The Panel records users, nodes, servers, permissions and configuration in its database. When a server owner presses Start or opens the console, the Panel communicates with Wings. Wings then performs the requested operation against the correct Docker container.
This separation explains several common problems. A working website does not prove Wings is online. A running Wings service does not prove the Panel has the right node configuration. A healthy container does not prove the game is listening on the allocation players are using.
Can Panel and Wings run on the same server?
Yes, particularly for a small self-managed deployment. The same virtual server can host the Panel, database, cache, Wings, Docker and game containers. The disadvantage is that all services share the same CPU, RAM, storage and failure domain.
When should you use a separate node?
Separate nodes become useful when you need more capacity, want the public Panel separated from game workloads, operate different locations or need to move new game servers away from a busy machine. Each additional node needs its own Wings configuration, Docker installation, allocations, firewall rules and capacity planning.
First Login And Post-Deployment Checks
Do not create public game servers immediately after the first login. Confirm the underlying services and administrator settings first.
1. Record the server details
- Public IPv4 address and server hostname
- Root or sudo-capable SSH login
- Panel administrator URL and account
- Node FQDN and Wings port
- Panel database name and database user
- Location of the Panel directory and Wings configuration
2. Connect through SSH
ssh root@YOUR_SERVER_IP
# Or use a non-root administrator account
ssh admin@YOUR_SERVER_IP
Replace the example address with the actual server IP. Prefer SSH keys, keep a separate recovery route and do not paste secrets into public tickets or screenshots.
3. Check the core services
sudo systemctl status wings --no-pager
sudo systemctl status docker --no-pager
sudo systemctl status nginx --no-pager
# Database and cache service names may differ
sudo systemctl status mariadb --no-pager
sudo systemctl status redis-server --no-pager
A different web server, database service or PHP-FPM service may be installed. Use systemctl list-units --type=service or inspect the web configuration instead of assuming every image uses identical names.
4. Verify the Panel scheduler and queue worker
Pterodactyl uses Laravel scheduled tasks and a queue worker. Check the root crontab and the worker service created by the installation:
sudo crontab -l
sudo systemctl list-units --type=service | grep -Ei 'pteroq|queue|pterodactyl'
# A standard scheduler entry runs every minute:
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
Do not paste the cron line directly into the shell. It belongs in the appropriate crontab. The real Panel path may differ from /var/www/pterodactyl.
5. Check DNS and SSL
The Panel hostname and node hostname should resolve to the intended server. Check both from outside the machine. Confirm that the certificate covers the exact hostname and that the Panel's node SSL settings match Wings.
Create a unique administrator password, enable two-factor authentication, verify mail delivery, close unused ports, update the operating system and test backups before sending login details to other people.
Create And Configure A Node
A node represents a machine that runs Wings and game containers. Even when the Panel and Wings share one VPS, the administrator interface still needs a correctly configured node.
Create a location
- Open the administrator area.
- Go to Locations.
- Create a short code such as
UK-LON. - Add a clear description such as London game server node.
Create the node
- Go to Nodes and choose Create New.
- Enter a descriptive node name.
- Select the location.
- Enter the fully qualified domain name used by Wings.
- Choose whether the node communicates over SSL.
- Enter the total memory and disk available for allocation.
- Set sensible overallocation values. Start conservatively.
- Save the node.
Copy the node configuration to Wings
Open the node's Configuration tab. Use the configuration supplied by the Panel and place it in the Wings configuration file expected by the installation. A common path is:
/etc/pterodactyl/config.yml
After changing the configuration, restart Wings and inspect its status:
sudo systemctl restart wings
sudo systemctl status wings --no-pager
sudo journalctl -u wings -n 100 --no-pager
Create allocations
An allocation is the IP and port combination assigned to a game server. Open the node's Allocations tab, enter the node IP and add individual ports or a controlled range.
Use a documented range, keep reserved services out of it and make sure the server firewall and upstream network permit the same ports. Every active game server needs an appropriate unused allocation.
Understand Nests, Eggs And Docker Images
An egg describes how a game or application should be installed and started. It can define an installation script, startup command, environment variables, file parsing rules, stop command and permitted Docker images.
What to check before importing an egg
- The repository and maintainer are trustworthy.
- The egg has recent commits or clear compatibility information.
- The install script downloads software from expected official sources.
- The Docker image comes from a recognised registry and publisher.
- The startup command and required variables are documented.
- The game licence permits the intended deployment.
- The default port matches the game and your allocation plan.
- Open issues do not describe unresolved data loss or security problems.
Import an egg
- Download the egg JSON file from its maintained source.
- Open Admin → Nests.
- Create or select the correct nest.
- Choose Import Egg.
- Select the JSON file and destination nest.
- Open the imported egg and inspect every section before creating a server.
Important egg sections
| Section | What To Review |
|---|---|
| Docker Images | Allowed runtimes, architecture and whether the image is still maintained. |
| Startup | The exact executable, memory flags, file names and variables used to start the game. |
| Stop Command | The graceful command sent before Wings terminates the process. |
| Variables | Defaults, validation rules, user visibility and whether sensitive values are exposed. |
| Install Script | Repositories, downloads, licence acceptance, extraction paths and expected output. |
| Configuration | File parsing, startup detection and log behaviour. |
The official Pterodactyl game-eggs repository and associated egg catalogue are useful starting points, but you should still review the selected template. Community availability does not make every egg suitable for every production environment.
Create Your First Game Server
- Open Admin → Servers → Create New.
- Enter the server name and optional description.
- Select the owner or create the user first.
- Choose the node.
- Select the primary allocation and optional additional allocations.
- Enter the memory, disk and CPU limits.
- Set swap, I/O weight, database and backup limits deliberately.
- Select the nest and egg.
- Choose the supported Docker image.
- Review startup variables and save the server.
Resource limits are container limits
The values entered for one server do not reserve extra physical resources outside the node. Keep enough capacity for Linux, the Panel stack, Wings, Docker, caches, logs and other containers. Overallocating every server can produce severe slowdowns or out-of-memory failures when several instances become busy together.
Watch the installation
Open the server's console after creation. The installer should download and prepare the required files. Do not repeatedly reinstall a failing server without checking the first error. Read the console, Wings journal, disk use and network connectivity.
How To Use The Pterodactyl Server Interface
Console
The console displays the game process output and accepts commands supported by that game. Start, stop, restart and kill are different operations. Use the game's normal stop command whenever possible. Kill should be reserved for an unresponsive process because it can interrupt saves or writes.
Files
The browser file manager can create folders, edit text files, upload files and manage archives. It is convenient for small changes. Use SFTP for large worlds, mod packs or many files.
Databases
When an administrator has configured database hosts and allowed database creation, a server owner can create database credentials for plugins or applications. Do not reuse the Panel's own database account.
Schedules
Schedules automate power actions, commands and backups. Use them for regular saves, warnings, restarts and backup jobs. Avoid creating overlapping tasks that restart a server while a backup or update is running.
Users
Subusers can be granted only the permissions they need. A moderator may need console access but not permission to delete backups, change startup variables or manage other users.
Backups
Backups can protect selected game-server files using the storage driver configured for the Panel. Exclude disposable caches where appropriate, but never exclude the world, save, configuration or identity files required for restoration.
Network
The network section displays the primary and additional allocations assigned to the server. Adding an allocation in the node does not automatically attach it to every server.
Startup
Startup variables can control versions, file names, branches and other egg-specific settings. Change them only after reading the egg documentation and backing up the server.
Settings
This area includes the server name, SFTP connection details and destructive actions. Reinstalling a server can replace files according to the egg installer. Download or back up important data first.
Manage Files With The Browser Or SFTP
Use the browser file manager for
- Editing one configuration file
- Creating or renaming a directory
- Uploading a small plugin or mod
- Compressing a folder before download
- Quickly reading logs
Use SFTP for
- Large world uploads
- Mod packs with many files
- Bulk downloads before a migration
- Repeated administration from FileZilla or another client
Find the correct SFTP details
Open the server's Settings page and use the exact host, port and username shown there. Pterodactyl SFTP is provided through Wings and may use a port other than normal SSH.
Uploading over an actively changing world can leave an inconsistent set of files. Use the game's save command, stop it cleanly, create a backup, upload the replacement and then inspect the console during the next start.
Administrator Users, Owners And Subusers
Create an administrator from the command line
Pterodactyl includes Artisan commands for administration. Enter the Panel directory and inspect the commands available on the installed release:
cd /var/www/pterodactyl
sudo -u www-data php artisan list | less
# Common interactive command for creating a user
sudo -u www-data php artisan p:user:make
The Panel path and web-service user can differ. Use the owner of the existing Panel files rather than blindly changing ownership or running all maintenance as root.
Apply least privilege
- Keep administrator accounts limited to trusted operators.
- Create separate normal accounts for day-to-day server use.
- Grant subusers only the required server permissions.
- Enable two-factor authentication.
- Remove departed users promptly.
- Review activity logs after unexpected changes.
Create Safe Pterodactyl Schedules
A schedule contains one or more tasks. A task can send a command, perform a power action or create a backup. The schedule determines when the task sequence starts, while the task offsets control the spacing between actions.
Example: warn, save and restart
- Create a daily schedule at the desired quiet time.
- Add a console command that warns players.
- Add a second warning with an offset.
- Add the game's save command.
- Add a restart power action after enough time has passed.
- Run the schedule manually while watching the console.
Example task sequence
| Offset | Action | Example |
|---|---|---|
| 0 seconds | Command | Warn players that restart occurs in five minutes |
| 240 seconds | Command | Warn that one minute remains |
| 285 seconds | Command | Run the game's save command |
| 300 seconds | Power action | Restart |
Use the real command syntax for the selected game. A Minecraft command is not automatically valid for Factorio, Luanti or another application.
Configure Backups And Test Restores
Pterodactyl can use local backups through Wings or an S3-compatible storage configuration. The storage driver is a Panel-level administrator decision.
What a game-server backup should include
- Worlds, saves and player data
- Configuration and startup-related files
- Plugins, mods and their configuration
- Permissions, allow-lists and ban data
- Any application database dumps not stored directly in the file tree
Panel infrastructure needs separate backups
A backup made from one server's Backups tab does not replace infrastructure backups. Separately protect:
- The Panel database
- The Panel
.envfile - Web-server and PHP configuration
- The Wings
config.yml - SSL and DNS configuration records
- Any custom eggs and installation scripts
Example database backup
# Replace the placeholders and avoid exposing the password in shared shell history.
sudo mysqldump --single-transaction --routines --triggers \
-u PANEL_DATABASE_USER -p PANEL_DATABASE_NAME \
> /root/pterodactyl-panel-$(date +%F).sql
Copy the resulting file away from the server, encrypt sensitive backups and test restoration on a separate system. Delete outdated unencrypted dumps according to your retention policy.
Essential Pterodactyl And Linux Commands
Wings service commands
sudo systemctl status wings --no-pager
sudo systemctl restart wings
sudo systemctl stop wings
sudo systemctl start wings
sudo systemctl enable wings
sudo journalctl -u wings -n 100 --no-pager
sudo journalctl -u wings -f
Docker checks
sudo systemctl status docker --no-pager
sudo docker ps
sudo docker ps -a
sudo docker stats
sudo docker system df
Do not manually remove Pterodactyl containers, volumes or networks merely because they look unused. Identify what Wings manages and create backups first.
Panel commands
cd /var/www/pterodactyl
# Show the installed application version and environment details where supported
sudo -u www-data php artisan about
# List every command available on this installed release
sudo -u www-data php artisan list
# Clear application caches after a documented configuration change
sudo -u www-data php artisan optimize:clear
# Restart Laravel queue workers after a documented deployment or update
sudo -u www-data php artisan queue:restart
Use the web-service account and real Panel path. Cache clearing and queue restarts are useful maintenance tools, but they do not repair an invalid database, broken permissions or incompatible release.
Disk, memory and listening ports
df -h
df -i
free -h
uptime
sudo ss -lntup
sudo du -xh /var/lib/docker --max-depth=1 | sort -h
sudo du -xh /var/lib/pterodactyl --max-depth=2 | sort -h
Web and PHP logs
sudo nginx -t
sudo systemctl status nginx --no-pager
sudo journalctl -u nginx -n 100 --no-pager
# Find the installed PHP-FPM service name
sudo systemctl list-units --type=service | grep -i php
Game Console Commands: Examples And Limits
Commands entered in the Pterodactyl console are processed by the running game server. They are not Linux shell commands. Exact syntax depends on the game, server software and installed extensions.
Minecraft Java examples
list
save-all
whitelist list
whitelist add PlayerName
op PlayerName
deop PlayerName
stop
Some console implementations do not require the leading slash used by players in chat. Confirm the syntax supported by the installed server software.
Factorio examples
/help
/server-save
/players
/ban USERNAME REASON
/unban USERNAME
Administrative availability can depend on the server state and permissions. Test commands on a non-production save where appropriate.
Luanti examples
/help
/status
/grant PLAYERNAME PRIVILEGE
/revoke PLAYERNAME PRIVILEGE
/teleport PLAYERNAME X,Y,Z
/shutdown
Privileges and commands vary with the selected Luanti game, mods and engine release.
Performance, RAM, CPU And Storage Planning
The node must support the Panel services and every active container. A server that is idle during setup may consume much more CPU, memory and disk once players join, worlds grow and backups run.
| Pressure | Common Symptoms | What To Check |
|---|---|---|
| CPU | Tick lag, slow simulation, delayed console responses | docker stats, load average, game profiler and busy periods |
| RAM | Container termination, swapping, kernel OOM messages | free -h, container limits, kernel journal |
| Disk capacity | Failed installs, failed backups, database errors | df -h, Docker usage, worlds, logs and archives |
| Inodes | Cannot create files despite free gigabytes | df -i and directories with huge file counts |
| Network | Disconnects, poor downloads, inaccessible ports | Firewall, allocations, listening sockets, routing and packet loss |
Do not allocate 100% of node memory
Keep memory for the operating system, Panel, database, cache, Wings, Docker and filesystem cache. If the node has 8GB RAM, assigning 8GB across game containers leaves no safe margin when everything becomes active.
When dedicated CPU VDS is useful
Dedicated CPU resources are a stronger foundation when several active servers compete for CPU, a mod pack performs heavy world generation, Factorio simulation remains busy or performance becomes inconsistent during sustained demand.
Pterodactyl Security Checklist
- Use unique administrator credentials and two-factor authentication.
- Use SSH keys and restrict direct root access when a tested sudo account exists.
- Install operating-system security updates regularly.
- Keep the Panel, Wings and compatible Docker images updated.
- Use valid SSL certificates for the Panel and node hostnames.
- Open only the ports required for SSH, web access, Wings, SFTP and assigned games.
- Do not give normal users administrator access.
- Review imported egg scripts and images.
- Back up the Panel database and configuration away from the node.
- Monitor login, Panel activity, Wings and game logs.
- Protect database and object-storage credentials.
- Test account recovery and restore procedures before an emergency.
How To Update Pterodactyl Safely
Panel and Wings releases can introduce required dependencies, database migrations, configuration changes and compatibility requirements. Use the official upgrade documentation for the exact source and target versions.
Safe update sequence
- Read the release notes and upgrade guide completely.
- Check supported PHP, database, Redis, Docker and operating-system requirements.
- Back up the Panel database,
.env, Wings configuration and custom web configuration. - Record the current Panel and Wings versions.
- Plan a maintenance window.
- Follow the official commands for that release exactly.
- Run required migrations and restart the queue worker.
- Update Wings when required by the compatibility notes.
- Verify login, node connectivity, console, SFTP, schedules and backups.
- Keep the pre-update backups until the installation has operated successfully.
Download locations, prerequisites and migration steps can change. Commands from a video, forum post or previous release may be incomplete for the release you are installing.
Troubleshooting Common Pterodactyl Problems
Wings appears offline
sudo systemctl status wings --no-pager
sudo journalctl -u wings -n 150 --no-pager
sudo ss -lntup
curl -I https://YOUR_NODE_HOSTNAME
Check the active config.yml against the node configuration displayed in the Panel. Verify the hostname, SSL setting, ports, firewall and certificate.
Server is stuck installing
- Read the install output rather than repeatedly reinstalling.
- Check Wings logs.
- Check
df -handdf -i. - Verify DNS and outbound downloads.
- Confirm the egg's source URL and Docker image still exist.
- Review architecture and dependency compatibility.
Server starts and immediately stops
- Read the final console lines.
- Confirm the startup executable and file names.
- Check licence acceptance or first-run configuration.
- Check Java, .NET or runtime compatibility.
- Confirm the assigned memory is enough.
- Verify that the main port matches the server configuration.
Players cannot connect
sudo ss -lntup
sudo ufw status verbose
sudo docker ps
Confirm the game process is listening, the allocation belongs to that server, the firewall allows the correct TCP or UDP protocol, and players are using the public IP or hostname with the right port.
Backups fail
- Check storage capacity and inodes.
- Check Wings logs and server backup output.
- Verify S3-compatible credentials, endpoint and bucket permissions where used.
- Check file exclusions and extremely large temporary directories.
- Test a small backup before retrying a very large world.
Panel gives a 500 error
cd /var/www/pterodactyl
sudo -u www-data php artisan about
sudo -u www-data php artisan optimize:clear
# Inspect application and web-service logs
sudo tail -n 150 storage/logs/laravel-*.log
sudo journalctl -u nginx -n 100 --no-pager
Do not change permissions recursively without understanding the correct owner and writable directories. A 500 error may come from environment configuration, database access, PHP modules, permissions or an incomplete update.
High disk usage
df -h
df -i
sudo docker system df
sudo du -xh /var/lib/docker --max-depth=1 | sort -h
sudo du -xh /var/lib/pterodactyl --max-depth=2 | sort -h
Find the cause before deleting anything. Common sources include world data, local backups, installer archives, logs, unused images and abandoned server data.
Pterodactyl Production Launch Checklist
- The Panel and node hostnames resolve correctly.
- SSL is valid for both browser and Wings communication.
- Administrator accounts use unique passwords and two-factor authentication.
- Wings, Docker, web server, database, cache, scheduler and queue worker are healthy.
- Allocations use documented ports and correct protocols.
- Imported eggs and Docker images have been reviewed.
- The first game server installs, starts, stops and restarts cleanly.
- External players can connect through the public allocation.
- SFTP works with the server-specific credentials.
- Subusers have only the permissions they require.
- Schedules have been tested manually.
- Game-server and Panel infrastructure backups exist off-server.
- A restore has been tested.
- CPU, memory, disk, inodes and logs have been checked under real load.
- The update and incident-recovery process is documented.
Official Pterodactyl Resources
Use the official documentation and project repositories as the source of truth for installation, upgrades and release-specific behaviour: