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
| Composant | Rôle |
|---|---|
| Panel | Site web d’administration : utilisateurs, serveurs, allocations (IP:port), « eggs » |
| Wings | Agent installé sur chaque machine qui héberge des serveurs ; pilote Docker |
| Egg | Modèle de serveur (image Docker + commande de démarrage + variables) : Minecraft, Python générique, Node.js… |
| Allocation | Couple 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 viarequirements.txt(installées au démarrage). - Le token du bot va dans une variable d’environnement du panel (ou un
.envnon 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 systemdLe 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ème | Piste |
|---|---|
| Nœud « hors ligne » (cœur rouge) dans le panel | Wings arrêté (systemctl status wings), port 8080 bloqué, certificat SSL du nœud |
| Serveur qui ne démarre pas | Onglet Console + journalctl -u wings -f ; image Docker de l’egg |
| SFTP refusé | Bon port (2022), bon identifiant utilisateur.xxxxxxxx, mot de passe du panel |