1Gbps Dedicated Servers
Unmetered Dedicated Servers
AMD Dedicated Servers
Gaming Dedicated Servers
10Gbps Dedicated Servers
GPU Servers
Intel Dedicated Servers
DDOS Protected Dedicated Servers
About Us
Contact Us
Blogs
Tutorials
Pterodactyl is a free, open-source, Docker-based game server management panel. This guide walks you through a complete, production-ready installation on Ubuntu 24.04 LTS — covering PHP 8.3, MariaDB, Redis, Nginx, Let's Encrypt SSL, and the Wings daemon.
Published: 25 May 2026 · Reading time: ~15 minutes · Difficulty: Intermediate
Before you begin, make sure your dedicated server meets the minimum specifications. Running Pterodactyl on shared hosting or a low-resource VPS will result in instability under load.
PHP 8.1 is not supported: Pterodactyl Panel 1.11+ requires PHP 8.2 or 8.3. Do not follow guides that use PHP 8.1 — they will not work on a current installation.
Pterodactyl consists of two parts: Panel (The web interface) and Wings (The daemon installed on each node that monitors game servers inside Docker containers). Because each game server runs in its own Docker container, a crashing modpack cannot affect other servers. This makes Pterodactyl an excellent fit for a bare-metal dedicated server.
Always start with a fully updated system. Run all commands as root.
apt update && apt upgrade -y apt install -y curl wget git unzip tar software-properties-common apt-transport-https ca-certificates gnupg lsb-release
Install Nginx and set up the PHP 8.3 repository via the Ondřej Surý PPA.
apt install -y nginx LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php apt update
Install PHP 8.3 and all required extensions, then enable PHP-FPM.
apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-mbstring php8.3-bcmath php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-tokenizer php8.3-intl systemctl enable php8.3-fpm systemctl start php8.3-fpm
Install MariaDB and secure the installation.
apt install -y mariadb-server mariadb-client systemctl enable mariadb systemctl start mariadb mysql_secure_installation
Log in to MySQL (mysql -u root -p) and create the database:
mysql -u root -p
CREATE DATABASE pterodactyl; CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON pterodactyl.* TO 'pterodactyl'@'127.0.0.1'; FLUSH PRIVILEGES; EXIT;
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list apt update apt install -y redis-server systemctl enable redis-server systemctl start redis-server
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
Set up the web directory and install Laravel dependencies.
mkdir -p /var/www/pterodactyl cd /var/www/pterodactyl curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz tar -xzvf panel.tar.gz chmod -R 755 storage/* bootstrap/cache/ cp .env.example .env composer install --no-dev --optimize-autoloader php artisan key:generate --force
Run the environment setup wizard and create your admin user:
php artisan p:environment:setup php artisan p:environment:database php artisan migrate --seed --force php artisan p:user:make chown -R www-data:www-data /var/www/pterodactyl/*
Create an Nginx configuration file: nano /etc/nginx/sites-available/pterodactyl.conf
nano /etc/nginx/sites-available/pterodactyl.conf
server { listen 80; server_name panel.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name panel.yourdomain.com; root /var/www/pterodactyl/public; index index.php; access_log /var/log/nginx/pterodactyl.access.log; error_log /var/log/nginx/pterodactyl.error.log error; ssl_certificate /etc/letsencrypt/live/panel.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/panel.yourdomain.com/privkey.pem; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; 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_read_timeout 300; } location ~ /\.ht { deny all; } }
Enable the site and install SSL via Certbot:
ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/ apt install -y certbot python3-certbot-nginx certbot certonly --nginx -d panel.yourdomain.com --email [email protected] --agree-tos -n systemctl reload nginx
Create the queue worker service (nano /etc/systemd/system/pteroq.service):
nano /etc/systemd/system/pteroq.service
[Unit] Description=Pterodactyl Queue Worker After=redis-server.service [Service] User=www-data Group=www-data Restart=always ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3 StartLimitInterval=180 StartLimitBurst=30 RestartSec=5s [Install] WantedBy=multi-user.target
systemctl enable pteroq.service systemctl start pteroq.service (crontab -u www-data -l 2>/dev/null; echo "* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1") | crontab -u www-data -
Install Docker and download the Wings daemon.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list apt update apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl enable docker systemctl start docker mkdir -p /etc/pterodactyl curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64" chmod u+x /usr/local/bin/wings
Create the Wings service (nano /etc/systemd/system/wings.service):
nano /etc/systemd/system/wings.service
[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
Log in to your Panel. Go to Admin Panel → Nodes → Create New. Fill in the details, save, and go to the Configuration tab. Copy the auto-deploy command and run it on your server:
cd /etc/pterodactyl && wings configure --panel-url https://panel.yourdomain.com --token your_token_here --node 1 systemctl enable wings systemctl start wings
Go to Admin Panel → Servers → Create New Server. Finally, ensure your firewall allows the necessary ports:
ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow 8080/tcp ufw allow 25565/tcp ufw allow 27015/udp ufw allow 7777/udp ufw enable
Pterodactyl performs best on bare-metal dedicated hardware — full CPU access, NVMe storage, and no noisy neighbours competing for your game server's resources. eServers provides DDoS-protected, low-latency dedicated servers from UK data centres.
Need a more powerful hosting solution? Contact the eServers team today for 24/7 expert support.
eServers provides reliable dedicated servers across multiple global regions. Whether you need low latency, regional compliance, or proximity to your audience, our wide geographic coverage ensures the perfect hosting environment for your project.
At eServers , we proudly partner with 15+ leading global tech providers to deliver secure, high-performance hosting solutions. These trusted alliances with top hardware, software, and network innovators ensure our clients benefit from modern technology and enterprise-grade reliability.