Pterodactyl
Connaissances requises pour ce tuto :
- Linux et ses outils
- Docker
- Docker Compose
- Cloudflare (domaine et DNS)
- Traefik
- API (ses principes)
- CORS
Introduction
Pterodactyl est panneau d’installation, de configuration et de gestion de jeux.
Pterodactyl® est un panneau de gestion de serveur de jeu gratuit et open-source construit avec PHP, React et Go. Conçu dans un souci de sécurité, Pterodactyl exécute tous les serveurs de jeu dans des conteneurs Docker isolés, tout en exposant une interface utilisateur belle et intuitive aux utilisateurs finaux.Ne vous contentez pas de peu. Faites des serveurs de jeux un citoyen de première classe sur votre plateforme.
Il est disponible ici : https://pterodactyl.io/
Il repose sur 2 composants principaux :
- Le panneau, panel, qui est l’interface (frontend) du logiciel
- Le démon, wings, de gestion des jeux (backend)
Prérequis
Cet article par du principe que vous avez un nom de domaine et que ses DNS sont gérés par Cloudflare.
Si ce n’est pas le cas, il vous faudra adapter en fonction de votre hébergeur ; ou au moins votre gestionnaire de DNS.
La 2ᵉ supposition est que vous disposez d’un serveur Traefik afin de disposer d’un reverse proxy.
Et celui-ci doit être lié à Cloudflare avec une gestion de certificats wildcard.
Donc, si vous n’avez ni nom de domaine, ni une gestion des DNS chez Cloudflare, ni Traefik ; je vous conseille d’aller mettre ça en place avant de continuer.
De plus, il faut avoir les services suivant d’opérationnels au préalable : MariaDB et Redis
Il faudra, en suivant entièrement cet article, faut cloner le dépôt git dans le répertoire /opt/docker :
1
git clone https://git.zogg.fr/kraoc/pterodactyl
Par défaut, l’utilisateur (uid) et le groupe d’utilisateur (gid) utilisés sont ceux du 1er compte utilisateur Linux (1000) ; tout comme le répertoire de base est dans /opt/docker/pterodactyl.
Libre à vous de modifier ces données ; en pensant à mettre à jour les valeurs dans le docker-compose et dans init.sh.
Faites une recherche dans tous les fichiers portant la mention REDACTED afin de lesremplacer par les vraies valeurs.
Il s’agit des données d’accès aux bases de données, email, nom de domain (domain.com)…
Attribution des droits
Une fois le dépôt rapatrié, il vous faudra corriger les droits et permissions :
1
2
3
cd /opt/docker/pterodactyl
sudo chown -R 1000:1000 .
sudo chown root:root ./scripts/init.sh && sudo chmod a+x ./scripts/init.sh
À ajuster si vous utilisez un autre compte/groupe utilisateur.
Cloudflare
Il est temps de mettre en place la partie DNS chez Cloudflare.
Soit, vous êtes hébergés et toute la configuration est uniquement sur un serveur distant directement lié à votre nom de domaine.
Dans ce cas, vous créez 2 entrées de type CNAME :
Type | Nom | Contenu | Etat du proxy | Durée TTL |
CNAME | panel | domain.com | Proxied | Automatic |
CNAME | node | domain.com | Proxied | Automatic |
Si vous êtes auto hébergés, il faut créer 2 entrées de type A :
Type | Nom | Contenu | Etat du proxy | Durée TTL |
CNAME | panel | IP publique du serveur | Proxied | Automatic |
CNAME | node | IP publique du serveur | Proxied | Automatic |
Au cas où, vous pouvez passer Cloudflare en mode développement pour désactiver le cache le temps de faire quelques tests.
Traefik
Je partirai du principe que Traefik est installé et fonctionnel ; et que sa configuration s’effectue par des fichiers Yaml.
Il vous suffit d’ajouter le fichier traefik/pterodactyl.yml dans le dossier providers.d de Traefik.
N’utilisez pas le cors-all ailleurs que dans cette configuration, il permet au panel et à wings de communiquer par le biais de leurs API sur des IP différentes, des ports différents et des noms de domaines différents ; alors que Wings devrait être en mesure de taper sans problème sur le panel. C’est le seul moyen, dans cette configuration, de passer outre les blocages CORS.
Une fois que vous avez mis en place les règles dans Traefik, il suffit de redémarrer son conteneur et hop, c’est bon pour cette partie.
La stack
La stack définit deux services :
- panel : l’interface web de gestion de Pterodactyl (frontend)
- node : le système de gestion des jeux/applications (backend)
Les variables de configurations sont présentent dans les fichiers suivants :
.env
PROCESSORS | Nombre de CPUs attribués aux conteneurs |
VM_USER | Identifiant utilisateur_ (uid)_ |
VM_GROUP | Identifiant group (gid) |
VM_IP | Adresse IP publique de la VM |
VM_PORT_DOCKER | Numéro de port du Docker Socket Proxy |
VM_PORT_PANEL | Numéro de port externe du Panel |
VM_PORT_WINGS_HTTP | Numéro de port externe du Node |
VM_PORT_WINGS_SFTP | Numéro de port externe pour le SFTP |
Si vous rencontrez des problèmes avec des ports déjà utilisés… Ajustez :p Y compris dans la configuration de Traefik.
env/pterodactyl.env
APP_TIMEZONE | Définit la zone horaire pour Pterodactyl |
env/panel.env
PTERODACTYL_TELEMETRY_ENABLED | Active ou non la télémétrie |
APP_ENV | A laisser sur production |
APP_ENVIRONMENT_ONLY | A laisser sur false afin de charger les paramètres dynamiqmement |
APP_SERVICE_AUTHOR | Email du gestionnaire de ce serveur Pterodactyl |
APP_URL | URL complète pour accéder au Panel |
TRUSTED_PROXIES | * (par défaut, sinon il y a des problèmes CORS) |
DB_HOST | IP de la base de données |
DB_PORT | Port de la base de données |
DB_DATABASE | Nom de la base de données |
DB_USERNAME | Utilisateur pour gérer cette base de données |
DB_PASSWORD | Mot de passe de l’utilisateur |
REDIS_HOST | IP du serveur Redis |
REDIS_PORT | Port du serveur Redis |
MAIL_HOST | FQDN du serveur de mail |
MAIL_PORT | Port SMTP du serveur de mail |
MAIL_DRIVER | Type d’envoit pour les mails (smtp par défault) |
MAIL_ENCRYPTION | Méthode de chiffrement |
MAIL_FROM | Adresse email de l’émetteur |
MAIL_USERNAME | Nom d’utilisateur pour l’envoi des mails |
MAIL_PASSWORD | Mot de passe de l’utilisateur |
CACHE_DRIVER | Gestionnaire de mis en cache |
SESSION_DRIVER | Gestionnaire de sessions |
QUEUE_DRIVER | Gestionnaire de file d’attente |
env/node.env
WINGS_UID | UID de l’utilisateur du Node |
WINGS_GID | ID de l’utilisateur du Node |
WINGS_USERNAME | Identifiant utilisateur interne du Node (container par défaut) |
Lancement
1
sudo docker compose up -d
Lorsque la stack démarre correctement, pensez à créer votre premier utilisateur (qui sera automatiquement administrateur du panel).
1
2
3
sudo docker exec -it panel sh
php artisan p:user:mak
exit
Une fois ceci réaliser, allez faire un tour du côté de votre panel :)
https://panel.domain.com
Le Panel et son 1er Node
Une fois sur le panel et correctement identifié, la 1ère chose à faire est de créer un node.
Ce qui est important ici :
- FQDN: doit être le nom complet que vous avez défini sur Cloudflare et paramétré dans Traefik pour le [u]node[/u] (node.domain.com)
- Use SSL Connection: doit être coché
- Behind Proxy: doit être coché
- Daemon Port: doit être sur 443
Pour la partie allocation de mémoire et d’espace disque, vous mettez ce que vous voulez tant que c’est suffisant pour installer les jeux et les lancer. Il s’agit des valeurs maximales disponibles pour l’ensemble des jeux qui seront installés sur ce node.
Une fois que c’est passé, vous allez sur l’onglet Configuration et vous copiez le contenu pour aller le coller dans le fichier conf/etc/config.yml.
Le fichier devrait ressembler à celui présent dans le dépôt :
– https://git.zogg.fr/kraoc/pterodactyl/…
Les éléments suivants sont remplis automatiquement par Wings et ne doivent pas être modifiés à la main : uuid, token_id, token.
Il est très important que le port soit bien sur 8080 et non sur 443
Vous redémarrez uniquement le conteneur wings et une fois que c’est fait, vous cliquez sur Nodes dans le bandeau gauche du Panel.
Et là, tant que vous n’avez pas le petit cœur vert indiquant que le démon Wings est bien lancé et accessible, vous reprenez toutes les étapes précédentes parce que vous avez loupé un truc.
Et sans le cœur vert, vous disposerez seulement d’un front sans accès au back et donc pas de jeux…
Lorsque vous avez la confirmation que Wings est opérationnel, vous avez fait le plus dur ; à savoir mettre en place un panel et son gestionnaire de jeux fonctionnels.
Félicitations !
Allocations / Serveurs
Maintenant que le Panel et Wings fonctionnent et sont capables de communiquer, il ne reste plus qu’à attribuer des ressources (allocations) pour les futurs jeux (servers).
On va partir sur un objectif simple : un serveur Minecraft Vanilla tout simple.
Sur le Node, vous allez dans l’onglet Allocations et dans la partie droite, vous saisissez l’adresse IP du node (dans IP Address) et vous mettez un numéro de port (dans Ports) et vous faites Submit.
L’adresse IP du node est celle du démon Wings.
Vous venez de définir une ressource (allocation = couple IP du node + un n° de port [ou une plage de n° de ports]).
À présent, vous passez sur l’onglet Servers et il est vide !…
Eh bien, on va le remplir :)
Dans le bandeau gauche du Panel, vous cliquez sur Servers et vous faites Create New !
Vous lui donnez :
- un nom (Server Name)
- un propriétaire (Server Owner, par défaut, ce sera votre compte mail)
- un node (qui doit déjà être sélectionné par défaut)
- une allocation (qui doit par défaut être celle que vous venez de définir)
- du cpu (CPU Limit)
- de la mémoire (Memory)
- de l’espace disque (Disk Space)
Pour CPU Limit, il s’agit du nombre de threads (dépendant de la machine hôte) que vous affecterez au jeu.
Donc 100% définit un jeu qui tournera sur 1 thread.
Si vous avez un processeur disposant de cœurs et que vous souhaitez tout utiliser, alors mettez : 400%
Vous allez choisir le groupe de jeux (Nest) et le type de jeux (Egg) que vous souhaitez utiliser.
Dans notre cas :
- Nest = Minecraft
- Egg = Minecraft Vanilla
Et il ne reste plus qu’à cliquer sur Create Server en bas à droite.
Vous allez recevoir par mail, une fois l’installation terminée, la confirmation que tout s’est bien passé.
Dans le cas contraire, soit il n’y a pas assez de ressource allouée, soit vous avez modifié d’autres paramètres (et dans ce cas, repartez sur un cas simple), soit il faut supprimer le serveur et recommencer.
Minecraft Vanilla
Lorsque le serveur de jeux (ici Minecraft Vanilla) est installé et opérationnel, il n’y a plus qu’à le lancer :)
Vous revenez à l’accueil du Panel et vous cliquez sur votre serveur pour le sélectionner.
Là, vous cliquez sur Start et vous attendez qu’il se lance !
Lancer votre client Minecraft, passez en multijoueurs et connectez-vous en utilisant les informations indiquées dans Address.
Amusez-vous !
Minecraft Fabric
Voici un petit exemple ce que ça peut donner avec un serveur Minecraft Fabric légèrement moddé qui utilise mon image GraalVM :)
Remerciements
- Pterodactyl Panel: https://pterodactyl.io/
- Marius Hosting: https://mariushosting.com/docker/
IBRACORP:
Techno Tim:
- https://docs.technotim.live/
- Put Wildcard Certificates and SSL on EVERYTHING: https://docs.technotim.live/posts/traefik-portainer-ssl/
- I Built the PERFECT Game Server with Pterodactyl and Docker: https://docs.technotim.live/posts/pterodactyl-game-server/
Sans IBRACorp et TechnoTim , je n’aurais pas réussi à mettre en place une solution aussi complète !
Changelog
2022-12-12
- Ajout de la configuration avec Caddy en reverse proxy
- Déport de la base de données en externe (BDD commune pré-installée)
- Déport du cache Redis en externe (pré-installé)
- Simplification de la stack Portainer (uniquement le Panel et Wings)
2023-04-04
- Mise à jour de Panel en v1.11.3 et de Wings en v1.11.5
- Mise à jour des chemins
- Corrections des scripts
- Merci à Uzurka#0404 pour les retours et corrections !
2023-04-06
- Ajustements et corrections
- Ajouts de précisions dans le tutoriel
2025-02-25
- Réécriture de l’article
- Ajout d’un dépôt git