VPS & Linux Avancé 12 min de lecture

Installer Pterodactyl Panel sur un VPS Linux

Guide complet pour installer le panel Pterodactyl sur Ubuntu 22.04/24.04 : dépendances, MariaDB, Redis, Nginx, SSL Let's Encrypt et configuration finale.

Installer Pterodactyl Panel sur un VPS Linux

Support Technique

Besoin d'aide ? Notre équipe est disponible 24/7 pour vous assister.

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 80 et 443 ouverts 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 update

Installez 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-server

Installez Composer v2 :

curl -sS https://getcomposer.org/installer | sudo php -- \
  --install-dir=/usr/local/bin --filename=composer

Vérifiez :

php -v
composer --version
mariadb --version

🗄️ 2. Configurer MariaDB

Sécurisez l’installation :

sudo mysql_secure_installation

Ré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 -p

Dans 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-superuser ou créez un user dédié.

Générez la clé d’application :

sudo php artisan key:generate --force

🔑 Important : sauvegardez APP_KEY du .env immé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:mail

Renseignez :

  • App URL : https://panel.votredomaine.com
  • Timezone : Europe/Paris
  • Cache driver : redis
  • Session driver : redis
  • Queue driver : redis
  • Database : host 127.0.0.1, port 3306, base panel, user pterodactyl, 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 --force

Créer le compte administrateur

sudo php artisan p:user:make

Ré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 -e

Ajoutez :

* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1

Service systemd pour la queue

sudo nano /etc/systemd/system/pteroq.service

Collez :

[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

Activez :

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.com

Configuration Nginx

sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/pterodactyl.conf

Collez (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 nginx

Renouvellement 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.log

Souvent : 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 50

Erreur 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


Panel installé ! Prochaine étape : Wings + premier serveur de jeu. 🦖