Tutoriel écrit par Seb, mis à jour par Blasto le 17 juin 2022.

Pterodactyl est un panel de gestion, gratuit et open-source, pour les serveurs de jeu. Construit avec PHP 8.1, NodeJS et Go, il exécute vos serveurs dans des conteneurs Docker isolés, tout en proposant une interface complète.

Ce panel est un des meilleurs du marché si vous n'avez pas les compétences pour développer votre propre solution. Il est d'ailleurs utilisé par plusieurs hébergeurs français, qui se contentent bien souvent de simplement revendre cette solution (contrairement à mTxServ qui a développé son propre panel avec fonctions exclusives, pour ses offres de serveurs de jeu).

Dans ce tutoriel, nous allons voir comment installer et utiliser le panel Pterodactyl sur son VPS GAME, sous Ubuntu 18.04: Bionic Beaver.

Jeux pris en charge

Le panel est compatible avec une grande variété de jeux :

  • Minecraft / Minecraft Bedrock
  • Rust
  • Terraria
  • Team Fortress 2
  • Counter Strike: Global Offensive
  • Garry's Mod
  • ARK: Survival Evolved
  • FiveM
  • Factorio
  • Et bien d'autres !

Cliquez ici pour voir les autres jeux déjà disponibles. Sachez que même si votre jeu n'y est pas, vous pourrez toujours créer un egg personnalisé !

Vous pouvez également créer des serveurs vocaux:

  • Teamspeak
  • Mumble

Dépendances du panel

Pterodactyl est compatible avec les VPS :

  • Debian 9 / Debian 10
  • Ubuntu 18.04 / 20.04
  • CentOS 8 / CentOS 9

Dans ce tutoriel, nous allons traiter l'installation uniquement sur Ubuntu.

Installation de Pterodactyl

Installation de l'OS

Si votre VPS est déjà installé sur Ubuntu, vous pouvez passer cette étape.

Dans le cas contraire, voici comment installer votre VPS :

  1. Allez dans le panel de gestion du VPS.
  2. Sélectionnez la distribution Ubuntu.
  3. Choisissez la version Ubuntu 18.04 et cliquez sur Installer.
  4. Cliquez sur Confirmer l'installation et patientez.
  5. Vous allez recevoir vos identifiants par e-mail, à la fin de l'installation.

Installation distribution

Une fois que votre OS est installé et que vous avez reçu vos identifiants par e-mail, connectez-vous via SSH.

Connexion SSH

Installation des dépendances

C'est parti pour l'installation des dépendances nécessaires au bon fonctionnement du panel Pterodactyl.

Toutes les commandes qui suivent doivent être entrées en administrateur (voir tutoriel se connecter en SSH).

Avant de nous lancer sans réfléchir, sachez que Pterodactyl nécessite que la virtualisation soit active. Sur un VPS hébergé chez mTxServ, vous n'aurez aucun problème. Si vous souhaitez tout de même vérifier avant de vous lancer dans l'installation, entrez la commande lscpu | grep 'vendor\|type'qui ne doit pas vous retourner d'erreur. Vous devriez voir quelque chose comme :

Hypervisor vendor:   KVM
Virtualization type: full

La virtualisation est bien active ? Vous pouvez démarrer l'installation des dépendances (applications, PHP, serveur web, etc) :

apt update

apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg

LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php 

add-apt-repository ppa:redislabs/redis -y

Pour installer le panel, nous avons besoin d'une base de données, qui sera MariaDB :

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

apt update

apt-add-repository universe

apt -y install php8.1 php8.1-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} mariadb-server nginx unzip redis-server

Note: MariaDB est une version optimisée de MySQL. Elle est entièrement compatible avec MySQL et améliore sensiblement les performances, c'est pourquoi nous allons privilégier son utilisation dans ce tutoriel.

On installe maintenant composer :

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

Il nous faut également Nodejs :

curl -sL https://deb.nodesource.com/setup_14.x | bash -
apt update
apt -y install nodejs make gcc g++

Et pour finir, nous avons besoin de Docker :

curl -sSL https://get.docker.com/ | CHANNEL=stable bash
usermod -aG docker www-data
systemctl enable --now docker
/etc/init.d/docker restart

On peut maintenant passer à la configuration de la base de données MariaDB.

Il vous reste à configurer et sécuriser le serveur SQL. Pour cela, suivez la partie Modification du mot de passe admin du tutoriel sur MySQL / MariaDB.

