CloudLinux.ro
Applications

How to install Pterodactyl on a Cloud VPS

Updated 7/18/2026

Pterodactyl is the open-source game server management panel: run multiple game servers in isolated containers with a polished web UI.

Your own game server means controlled latency, the mods and settings you choose, and no per-player-slot costs.

One-click install on cloudlinux.ro

The fastest way: Pterodactyl installs automatically at the first boot of a new server.

  1. Create a Cloud VPS from the control panel.
  2. In the configuration step, pick Pterodactyl from the app catalog.
  3. Start the server. The install runs in the background for a few minutes and its status shows on the server page.
  4. Access details and generated passwords are saved on the server in /root/app-credentials.txt.

Manual install on any Ubuntu server

If you prefer doing it yourself, below is the exact script our automatic install runs. Execute it as root on a fresh Ubuntu server (24.04 recommended). It stops at the first error, and when it finishes you will find the access details in /root/app-credentials.txt.

export DEBIAN_FRONTEND=noninteractive
curl -fsSL https://get.docker.com | sh
DB_PASS=$(openssl rand -base64 24 | tr -dc 'A-Za-z0-9' | cut -c1-20)
ADMIN_PASS=$(openssl rand -base64 24 | tr -dc 'A-Za-z0-9' | cut -c1-16)
IP=$(hostname -I | awk '{print $1}')
docker network create ptero
docker volume create ptero_db
docker volume create ptero_var
docker run -d --name ptero-db --restart=always --network ptero \
  -e MARIADB_DATABASE=panel -e MARIADB_USER=pterodactyl -e MARIADB_PASSWORD="$DB_PASS" -e MARIADB_RANDOM_ROOT_PASSWORD=1 \
  -v ptero_db:/var/lib/mysql mariadb:11
docker run -d --name ptero-redis --restart=always --network ptero redis:7
docker run -d --name panel --restart=always --network ptero -p 80:80 \
  -e APP_ENV=production -e APP_URL="http://${IP}" -e APP_TIMEZONE=Europe/Bucharest \
  -e DB_HOST=ptero-db -e DB_PORT=3306 -e DB_DATABASE=panel -e DB_USERNAME=pterodactyl -e DB_PASSWORD="$DB_PASS" \
  -e CACHE_DRIVER=redis -e SESSION_DRIVER=redis -e QUEUE_DRIVER=redis -e REDIS_HOST=ptero-redis \
  -v ptero_var:/app/var ghcr.io/pterodactyl/panel:latest
# Panel runs migrations on first boot, wait for them.
for i in $(seq 1 60); do
  docker exec panel php artisan migrate:status >/dev/null 2>&1 && break
  sleep 5
done
docker exec panel php artisan p:user:make --email="[email protected]" --username=admin \
  --name-first=Admin --name-last=Panel --password="$ADMIN_PASS" --admin=1 --no-interaction
docker exec panel php artisan p:location:make --short=home --long="Default location" --no-interaction
docker exec panel php artisan p:node:make --name=node01 --description="Local node" --locationId=1 \
  --fqdn="$IP" --public=1 --scheme=http --proxy=0 --maintenance=0 \
  --maxMemory=4096 --overallocateMemory=0 --maxDisk=40000 --overallocateDisk=0 \
  --uploadSize=100 --daemonListeningPort=8080 --daemonSFTPPort=2022 --daemonBase=/var/lib/pterodactyl/volumes \
  --no-interaction
mkdir -p /etc/pterodactyl /var/lib/pterodactyl /var/log/pterodactyl /tmp/pterodactyl
docker exec panel php artisan p:node:configuration 1 > /etc/pterodactyl/config.yml
docker run -d --name wings --restart=always --network host \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/containers:/var/lib/docker/containers \
  -v /etc/pterodactyl:/etc/pterodactyl \
  -v /var/lib/pterodactyl:/var/lib/pterodactyl \
  -v /var/log/pterodactyl:/var/log/pterodactyl \
  -v /tmp/pterodactyl:/tmp/pterodactyl \
  ghcr.io/pterodactyl/wings:latest
printf 'Pterodactyl: http://%s\nUtilizator: admin ([email protected])\nParola: %s\nNodul node01 este preconfigurat pe acelasi server (wings pe portul 8080, SFTP 2022). Aloca porturi pentru serverele de joc din panou.\n' "$IP" "$ADMIN_PASS" > /root/app-credentials.txt

You can also save this script as a recipe in your account and reuse it on any new server.

Put this guide into practice on your own VPS

EU cloud servers, billed hourly, ready in minutes, with one-click installs for dozens of apps.

See pricing

Related tutorials