Install Pterodactyl Panel
This guide documents a standard production-oriented installation flow for the Pterodactyl Panel on Ubuntu Linux. The sequence is structured for infrastructure teams that want predictable deployment behavior and clear rollback points.
Before You Start
Section titled “Before You Start”Use a clean server with root or sudo access and a valid DNS record pointing to your panel domain. For stable hosting operations, use an UltraVM VPS sized for your expected panel load.
Step 1: Update Base System
Section titled “Step 1: Update Base System”sudo apt update && sudo apt -y upgradesudo apt -y install software-properties-common curl apt-transport-https ca-certificates gnupgStep 2: Install Required Packages
Section titled “Step 2: Install Required Packages”Install web, PHP, database, cache, and utility dependencies:
sudo add-apt-repository -y ppa:ondrej/phpsudo apt updatesudo apt -y install nginx mariadb-server redis-server \ php8.3 php8.3-cli php8.3-gd php8.3-mysql php8.3-pdo php8.3-mbstring \ php8.3-tokenizer php8.3-bcmath php8.3-xml php8.3-fpm php8.3-curl php8.3-zip \ unzip gitStep 3: Install Composer
Section titled “Step 3: Install Composer”cd /tmpcurl -sS https://getcomposer.org/installer | phpsudo mv composer.phar /usr/local/bin/composercomposer --versionStep 4: Create Database and User
Section titled “Step 4: Create Database and User”Secure MariaDB and create credentials for the panel:
sudo mysql_secure_installationsudo mysql -u root -pInside the MariaDB shell:
CREATE DATABASE panel;CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'CHANGE_THIS_STRONG_PASSWORD';GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1';FLUSH PRIVILEGES;EXIT;Step 5: Download Panel Files
Section titled “Step 5: Download Panel Files”sudo mkdir -p /var/www/pterodactylcd /var/www/pterodactylsudo curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gzsudo tar -xzvf panel.tar.gzsudo chmod -R 755 storage/* bootstrap/cache/sudo cp .env.example .envStep 6: Install PHP Dependencies and Configure App
Section titled “Step 6: Install PHP Dependencies and Configure App”sudo composer install --no-dev --optimize-autoloadersudo php artisan key:generate --forceRun the panel environment setup:
sudo php artisan p:environment:setupsudo php artisan p:environment:databasesudo php artisan migrate --seed --forcesudo php artisan p:user:makeStep 7: Set File Ownership
Section titled “Step 7: Set File Ownership”sudo chown -R www-data:www-data /var/www/pterodactyl/*Step 8: Configure Queue Worker and Cron
Section titled “Step 8: Configure Queue Worker and Cron”Create cron entry:
(crontab -l 2>/dev/null; echo "* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1") | crontab -Create systemd service /etc/systemd/system/pteroq.service:
[Unit]Description=Pterodactyl Queue WorkerAfter=redis-server.service
[Service]User=www-dataGroup=www-dataRestart=alwaysExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3StartLimitInterval=180StartLimitBurst=30RestartSec=5s
[Install]WantedBy=multi-user.targetEnable and start it:
sudo systemctl daemon-reloadsudo systemctl enable --now pteroq.serviceStep 9: Configure NGINX
Section titled “Step 9: Configure NGINX”Create /etc/nginx/sites-available/pterodactyl.conf:
server { listen 80; server_name panel.example.com; root /var/www/pterodactyl/public; index index.php;
access_log /var/log/nginx/pterodactyl.app-access.log; error_log /var/log/nginx/pterodactyl.app-error.log error;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTP_PROXY ""; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; include /etc/nginx/fastcgi_params; }
location ~ /\.ht { deny all; }}Enable site and reload:
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.confsudo nginx -tsudo systemctl reload nginxStep 10: Add TLS Certificate
Section titled “Step 10: Add TLS Certificate”Use Let�s Encrypt for production:
sudo apt -y install certbot python3-certbot-nginxsudo certbot --nginx -d panel.example.comValidation
Section titled “Validation”Confirm services and logs:
systemctl status nginx php8.3-fpm mariadb redis-server pteroqIf you are deploying nodes next, continue with Install Pterodactyl Wings.