Vous avez votre mot de passe administrateur et vous avez sécurisé la base de données ? Vous pouvez passer à la suite.

Nous allons maintenant créer un utilisateur spécifique pour le panel dans le serveur SQL. Entrez la commande ci-dessous pour rentrer dans l'outil d'administration, et entrez votre mot de passe:

mysql -u root -p mysql

Maintenant que nous sommes dans l'outil de gestion du serveur SQL, créons un nouvel utilisateur pour sécuriser le panel. N'oubliez pas de remplacer VOTRE_PASSWORD par le mot de passe que vous souhaitez pour ce nouvel utilisateur !

CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'VOTRE_PASSWORD';

Maintenant que nous avons notre utilisateur, créons la base de données et ajoutons les permissions à l'utilisateur:

CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Vous pouvez maintenant quitter MariaDB en rentrant la commande exit.

Installation du panel

Notre VPS est prêt pour installer le panel Pterodactyl, qui permettra ensuite de créer et administrer vos serveurs de jeu.

Afin d'éviter tout problème de sécurité, nous allons installer et lancer le panel avec l'utilisateur www-data, qui est déjà présent sur notre VPS :

chown -R www-data:www-data /var/www
su -l www-data -s /bin/bash

Si tout se passe bien, vous devriez maintenant voir ceci :

Changement d'utilisateur

Maintenant que nous sommes sur le bon utilisateur, la première étape consiste à créer le dossier dans lequel le panel sera ajouté :

mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl

Une fois que vous avez créé un nouveau répertoire, vous devez télécharger les fichiers et décompresser l'archive. Pour finir, nous allons modifier les droits sur les répertoires.

curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/download/v1.8.1/panel.tar.gz
tar -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/

Maintenant que tous les fichiers ont été téléchargés, nous devons le configurer. Nous allons créer le fichier contenant les paramètres de l'environnement, installer les dépendances PHP et générer une nouvelle clé de chiffrement pour l'application.

cp .env.example .env
composer install --no-dev --optimize-autoloader
php artisan key:generate --force

Initialisons la configuration avec la commande suivante (faites un CTRL + C si vous vous trompez à un moment) :

php artisan p:environment:setup
  1. Egg Author Email <- Votre adresse email
  2. Application URL <- L'adresse IP de votre serveur avec http devant, exemple: http://51.89.132.2.
  3. Application Timezone <- Entrez Europe/Paris, si vous vivez en France bien sûr.
  4. Cache Driver <- Entrez file.
  5. Session Driver <- Entrez database.
  6. Queue Driver <- Entrez database.
  7. Enable UI based settings editor? <- Entrez yes.

Passons à l'initialisation des paramètres de base de données:

php artisan p:environment:database
  1. Database Host <- Entrez 127.0.0.1
  2. Database Port <- Entrez 3306
  3. Database Name <- Entrez panel
  4. Database Username <- Entrez pterodactyl
  5. Database Password <- Entrez le mot de passe de l'utilisateur pterodactyl, que vous avez configuré plus haut, dans Installation de la base de données.

Attention: Sauvegardez votre clé de chiffrement (APP_KEY dans le fichier .env). Elle est utilisée comme clé de cryptage pour toutes les données qui doivent être stockées en toute sécurité (par exemple, les clés API). En cas de perte de la clé, vous perdrez toutes les données chiffrées, même si vous avez des sauvegardes de base de données. La clé est accessible en faisant la commande cat .env et elle commence par base64..., récupérez donc tout ce qui se trouve après APP_KEY=.

Nous devons maintenant configurer toutes les données de base du panel. La commande ci-dessous peut prendre un certain temps à s'exécuter en fonction de votre VPS, veuillez à NE PAS quitter le processus tant qu'il n'est pas terminé ou vous risquez de corrompre toutes vos données !

php artisan migrate --seed --force

Si tout s'est bien passé, vous devriez voir ceci :

Migration terminée

La configuration de base est en place, nous allons créer notre utilisateur qui permettra de se connecter au panel, avec la commande suivante:

php artisan p:user:make
  1. Is this user an administrator? (yes/no) <-- Entrez yes
  2. Email Adress <-- Votre adresse email
  3. Username <- Entrez votre nom d'utilisateur, exemple Seb
  4. First Name <- Entrez votre prénom
  5. Last Name <- Entrez votre nom
  6. Password <- Entrez le mot de passe qui sera utilisé pour le compte, doit être différent des mots de passe précédents

Le résultat devrait être quelque chose proche de :

