Installer Pterodactyl sur Fedora 36
Written by Arnaud Lier
Pterodactyl est un système de gestion de serveurs de jeux fournissant une interface intuitive pour les utilisateurs débutants comme expérimentés. Il se constitue de son Panel, l'application web exposée aux utilisateurs finaux et Wings, le daemon qui gère les conteneurs Docker dans lesquelles les serveurs de jeux s'exécutent.
Installation du Panel
Tout d'abord, mettons à jour le système et installons les différentes dépendances requises :
sudo dnf update
sudo dnf install php php-{cli,gd,mysqlnd,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} mariadb-server nginx tar unzip git redis composer certbot cronie cronie-anacron
Créons un répertoire pour accueillir le panel, téléchargeons-le et définissons des permissions adéquates :
mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
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/
Créons la base de données (ne pas oublier de modifier yourPassword
par un mot de passe sécurisé) :
mysql -u root -p
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
Installons l'application :
cp .env.example
composer install --no-dev --optimize-autoloader
php artisan key:generate --force
Configurons l'environnement :
php artisan p:environment:setup
php artisan p:environment:database
php artisan p:environment:mail
Migrons la base de données :
php artisan migrate --seed --force
Créons le premier utilisateur :
php artisan p:user:make
Définissons les permissions de manière à ce que NGINX peut correctement interagir avec les fichiers du Panel :
sudo chown -R nginx:nginx /var/www/pterodactyl/*
Configurer les récepteurs de file d'attente
Activez et démarrez le service crond
:
sudo systemctl enable --now crond.service
Ouvrez la crontab :
sudo crontab -e
et entrez-y le contenu suivant :
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
Créez le fichier /etc/systemd/system/pteroq.service
avec le contenu suivant :
# Pterodactyl Queue Worker File
# ----------------------------------
[Unit]
Description=Pterodactyl Queue Worker
After=redis.service
[Service]
# On some systems the user and group might be different.
# Some systems use `apache` or `nginx` as the user and group.
User=nginx
Group=nginx
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
Activez et lancez Redis :
sudo systemctl enable --now redis.service
Activez et lancez le "travailleur de file d'attente" :
sudo systemctl enable --now pteroq.service
Configuration de PHP-FPM
Changez l'utilisateur qui exécute PHP-FPM par nginx
en modifiant le fichier /etc/php-fpm.d/www.conf
comme suit :
; RPM: apache user chosen to provide access to the same directories as httpd
-user = apache
+user = nginx
; RPM: Keep a group allowed to write in log dir.
-group = apache
+group = nginx
Activez et lancez php-fpm :
sudo systemctl enable --now php-fpm.service
Certificat SSL
Générez un certificat SSL avec l'utilitaire certbot que nous avons installé plus tôt (remplacez <domaine>
par votre nom de domaine) :
sudo mkdir -p /var/www/_letsencrypt
sudo chown www-data /var/www/_letsencrypt
sudo certbot certonly --webroot --domain <domaine> -w /var/www/_letsencrypt
Configuration de NGINX
Créons des dossiers afin de stocker nos hôtes virtuels :
sudo mkdir -p /etc/nginx/sites-{available,enabled}
Ouvrez le fichier /etc/nginx/nginx.conf
et insérez-y une directive afin de charger les fichiers dans /etc/nginx/sites-enabled
:
include /etc/nginx/conf.d/*.conf;
+ include /etc/nginx/sites-enabled/*.conf;
Créez le fichier /etc/nginx/sites-available/pterodactyl.conf
et insérez-y ce contenu (remplacez <domaine>
par votre nom de domaine) :
server {
listen 80;
server_name <domaine>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name <domaine>;
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
ssl_certificate /etc/letsencrypt/live/<domaine>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domaine>/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:/var/run/php-fpm/www.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;
}
}
Créez un lien symbolique de notre fichier de configuration dans /etc/nginx/sites-available
pour /etc/nginx/sites-enabled
afin qu'il soit chargé par NGINX :
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
Activez et lancez NGINX :
sudo systemctl enable --now nginx.service
Installation de Wings
Installez Docker :
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
Activez et démarrez le :
sudo systemctl enable --now docker
Installez Wings :
sudo mkdir -p /etc/pterodactyl
sudo 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
Configuration de Wings
Pour configurer Wings, il vous faut créer un nœud sur le Panel ce qui peut se faire dans l'onglet "Nodes" de l'administration. Rendez-vous ensuite dans l'onglet "Configuration" de votre nœud nouvellement créé et copiez-y le contenu du fichier de configuration.
Créez le fichier /etc/pterodactyl/config.yml
et insérez-y ce que vous venez de copier.
Lancement de Wings
Créez le fichier /etc/systemd/system/wings.service
et insérez-y le contenu suivant :
[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
Activez et démarrez Wings :
sudo systemctl enable --now wings
Conclusion
Dans ce tutoriel, nous avons appris à installer Pterodactyl sur une machine faisant tourner Fedora 36 ! Pour plus d'informations, vous pouvez consulter la documentation officielle de Pterodactyl.