Beginner

Install Pterodactyl Panel on Any VPS (2026)

โฑ๏ธ 15 min read ๐Ÿง Ubuntu 22.04 / 24.04 ๐Ÿ“… Updated May 2026 ๐Ÿณ Docker Compose

Pterodactyl Panel is the most popular open-source game server management panel. This guide walks you through a complete Docker Compose install โ€” the cleanest and most maintainable setup method in 2026.

โ„น๏ธ
What you need: A VPS running Ubuntu 22.04 or 24.04, a domain name (optional but recommended), and basic comfort with SSH. If you don't have a VPS yet, see our VPS picks guide.

1. Prepare Your VPS

Connect via SSH

Log into your VPS as root or a sudo user:

ssh root@YOUR_SERVER_IP

Update the system

apt update && apt upgrade -y

Install Docker & Docker Compose

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
โœ…
Verify Docker is working: docker --version should output something like Docker version 27.x

2. Set Up the Docker Compose Stack

Create the project directory

mkdir -p /srv/pterodactyl && cd /srv/pterodactyl

Create docker-compose.yml

Paste this entire file โ€” it sets up the Panel, MariaDB, and Redis in one shot:

version: '3.8'

services:
  database:
    image: mariadb:10.5
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: panel
      MYSQL_USER: pterodactyl
      MYSQL_PASSWORD: dbpassword
    volumes:
      - db_data:/var/lib/mysql

  cache:
    image: redis:alpine
    restart: always

  panel:
    image: ghcr.io/pterodactyl/panel:v1.11.10
    restart: always
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - database
      - cache
    environment:
      APP_URL: "http://YOUR_SERVER_IP"
      APP_TIMEZONE: "UTC"
      APP_SERVICE_AUTHOR: "your@email.com"
      DB_HOST: database
      DB_PORT: 3306
      DB_DATABASE: panel
      DB_USERNAME: pterodactyl
      DB_PASSWORD: dbpassword
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      QUEUE_DRIVER: redis
      REDIS_HOST: cache
    volumes:
      - panel_var:/app/var
      - panel_nginx:/etc/nginx/http.d
      - panel_logs:/app/storage/logs
      - panel_certs:/etc/letsencrypt

volumes:
  db_data:
  panel_var:
  panel_nginx:
  panel_logs:
  panel_certs:
โš ๏ธ
Change the passwords! Replace rootpassword and dbpassword with strong unique passwords before deploying.

3. Start the Panel

docker compose up -d

Wait ~60 seconds for all containers to start and the database to initialize. Then check status:

docker compose ps

All three services (database, cache, panel) should show Up or running.

4. Create Your Admin User

docker compose exec panel php artisan p:user:make

Follow the prompts โ€” enter your email, username, name, and set a password. When asked "Should this user be an administrator?", type yes.

5. Access Your Panel

Open your browser and navigate to:

http://YOUR_SERVER_IP

Log in with the admin account you just created. You should see the Pterodactyl dashboard. ๐ŸŽ‰

๐ŸŽ‰
Panel is up! Next step is installing Wings (the daemon that actually runs game servers) on the same or a separate machine. See our Wings setup guide.

6. Install Wings (Game Server Daemon)

Wings is the backend that runs your actual game servers. Install it on the same machine (or a separate node):

# Install Wings
mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings \
  "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64"
chmod +x /usr/local/bin/wings

Then in your Pterodactyl Panel:

  1. Go to Admin โ†’ Nodes โ†’ Create New
  2. Fill in your server IP, name, and memory/disk limits
  3. Click Generate Token and copy the config
  4. Paste the config into /etc/pterodactyl/config.yml on your server
  5. Start Wings: wings --debug (test first), then set up the systemd service

Create Wings systemd service

cat > /etc/systemd/system/wings.service << 'EOF'
[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
EOF

systemctl enable --now wings

7. Create Your First Game Server

Back in the panel:

  1. Go to Admin โ†’ Servers โ†’ Create New
  2. Select the node you just added
  3. Choose a game egg (e.g., Minecraft Paper)
  4. Set memory and disk limits
  5. Hit Create โ€” your server will install automatically
๐Ÿ’ก
Need custom eggs not included by default? Download our free egg collection โ€” includes FiveM, Valheim, Rust, CS2, and more.

Common Issues

Panel shows 502 Bad Gateway

The PHP-FPM service inside the container is still starting. Wait 30 seconds and refresh. If it persists: docker compose restart panel

Wings can't connect to panel

Check your firewall โ€” port 8080 (Wings API) must be open. On Ubuntu: ufw allow 8080. Also verify the Panel URL in your Node config matches exactly.

Database connection refused

Make sure all three containers are running: docker compose ps. If the DB container exited, check logs: docker compose logs database

Server stuck on "Installing"

Wings may not be connected. Check: systemctl status wings and look at Wings logs: journalctl -u wings -f

What's Next?