+----------+--------------------------------------+
| Field    | Value                                |
+----------+--------------------------------------+
| UUID     | 823a13ee-4bfa-43ef-af3d-a868077be3bc |
| Email    | seb@mtxserv.fr                       |
| Username | seb                                  |
| Name     | Seb Seb                              |
| Admin    | Yes                                  |
+----------+--------------------------------------+

Votre utilisateur pour se connecter au panel est prêt.

Pour finaliser l'installation, nous devons quitter l'utilisateur www-data, pour revenir sur l'utilisateur root. Ensuite, nous allons nous assurer que les permissions des fichiers sont correctes :

exit 
chown -R www-data:www-data /var/www/pterodactyl/

Nous arrivons à la fin de l'installation du panel, il nous reste plus qu'à ajouter le système permettant d’exécuter les actions en arrière plan :

echo "* * * * * www-data php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1" >> /etc/crontab

On crée maintenant le service associé :

echo "[Unit]
Description=Pterodactyl Queue Worker

[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

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/pteroq.service 

Et on l'active :

systemctl enable --now pteroq.service

Dernière étape, la configuration du serveur web nginx .

Créez un fichier /etc/nginx/sites-available/pterodactyl.conf, par exemple avec nano :

nano /etc/nginx/sites-available/pterodactyl.conf

et ajoutez le contenu suivant:

server {
    listen 80 default_server;
    server_name _;

    root /var/www/pterodactyl/public;
    index index.html index.htm index.php;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-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;
    }
}

Pour sauvegarder et sortir de Nano, faites CTRL + X puis appuyez sur Y et enfin appuyez sur Entrée.

Activons le site web du panel que nous venons d'ajouter sur le serveur web, et supprimons la configuration par défaut:

rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
/etc/init.d/nginx restart

Si besoin, vous pouvez consultez les logs du panel dans /var/log/nginx/pterodactyl.app-error.log et /var/www/pterodactyl/storage/logs/.

Et voilà, le panel Pterodactyl est installé sur votre VPS ! Pour aller plus loin dans la configuration, consultez la documentation officielle.

Pour se connecter sur le panel, ouvrez votre navigateur, et allez à l'adresse http://MON_IP/ (n'oubliez pas de remplacer l'IP par celle de votre serveur, pour moi: http://51.38.243.187). L'identifiant et le mot de passe proviennent de ce que vous avez entré lorsque vous avez utilisé la commande php artisan p:user:make. Si vous n'arrivez pas à vous connecter, reconnectez-vous au VPS en SSH et modifiez le mot de passe de votre utilisateur.

Login Pterodactyl

Installation et Configuration de Wings

Maintenant que le panel est prêt, il nous reste à initialiser les données dans l'administration du panel, pour finaliser l'installation de Wings (qui permet au panel de communiquer avec les serveurs de jeu).

Pour installer Wings, entrez les commandes suivantes en root:

mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/download/v1.6.4/wings_linux_amd64
chmod u+x /usr/local/bin/wings

Ensuite, on va initialiser les données dans le panel. Connectez-vous à Pterodactyl et allez dans les options d'administration :

Admin Pterodactyl Nav

Nous allons tout d'abord déclarer un nouvel emplacement, nécessaire pour initialiser ensuite la configuration de Wings :

  1. Allez dans Locations.
  2. Cliquer sur Create New.
  3. Dans Short Code, entrez localhost.
  4. Sauvegardez en cliquant sur Create.

Locations Pterodactyl

Ensuite, créez la Node :

  1. Allez dans Nodes.
  2. Cliquez sur Create New.
  3. Dans name, entrez node1.
  4. Dans FQDN, indiquez l'adresse IP du VPS, par exemple pour moi 51.38.243.187.
  5. Dans Communicate Over SSL, sélectionnez Use HTTP Connection.
  6. Dans Daemon Server File Directory, entrez /var/www/daemon-data.
  7. Dans Total Memory, indiquez la RAM total du VPS en Mo. Dans mon cas j'ai 8 Go, donc 8 * 1024 = 8192.
  8. Dans Memory Over-Allocation, entrez 0.
  9. Dans Total Disk Space, indiquez l'espace disque réservé pour vos serveurs de jeu sur le VPS, en Mo. Par exemple pour 40 Go, 40 * 1024 = 40960.
  10. Dans Disk Over-Allocation, entrez 0.
  11. Sauvegardez la node en cliquant sur Create.

On peut maintenant importer la configuration de la node dans Wings. Cliquez sur Configuration :

Configuration Node

