Créer des serveur de jeux avec Pterodactyl


Logo Pterodactyl

Introduction

En tant que joueur passionné, j’ai souvent eu recours à des hébergeurs tels que Omg-serv, Boxtoplay et Verry’s games pour mes serveurs de jeux, qu’il s’agisse de Minecraft, Unturned, Garry’s Mod, GTA V RP (Five M, ALT V) et bien d’autres.

Cependant, cette solution avait un coût non négligeable.

C’est pourquoi, il y a quelques années, mes amis et moi avons pris la décision de passer à un serveur dédié et d’installer Pterodactyl. Cette démarche nous a permis de réduire considérablement nos dépenses liées aux hébergeurs traditionnels.

Dans cet article, nous allons découvrir comment créer vos propres serveurs de jeux en utilisant Pterodactyl.

Présentation Pterodactyl.io

Découvrez Pterodactyl.io, un panneau de gestion de serveur de jeu open source. Avec une priorité donnée à la sécurité, Pterodactyl exécute vos serveurs de jeu dans des conteneurs Docker isolés. Profitez d’une interface utilisateur intuitive pour les administrateurs et les utilisateurs. Ne tardez plus, créez vos propres serveurs de jeu gratuitement et à volonté dès maintenant !

Fonctionnement Technique

Panel :

Le panel et l’interface de gestion de Pterodactyl vous offrent la possibilité d’administrer et de modifier facilement vos serveurs. Vous pouvez gérer tous les aspects de vos serveurs de jeu, de l’administration à la personnalisation, grâce à une interface conviviale et intuitive. Prenez le contrôle total de vos serveurs et adaptez-les selon vos besoins avec facilité.

image dashboard ptérodactyl

Wings :

Le Wings, quant à lui, agit en tant qu’agent de liaison et assure le travail sur le serveur. Il est chargé de transmettre les informations nécessaires au conteneur Docker. Grâce à cette collaboration, le Wings garantit une communication fluide et sécurisée entre le panneau de gestion et le serveur, assurant ainsi une exécution optimale de vos serveur de jeux.

Avantage & inconvénient

Avantage

  • Possibilité d’ajout de serveur a volonté
  • Crée un serveur en 2 minute
  • entièrement Open Source
  • Les seule limite de votre serveur sont celle fournis par votre machine

Inconvénient

  • Base Linux requise
  • pas de support
  • maintenance mensuel obligatoire

Installation & configuration

Prérequis

  • Un VPS/Serveur Dédier/Serveur avec UBUNTU 22 ou Debian 11
  • Attention votre serveur doit prendre en charge KVM

Panel :

  • PHP 8.2
  • mysql
  • Redis (redis-server)
  • webserver (nginx)
  • certbot
  • python3-certbot-nginx
  • curl
  • tar
  • unzip
  • git
  • composer v2

Wings

  • curl
  • Docker

Etape 1 : Installation des Package & Docker sur serveur

Une fois connecté(e) au serveur, vous pouvez procéder à l’installation des packages nécessaires, ainsi que de Composer et Docker. Voici les étapes générales à suivre :

# faire les mise a jours
apt update && apt upgrade

# Install ensemble des package
apt -y install php8.1 php8.1-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb-server nginx tar unzip git redis-server python3-certbot-nginx certbot

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

# installation Docker
curl -sSL https://get.docker.com/ | CHANNEL=stable bash

# démarrage Docker
systemctl enable --now docker

Etape 2 : Configuration Nginx (serveur web)

Nous allons configurer Nginx, mais vous pouvez également le configurer avec Apache2 et choisir de le configurer avec ou sans SSL.

Pour une configuration avancée, cliquer ici

Sinon, nous allons voir une version standard. Commencez par ajouter la configuration Nginx en vous rendant dans le répertoire /etc/nginx/sites-available/ et créez le fichier pterodactyl.conf. Complétez-le avec le contenu suivant, en veillant à bien modifier le <domain> :

server_tokens off;

