This guide covers common issues you may encounter when running Pterodactyl Panel and their solutions.
Installation Issues
Database Connection Failed
Symptoms: Cannot connect to database during setup
Error Message:
Illuminate\Database\QueryException
Could not find driver (SQL: select * from information_schema.tables...)
Solutions:
- Install MySQL/MariaDB PHP extension:
# Ubuntu/Debian
sudo apt install php8.3-mysql
# RHEL/CentOS
sudo yum install php-mysqlnd
- Verify database credentials in
.env:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=panel
DB_USERNAME=pterodactyl
DB_PASSWORD=yourpassword
- Test database connection:
mysql -u pterodactyl -p -h 127.0.0.1 panel
- Check MySQL is running:
sudo systemctl status mysql
sudo systemctl start mysql
Composer Install Fails
Error Message:
Your requirements could not be resolved to an installable set of packages
Solutions:
- Update Composer:
- Clear Composer cache:
- Check PHP version:
php -v # Should be 8.2 or higher
- Install dependencies with correct flags:
composer install --no-dev --optimize-autoloader
Permission Denied Errors
Error Message:
failed to open stream: Permission denied
Solutions:
- Set proper ownership:
# If using Nginx
sudo chown -R www-data:www-data /var/www/pterodactyl
# If using Apache
sudo chown -R apache:apache /var/www/pterodactyl
- Set proper permissions:
cd /var/www/pterodactyl
sudo chmod -R 755 storage bootstrap/cache
- Fix SELinux contexts (RHEL/CentOS):
sudo restorecon -R /var/www/pterodactyl
Login and Authentication Issues
Cannot Login - “Invalid Credentials”
Symptoms: Correct credentials but cannot login
Solutions:
- Reset user password:
php artisan p:user:make
# Or update existing user
php artisan p:user:password <email>
- Clear sessions:
php artisan session:clear
redis-cli FLUSHDB # If using Redis
- Check session driver in
.env:
SESSION_DRIVER=redis # Or database, file
Two-Factor Authentication Issues
Symptoms: Lost 2FA device, cannot access account
Solutions:
- Disable 2FA for user:
-
Use recovery tokens if available (shown during 2FA setup)
-
Check system time is synchronized:
sudo timedatectl set-ntp true
timedatectl status
“Too Many Login Attempts”
Symptoms: Rate limited after failed logins
Solutions:
-
Wait the time specified in the error message
-
Clear rate limit cache:
php artisan cache:clear
redis-cli FLUSHDB
- Check IP address if behind proxy, configure trusted proxies in
.env:
Server Management Issues
Servers Stuck in “Installing” State
Symptoms: Servers remain in installing status indefinitely
Solutions:
- Check Wings logs:
sudo journalctl -u wings -n 100
- Verify Wings connectivity:
curl -k https://node.example.com:8080
- Manually reset server state:
USE panel;
UPDATE servers SET status = NULL WHERE status = 'installing';
- Restart Wings (automatically resets failed states in v1.11+):
sudo systemctl restart wings
Cannot Start/Stop Servers
Symptoms: Server power actions fail
Error Message:
Server must be online in order to send commands
Solutions:
- Check Wings status:
sudo systemctl status wings
sudo journalctl -u wings --since "10 minutes ago"
-
Verify server installation completed successfully
-
Check Docker container:
sudo docker ps -a | grep pterodactyl
- Review Wings configuration:
sudo wings configure --panel-url https://panel.example.com
File Manager Not Loading
Symptoms: File manager shows loading spinner indefinitely
Solutions:
-
Check browser console for errors (F12)
-
Verify Wings is running and accessible
-
Check CORS configuration in
.env:
APP_CORS_ALLOWED_ORIGINS=*
-
Clear browser cache and cookies
-
Verify allocation is properly assigned to server
Slow Page Load Times
Symptoms: Panel takes a long time to load pages
Solutions:
- Enable caching:
php artisan config:cache
php artisan route:cache
php artisan view:cache
- Use Redis for cache and sessions:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
- Enable OPcache in
php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
- Check server resources:
- Optimize database:
High CPU Usage
Symptoms: Panel server CPU usage is high
Solutions:
- Check queue workers:
- Limit queue workers in supervisor config:
-
Enable query caching in database
-
Review application logs for repeated errors:
tail -f storage/logs/laravel.log
High Memory Usage
Solutions:
- Increase PHP memory limit in
php.ini:
- Restart PHP-FPM:
sudo systemctl restart php8.3-fpm
- Check for memory leaks in queue workers:
sudo supervisorctl restart all
API Issues
401 Unauthorized
Symptoms: API requests return 401
Solutions:
- Verify API key is correct and not expired:
curl -H "Authorization: Bearer ptla_key" \
-H "Accept: application/json" \
https://panel.example.com/api/application/users
-
Check API key permissions in admin panel
-
Ensure proper headers:
Authorization: Bearer {api_key}
Accept: application/json
Content-Type: application/json
429 Too Many Requests
Symptoms: API requests are rate limited
Solutions:
-
Implement retry logic with backoff
-
Increase rate limits in
.env:
APP_API_CLIENT_RATELIMIT=512
APP_API_APPLICATION_RATELIMIT=512
- Use request batching and includes:
# Instead of multiple requests
curl /api/application/servers/1?include=databases,allocations
- Check rate limit headers:
X-RateLimit-Limit: 256
X-RateLimit-Remaining: 0
Retry-After: 42
502 Bad Gateway
Symptoms: API returns 502 when communicating with Wings
Solutions:
- Verify Wings is running:
sudo systemctl status wings
- Check Wings logs:
sudo journalctl -u wings -n 50
- Test Wings connectivity:
curl -k https://node.example.com:8080/api/system
-
Verify SSL certificates are valid
-
Check firewall rules:
Email Issues
Emails Not Sending
Symptoms: Password resets, notifications not received
Solutions:
- Test email configuration:
- Check mail settings in
.env:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=your-api-key
MAIL_ENCRYPTION=tls
[email protected]
- Review mail logs:
tail -f storage/logs/laravel.log | grep mail
- Check queue worker is running:
sudo supervisorctl status
- Verify SPF/DKIM records for email domain
Database Issues
Connection Pool Exhausted
Error Message:
Solutions:
- Increase max connections in MySQL:
SET GLOBAL max_connections = 200;
- Make permanent in
my.cnf:
[mysqld]
max_connections = 200
- Check for connection leaks:
- Restart MySQL:
sudo systemctl restart mysql
Database Lock Errors
Error Message:
Deadlock found when trying to get lock
Solutions:
-
Retry the operation (Laravel handles this automatically)
-
Check for long-running queries:
- Optimize tables:
OPTIMIZE TABLE servers;
OPTIMIZE TABLE allocations;
- Restart MySQL if persistent
Common Error Messages
”This server is in a failed install state”
Solution: Delete and recreate the server, or manually fix via:
UPDATE servers SET status = NULL WHERE id = SERVER_ID;
Then re-run installation.
”No valid server identifier was included”
Cause: Server UUID or ID is invalid
Solution: Verify the server exists and you have access permissions
”Server transfers are already enabled”
Cause: Server is already being transferred
Solution: Wait for transfer to complete or cancel it:
DELETE FROM server_transfers WHERE server_id = SERVER_ID;
“The backup limit for this server has been reached”
Solution: Delete old backups or increase backup limit in server settings
Wings-Specific Issues
See the Wings Troubleshooting page for Wings-specific issues.
Getting Help
Before seeking help, collect:
- Panel version:
- Error logs:
tail -n 100 storage/logs/laravel.log
- System information:
php -v
composer --version
mysql --version
- Configuration (sanitize sensitive data):
cat .env | grep -v PASSWORD | grep -v KEY | grep -v SECRET
Best Practices for Asking for Help
- Search first - Your issue may already be answered
- Provide version information - Panel and Wings versions
- Include error messages - Full, unredacted logs
- Describe what you tried - Show troubleshooting steps taken
- Be patient and respectful - Community support is volunteer-based
Never share sensitive information like API keys, passwords, or private keys when asking for help.