Copiez maintenant le contenu dans Configuration File, et ajoutez le dans un fichier /etc/pterodactyl/config.yml :

config.yml

Le contenu de votre fichier /etc/pterodactyl/config.yml est bon ? On peut créer le service Wings :

echo "[Unit]
Description=Pterodactyl Wings Daemon

[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=600

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/wings.service

Et on l'active :

systemctl enable --now wings
service wings restart

Vous pouvez vérifier le bon fonctionnement de Wings en consultant le fichier de log /var/log/pterodactyl/wings.log.

Et voila, le panel est désormais prêt à fonctionner à 100%.

Allocation IP et ports

Avant de pouvoir créer notre premier serveur de jeu, nous devons configurer l'adresse IP qui sera utilisée, ainsi que les ports disponibles.

Pour cela :

  1. Cliquez sur Nodes dans la navigation, et sélectionnez la node1.
  2. Cliquez ensuite sur Allocation.

Vous devriez voir : Allocation node pterodactyl

Déclarons notre IP et les ports disponibles pour créer des serveurs de jeu dans la partie Assign New Allocations :

  1. Dans IP Address, entrez l'adresse IP de votre VPS, par exemple pour moi 51.38.243.187.
  2. Dans Port, indiquez les ports disponibles pour créer vos serveurs de jeu par la suite. Vous pouvez rentrer une rangée de port, par exemple: 25001-25565.
  3. Cliquez sur Submit.

Et voila, nous avons fini la configuration, il ne reste plus qu'à créer nos serveurs de jeu et profiter du panel ;)

allocations pterodactyl

Notre premier serveur de jeu

Tout est prêt, passons enfin à la création d'un serveur de jeu.

Rendez-vous dans l'onglet servers du panel :

Serveurs installés

Pour créer un nouveau serveur de jeu :

  1. Cliquez sur Create New.
  2. Dans Server Name, entrez le nom du serveur, par exemple Serveur de test.
  3. Dans Server Owner, entrez le nom du compte utilisateur qui sera propriétaire du serveur sur le panel, dans mon cas Seb.
  4. Dans Default Allocation, sélectionnez le port qui sera utilisé pour le serveur de jeu.
  5. Dans Memory, indiquez la RAM allouée à votre serveur Minecraft. Pour notre exemple, on alloue 4096 Mo.
  6. Dans Disk Space, vous pouvez spécifier l'espace disque max du serveur, nous vous conseillons de rentrer -1 pour désactiver.
  7. Dans Nest Configuration, sélectionnez la famille du jeu dans le champ Nest, et la version que vous souhaitez utiliser dans Egg. Pour notre exemple, nous allons sélectionner Minecraft et Minecraft Vanilla.
  8. Dans Server Version, vous pouvez spécifier la version que vous souhaitez.
  9. Cliquez sur Create Server pour créer votre premier serveur de jeu sur Pterodactyl !

Créer un serveur avec Pterodactyl

Votre serveur de jeu est prêt !

Pour rentrer dans le panel du serveur de jeu, cliquez sur l'icone: Voir panel

Et voila, vous avez accès à un super panel pour votre serveur:

panel minecraft

Pour démarrer le serveur, cliquez sur Start.

Attention: dans le cadre d'un serveur Minecraft, vous devez accepter la licence EULA pour pouvoir lancer le serveur. Pour cela, lancez une premiere fois le serveur pour générer les fichiers. Il devrait refuser de se lancer :

accepter licence EULA

Pour accepter la licence:

  1. Allez dans File Manager.
  2. Ouvrez le fichier eula.txt.
  3. Ajoutez eula=true.
  4. Cliquez sur Save Content.

accepter eula minecraft

Il ne vous reste plus qu'à redémarrer le serveur :

démarrer serveur

Erreurs fréquentes

En cas d'erreur de type CSRF lorsque vous soumettez les formulaires, vérifiez le contenu du fichier /var/www/pterodactyl/.env, notamment le APP_URL qui doit bien contenir votre adresse http://VOTRE_IP. Si la ligne SESSION_SECURE_COOKIE est présente en toute fin du fichier, supprimez-là.

Videz ensuite le cache:

su -l www-data -s /bin/bash
cd /var/www/pterodactyl
php article clear:cache

Aller plus loin

De nombreuses fonctionnalités sont présentes dans Pterodactyl, allant d'une API, en passant par les thèmes, le SSL, les eggs, etc.

Pour en savoir plus, consultez la documentation officielle, et notamment le guide sur l'activation du SSL.