Pterodactyl Panel & Wings

Tutorial über die Installation von Pterodactyl Panel & Wings.
Juni 27, 2022 Translations: 

Für die Faulen (inoffizielles Skript):

bash <(curl -s https://pterodactyl-installer.se)

Panel installieren

Offizielle Dokumentation: https://pterodactyl.io/project/introduction.html

Dependencies installieren

sudo apt update -y
sudo apt install ca-certificates apt-transport-https software-properties-common gnupg curl -y
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update -y && sudo apt upgrade -y
apt -y install php8.1 php8.1-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} mariadb-server redis-server nginx tar unzip git
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Panel installieren

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/
sudo mariadb

MariaDB konfigurieren

CREATE USER 'pterodactyl'@'localhost' IDENTIFIED BY 'PASSWORT';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'localhost' WITH GRANT OPTION;
exit

Panel konfigurieren

cp .env.example .env
TRUSTED_PROXIES='<ip_reverse_proxy>'
composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan p:environment:setup
php artisan p:environment:database
php artisan p:environment:mail
php artisan migrate --seed
php artisan p:user:make

Durch diese Befehle wird die .env Datei geändert. In dieser wird mit key:generate ein Schlössel erzeugt, mit dem die Daten des Panels verschlüsselt werden. Dementsprechend empfiehlt es sich diese Datei zu sichern z.B. in einem Passwort Manager.

Rechte der Dateien anzupassen

Das Ownership der Dateien von Pterodactyl muss an den Nutzer www-data übergeben werden.

Anlegen eines Cronjobs

Es muss ein Cronjob angelegt werden, um geplante Aufgaben (z.B. Backups) zu starten.

Hierfür muss der crontab editiert werden:

crontab -e

In dem geöffneten Editor muss nun der Cronjob eingefügt werden (am Besten am Ende).

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

Erstellen eines Systemd Dienstes

Um die Queues des Panels abarbeiten zu können wird ein Worker dafür verwendet.

nano /etc/systemd/system/pteroq.service
[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
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

Starten der Dienste

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

Erstellen einer NGINX Konfiguration

Diese Konfiguration ist eine Beispielkonfiguration ohne TLS. In einer Produktionsumgebung sollte unbedingt TLS verwendet werden. Dies kann realisiert werden z.B. über einen Reverse Proxy.

Default Seite deaktivieren

rm /etc/nginx/sites-enabled/default

Erstellen der Seite für Pterodactyl

nano /etc/nginx/sites-available/pterodactyl.conf
server {

    listen 80;
    server_name example.com;


    root /var/www/pterodactyl/public;
    index index.html index.htm index.php;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    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;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-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;
    }

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

Verlinken der Seite von available zu enabled

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

NGINX neu starten

systemctl restart nginx

Wings installieren

Docker installieren

Docker kann entweder schnell über den folgenden Befehl installiert werden, aber sollte in Produktivumgebungen nach den Vorgaben in der offiziellen Docker-Dokumentation installiert werden.

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

Docker Dienst aktivieren

systemctl enable --now docker

Swapüberwachung (optional, empfohlen)

Die Konfiguration sollte ab Kernelversion 5.8 Standard sein und muss nicht manuell konfiguriert werden. Hier wird beispielsweise GRUB verwendet. Die Konfiguration kann bei anderen Bootloadern wie systemd-boot auch verwendet werden.

nano /etc/default/grub

Darin die Variable GRUB_CMDLINE_LINUX_DEFAULT anpassen:

GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"

Wings herunterladen und installieren

Ordner für Wings anlegen

mkdir -p /etc/pterodactyl

Executable herunterladen

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")"

Executable ausführbar machen

chmod u+x /usr/local/bin/wings

Wings konfigurieren

Wings kann auf zwei Arten konfiguriert werden:

  1. Automatisch über den Befehl aus der Pterodactyl Web UI
  2. Manuell über die Konfigurationsdatei /etc/pterodactyl/config.yml

Erstellen und Starten des Wings-Dienstes

Dienst erstellen

nano /etc/systemd/system/wings.service

Servicekonfiguration einfügen:

[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

Starten des Dienstes

systemctl enable --now wings

Fertig! Jetzt sollte die Installation und Konfiguration von Pterodactyl Panel & Wings erfolgreich abgeschlossen sein.