O07 - Pterodactyl : panneau de gestion de serveurs

Objectif

Comprendre l’architecture Panel + Wings, savoir déposer des fichiers en SFTP, et connaître les grandes étapes d’une installation propre (sur une VM ou un VPS, pas sur ton PC principal).

Version

Pterodactyl 1.x (Panel PHP/Laravel + Wings en Go). Les prérequis exacts (version de PHP, de MariaDB…) changent : toujours suivre pterodactyl.io/panel/1.0/getting_started.html au moment de l’installation.


1. Architecture

flowchart LR
  U["👤 Navigateur"] -->|"HTTPS 443"| P["Panel<br/>(Nginx + PHP + MariaDB + Redis)"]
  P -->|"API HTTPS (8080)"| W["Wings<br/>(démon sur le nœud)"]
  W --> D1["🐳 Conteneur<br/>serveur Minecraft"]
  W --> D2["🐳 Conteneur<br/>bot Discord (Python)"]
  F["💻 FileZilla / sftp"] -->|"SFTP 2022"| W
  J["🎮 Joueurs"] -->|"ports alloués<br/>(ex. 25565)"| D1
ComposantRôle
PanelSite web d’administration : utilisateurs, serveurs, allocations (IP:port), « eggs »
WingsAgent installé sur chaque machine qui héberge des serveurs ; pilote Docker
EggModèle de serveur (image Docker + commande de démarrage + variables) : Minecraft, Python générique, Node.js…
AllocationCouple IP:port attribué à un serveur

2. Utilisation courante

Déposer les fichiers du bot en SFTP

Les identifiants sont dans le panel : Serveur → Settings → SFTP Details.

sftp -P 2022 "ton_utilisateur.8f3a1c2d@panel.exemple.fr"
sftp> put -r discord-bot/*
# ou
scp -P 2022 bot.py "ton_utilisateur.8f3a1c2d@panel.exemple.fr:/"

L’identifiant SFTP est de la forme utilisateur.identifiant_court_du_serveur, le mot de passe est celui du panel. Graphique : FileZilla → protocole SFTP, port 2022.

Bot Discord avec l’egg « Python generic »

  • Variables de démarrage : fichier principal bot.py, dépendances via requirements.txt (installées au démarrage).
  • Le token du bot va dans une variable d’environnement du panel (ou un .env non partagé), jamais en dur dans le code.
  • Console du panel = sortie du programme (print, erreurs Python).

3. Installation : les grandes étapes (VM Debian 12/13 ou Ubuntu 24.04)

flowchart TD
  A["1. Dépendances Panel :<br/>PHP (+ extensions), MariaDB, Nginx,<br/>Redis, Composer"] --> B["2. Télécharger le Panel dans /var/www/pterodactyl<br/>composer install --no-dev"]
  B --> C["3. php artisan key:generate<br/>p:environment:setup / database<br/>migrate --seed / p:user:make"]
  C --> D["4. Cron + service pteroq (file d'attente)<br/>+ vhost Nginx + HTTPS (certbot)"]
  D --> E["5. Nœud : Docker + binaire Wings<br/>/etc/pterodactyl/config.yml (copié depuis le panel)"]
  E --> F["6. systemctl enable --now wings<br/>allocations + création des serveurs"]

Commandes clés (extraits - se référer à la doc officielle) :

# Panel
cd /var/www/pterodactyl
php artisan p:environment:setup
php artisan p:environment:database
php artisan migrate --seed --force
php artisan p:user:make
# Wings
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
sudo systemctl enable --now docker
sudo 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")"
sudo chmod u+x /usr/local/bin/wings
sudo wings --debug          # premier test, puis service systemd

Le script communautaire « pterodactyl-installer » est non officiel : lis-le avant de l'exécuter en root. Ouvre au pare-feu uniquement 80/443 (panel), 8080 (API Wings), 2022 (SFTP) et les ports des jeux.

4. Dépannage

ProblèmePiste
Nœud « hors ligne » (cœur rouge) dans le panelWings arrêté (systemctl status wings), port 8080 bloqué, certificat SSL du nœud
Serveur qui ne démarre pasOnglet Console + journalctl -u wings -f ; image Docker de l’egg
SFTP refuséBon port (2022), bon identifiant utilisateur.xxxxxxxx, mot de passe du panel

Voir aussi