server {
    listen 80;
    server_name <domain>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name <domain>;

    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;

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

    sendfile off;

    # SSL Configuration - Replace the example <domain> with your domain
    ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    # See https://hstspreload.org/ before uncommenting the line below.
    # add_header Strict-Transport-Security "max-age=15768000; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    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.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;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Après avoir ajouté la configuration de Pterodactyl à Nginx, il ne reste plus qu’à créer le lien symbolique vers le répertoire sites-enabled Voici les étapes à suivre :

sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf

Maintenant, nous allons générer un certificat SSL en utilisant la commande suivante (veuillez remplacer « example.com » par votre propre domaine ou sous-domaine) :

certbot certonly --nginx -d example.com


Pour automatiser le renouvellement du certificat SSL, nous allons ajouter une entrée à la crontab. La crontab est un fichier de configuration qui permet d’exécuter des tâches planifiées à des moments spécifiques. Voici les étapes pour ajouter la crontab pour le renouvellement automatique du certificat SSL :

sudo crontab -e

Ajoutez la ligne suivante à la fin du fichier crontab pour planifier le renouvellement automatique du certificat SSL tous les jours à 23h (vous pouvez ajuster l’horaire selon vos préférences) :

0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"

Puis rédemarer le service NGINX

systemctl restart nginx

Etape 3 : Install Pterodactyl panel

Pour l’installation du panel web Pterodactyl, suivez les étapes ci-dessous :

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

# installation et droit
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/


Après avoir terminé l’installation des fichiers, vous devez créer un utilisateur MySQL pour la base de données du panel Pterodactyl. Voici comment procéder :

Si vous souhaitez effectuer une configuration avancée de MySQL, vous pouvez vous référer à la documentation de Pterodactyl : https://pterodactyl.io/tutorials/mysql_setup.html

Sinon, voici une version simplifiée :

mysql -u root -p

# N'oubliez pas de changer 'yourPassword' ci-dessous pour être un mot de passe unique
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'yourPassword';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
exit

Maintenance, finalisation, installation, en copiant le fichier .env et lancer composer afin qu’il installe ensemble des dépendances

cp .env.example .env
composer install --no-dev --optimize-autoloader

# permet de générer la clé de chiffrage
php artisan key:generate --force

Etape 4 : configuration panel Pterodactyl

Maintenant que le panel est installé il ne reste plus qu’à le configurer.

Vous avez deux options :

  • Automatique (il suffit de répondre aux questions) :
php artisan p:environment:setup
php artisan p:environment:database

php artisan p:environment:mail
  • Manuel (completer les infos du .env a l’aide de nano)
nano .env

Une fois ensemble des informations saisies

3 dans le fichier .env nous devais effectuer la migration de la database :

php artisan migrate --seed --force

pour finir nous mettons les access à apache :

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

Etape 5 : création de file d’attente

Pour effectuer un envoi d’action rapide ptérodactyl utilise une crontab.

Pour ajouter une crontab il suffit de taper sudo crontab -e et d’ajouter la ligne suivante :

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

Rendez vous en /etc/systemd/system et crée le fichier pteroq.service puis remplir le avec le contenu suivant :

# Pterodactyl Queue Worker File
# ----------------------------------

[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
# On some systems the user and group might be different.
# Some systems use `apache` or `nginx` as the user and group.
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

Maintenance il ne reste plus qu’à démarrer les applications :

sudo systemctl enable --now redis-server
sudo systemctl enable --now pteroq.service

Etape 6 : installation Wings

Installation du Wings se fait à l’aide des commandes suivantes :

mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
chmod u+x /usr/local/bin/wings

Placez le contenu ci-dessous dans un fichier appelé wings.service dans le /etc/systemd/system répertoire.

[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

Maintenant il ne nous reste plus qu’à démarrer le wings :

systemctl enable --now wings

Etape 7 : Création du node

Pour commencer il faut se créer un compte d’administration a l’aide la commande suivante à la racine du serveur web (/var/www/pterodactyl)

php artisan p:user:make

Ensuite connectez vous sur le panel et rendez vous dans la partie admin onglets locations (votre.domaine/admin/locations),

et créer une localisation en complétant les informations :

ptérodactyl dashboard locations

une fois créée rendez vous dans nodes et créez un nouveau node :

ptérodactyl ajout d'un node

Une fois le nodes ajouté, cliquez dessus et rendez vous dans l’onglet configuration puis cliquez sur generate token :

ptérodactyl import config automatique node

et copier l’ensemble de ligne fournie par Pterodactyl et coller sur le serveur afin de configurer automatiquement le Wings

Elle devrait ressembler à cela :

cd /etc/pterodactyl && sudo wings configure --panel-url https://votre.domaine/ --token qspfskojslkdfshljZAkfsmlfqsghmjsqdsddkgjmsldghfdgdsg --node 7

Une fois effectué redémarrer votre Wings et votre nodes, ils devraient apparaitre en vert sur votre panel

liste de ensemble des nodes

Attention n’oubliez pas d’attribuer une plage de port à votre nodes afin de pouvoir les attribuer à vos serveurs.

Pour se faire cliquer sur le nodes fraîchement créer et rendez vous Allocations

et compléter les information suivantes :

tips : pour ajouter une plage de port (port de début)-(port de fin)

liste de ensemble des ports ouverts

Etape 8 : créer vos serveur de jeux

Maintenant il ne vous reste plus qu’à générer vos serveurs de jeux a volonté !

Il suffira de compléter les champs suivant pour créer vos serveurs

comment crée un serveur de jeux p1
comment crée un serveur de jeux p2

Si vous ne trouvez pas votre serveur de jeux nativement sur install standard vous pouvez toujours chercher ou créer votre eggs, vous même et importer depuis nests et cliquer sur import Egg.

Je vous laisse ici un lien vers un révérenciel Eggs : github Parkervcp/Eggs

J’espère que vous avez appris de nombreuses choses car à partir de maintenant vous ferrez des économies en hébergeant vous mêmes vos serveur de jeux.