Installer Pterodactyl Panel sur un VPS Linux
Pterodactyl est un panel open source pour héberger des serveurs de jeu (Minecraft, ARK, Rust, FiveM, etc.) en environnement Docker. Ce tutoriel installe la partie Panel (interface web) sur Ubuntu 22.04/24.04. Le démon Wings (qui exécute les serveurs) fait l’objet d’un tuto séparé.
✅ Prérequis
- VPS Ubuntu 22.04 ou 24.04 (Debian 11/12 fonctionne aussi)
- Accès root ou utilisateur sudo
- Nom de domaine pointé vers l’IP du VPS (A record)
- Ports
80et443ouverts sur le firewall - 2 Go de RAM minimum, 10 Go d’espace disque
- OpenVZ non supporté (Docker incompatible)
📦 1. Installer les dépendances
Mettez à jour le système et ajoutez le repo PHP :
sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common curl apt-transport-https ca-certificates gnupg
sudo add-apt-repository -y ppa:ondrej/php
sudo apt updateInstallez PHP 8.3 + extensions, MariaDB, Nginx, Redis et utilitaires :
sudo apt install -y php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} \
mariadb-server nginx tar unzip git redis-serverInstallez Composer v2 :
curl -sS https://getcomposer.org/installer | sudo php -- \
--install-dir=/usr/local/bin --filename=composerVérifiez :
php -v
composer --version
mariadb --version🗄️ 2. Configurer MariaDB
Sécurisez l’installation :
sudo mysql_secure_installationRépondez : n au switch unix_socket (sur 22.04+), définissez un mot de passe root, puis y à toutes les questions suivantes.
Créez la base et l’utilisateur Pterodactyl :
sudo mariadb -u root -pDans le shell MariaDB (remplacez MotDePasseSolide par le vôtre) :
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'MotDePasseSolide';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;📥 3. Télécharger Pterodactyl Panel
sudo mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
sudo curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
sudo tar -xzvf panel.tar.gz
sudo chmod -R 755 storage/* bootstrap/cache/⚙️ 4. Configurer le panel
Copiez le fichier d’environnement et installez les dépendances Composer :
sudo cp .env.example .env
sudo composer install --no-dev --optimize-autoloader⚠️ Si Composer demande “Running as root is not recommended”, ajoutez
--allow-superuserou créez un user dédié.
Générez la clé d’application :
sudo php artisan key:generate --force🔑 Important : sauvegardez
APP_KEYdu.envimmédiatement. Sans elle, vos données chiffrées (mots de passe, tokens) sont irrécupérables.
Configuration interactive
sudo php artisan p:environment:setup
sudo php artisan p:environment:database
sudo php artisan p:environment:mailRenseignez :
- App URL :
https://panel.votredomaine.com - Timezone :
Europe/Paris - Cache driver :
redis - Session driver :
redis - Queue driver :
redis - Database : host
127.0.0.1, port3306, basepanel, userpterodactyl, mot de passe défini plus haut - Mail : SMTP de votre choix (SendGrid, Mailgun, OVH…)
Migrer la base de données
sudo php artisan migrate --seed --forceCréer le compte administrateur
sudo php artisan p:user:makeRépondez yes à “Is this user an administrator”.
Permissions fichiers
sudo chown -R www-data:www-data /var/www/pterodactyl/*⏰ 5. Cron et worker de queue
Crontab
sudo crontab -eAjoutez :
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1Service systemd pour la queue
sudo nano /etc/systemd/system/pteroq.serviceCollez :
[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.targetActivez :
sudo systemctl enable --now redis-server
sudo systemctl enable --now pteroq.service🌐 6. Configurer Nginx + SSL
Obtenir le certificat Let’s Encrypt
sudo apt install -y certbot
sudo certbot certonly --standalone -d panel.votredomaine.comConfiguration Nginx
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/pterodactyl.confCollez (remplacez panel.votredomaine.com) :
server_tokens off;
server {
listen 80;
server_name panel.votredomaine.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name panel.votredomaine.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;
client_max_body_size 100m;
client_body_timeout 120s;
sendfile off;
ssl_certificate /etc/letsencrypt/live/panel.votredomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/panel.votredomaine.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_prefer_server_ciphers on;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "SAMEORIGIN";
add_header Strict-Transport-Security "max-age=15768000; preload;";
add_header Referrer-Policy same-origin;
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;
}
location ~ /\.ht {
deny all;
}
}Activez :
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxRenouvellement auto Let’s Encrypt
sudo systemctl enable --now certbot.timer🚀 7. Vérifier l’installation
Ouvrez https://panel.votredomaine.com — connectez-vous avec le compte admin créé.
Vérifiez les services :
sudo systemctl status nginx php8.3-fpm mariadb redis-server pteroq🔥 Firewall (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable🚨 Dépannage
”500 Server Error”
sudo tail -f /var/www/pterodactyl/storage/logs/laravel-*.log
sudo tail -f /var/log/nginx/pterodactyl.app-error.logSouvent : permissions cassées. Re-exécutez :
sudo chown -R www-data:www-data /var/www/pterodactyl/*Queue ne tourne pas
sudo systemctl status pteroq
sudo journalctl -u pteroq -n 50Erreur DB “Access denied”
Vérifiez user/host dans .env (DB_HOST=127.0.0.1, pas localhost — MariaDB distingue socket vs TCP).
Composer “memory_limit”
sudo php -d memory_limit=-1 /usr/local/bin/composer install --no-dev --optimize-autoloader📝 Étapes suivantes
Le Panel est prêt mais ne peut rien faire sans Wings (le démon qui exécute les serveurs Docker). Installez Wings sur le même VPS ou sur des nodes séparés. Tutoriel Wings à venir.
Pensez aussi à :
- Activer 2FA sur le compte admin
- Configurer les sauvegardes MariaDB régulières (
mysqldump+ cron) - Ajouter Fail2Ban sur Nginx (filtre
nginx-http-auth)
🔗 Ressources
- Documentation officielle : https://pterodactyl.io/panel/1.0/getting_started.html
- GitHub : https://github.com/pterodactyl/panel
- Discord communautaire : https://discord.gg/pterodactyl
Panel installé ! Prochaine étape : Wings + premier serveur de jeu. 🦖


