Pterodactyl – Installation des Panels

UPDATE 15.01.2021: Die Anleitung wurde überarbeitet und funktioniert nun auch mit Version 1 von Pterodactyl!


Das Pterodactyl ist ein Webinterface für deine Gameserver als auch Voiceserver.
Es kümmert sich komplett um die Userverwaltung bis hin zur Installation der gewünschten Server.
Du erhälst am Ende einen kompletten Überblick über all deine Systeme und kannst problemlos deine Freunde oder gar Kunden einen Zugang zu deinen Systemen geben, sodass die ihre eigenen Gameserver hosten können.
Nur die Installation, die ist mit etwas „Aufwand“ verbunden.



WARNUNG: Das Panel befindet sich immer noch in der Entwicklung! Es können jederzeit Fehler auftreten oder Sicherheitslücken vorhanden sein! Verwendung auf eigene Gefahr!

HINWEIS: Dies ist aktuell eine „Kopier mich ab und sei glücklich“-Anleitung. Sie kann unter Umständen fehlerhafte Befehle beinhalten.

Legen wir los!

Was brauchen wir?
Ein oder zwei Server, je nach dem, wie du es aufbauen möchtest.
Du kannst z.B. ein „kleinen“ Server nehmen, worauf nur das Panel mit der Benutzerverwaltung läuft. Zusätzlich kannst du einen „Powerserver“ nehmen, auf dem alle Gameserver oder Voiceserver laufen.
Du kannst aber alles auch auf einen packen.

Was brauchen die für Leistungen?
– Ein Linux-OS => Es wird nur Linux aktuell unterstützt!
– Root-Zugang
– CPU: Je nach dem, was du für Dinge drauf installierst 😉
– RAM: Je nach dem, was du für Dinge drauf installierst 😉
– Speicher: Je nach dem, was du für Dinge drauf installierst 😉

Was wird aktuell empfohlen?
Für das Panel:
– Linux – Debian 9 oder neuer / Ubuntu 18 oder neuer
– php7.3 oder höher
– nginx
– mysql

Für den Wings-Server (Gameserver):
– Linux – Debian 9 oder neuer
– Docker-Support → Achtung: kein vServer LXC, OpenVZ oder ähnliches! Mit VMware ist es z.B. ohne Probleme möglich
– Viel viel CPU und RAM, für deine Gameserver

Empfehlung: Installiere das ganze auf einem leeren / frischen Server, damit am Ende keine unerwünschten Probleme auftreten.

Wo gibts Hilfe bei Problemen?
Schwirig zu finden. Eine gute Suchmaschine hilft gerne mal.
Anlaufstellen können aber die Webseite von Pterodactyl sein oder die passende GitHub-Seite des Projekts.
Was defintiv nicht funktioniert, ist der Betrieb von Wings auf vServern die mit LXC, Virtuozzo oder OpenVZ laufen! Das wird nichts! Nutze vServer die mit z.B. VMware betrieben werden!

Auf gehts!


Installation des Panels:




1. Wir installieren Updates und ein paar hilfreiche Tools:

# apt update && apt upgrade -y
# apt install htop nano iftop -y
# apt install software-properties-common curl -y

2. Wir installieren nginx als Webserver und erstellen direkt eine Config:

# apt install nginx -y
# nano /etc/nginx/sites-available/pterodactyl

Ändere nun die Fett makierten Stellen auf deine Werte ab.
In der Regel ist es nur der Server_Name, die php-fpm-Version und der Pfad zum SSL-Zertifikat.

FÜR HTTP (nur für private Netzwerke empfohlen!):

server {
    listen 80;
    server_name <domain>;

    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/php7.4-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;
    }
}

FÜR HTTPS (Lets Encrypt wird genutzt!):
Installiere Lets Encrypt, um ein Zertifikat zu erzeugen.

# apt install certbot python3-certbot-nginx -y
# certbot certonly -d deine.domain.de

Hier die Beispielconfiguration für nginx:

server_tokens off;

server {
    listen 80;
    server_name domain.de;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name domain.de;

    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/<domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domain>/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:/run/php/php7.4-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;
        include /etc/nginx/fastcgi_params;
    }

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

Nun nur noch die Config aktivieren und nginx neu starten:

# ln -s /etc/nginx/sites-available/pterodactyl /etc/nginx/sites-enabled/pterodactyl
# systemctl restart nginx

3. MySQL / MariaDB als SQL-Datenbank installieren und eine Datenbank anlegen:

Ersetze das Passwort 123456 gegen ein sicheres!

# apt install mariadb-server -y
# mysql_secure_installation
# mysql -u root -p
# USE mysql;
# CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY '123456';
# CREATE DATABASE panel;
# GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
# FLUSH PRIVILEGES;
# exit

4. PHP installieren:
Bei Erstellung dieser Anleitung war PHP7.4 aktuell.
Falls es notwendig ist, kann das PHP-Repository noch eingebunden werden.
Für Debian 10, füge noch php7.4 in die Paketquellen hinzufügen.

# apt update
# apt upgrade -y
# apt -y install lsb-release apt-transport-https ca-certificates 
# wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
# echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
# apt update && apt upgrade -y

Bei Ubuntu:

# add-apt-repository ppa:ondrej/php
# apt update
# apt -y install php7.4 php7.4-cli php7.4-gd php7.4-mysql php7.4-pdo php7.4-mbstring php7.4-tokenizer php7.4-bcmath php7.4-xml php7.4-fpm php7.4-curl php7.4-zip mariadb-server nginx tar unzip git redis-server

5. Composer installieren:

# curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

6. Das Panel an sich installieren:

# mkdir -p /var/www/pterodactyl
# cd /var/www/pterodactyl

# curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/download/v0.7.16/panel.tar.gz
# tar -xzvf panel.tar.gz
# chmod -R 755 storage/* bootstrap/cache/

# cp .env.example .env
# composer install --no-dev --optimize-autoloader
# php artisan key:generate --force

# php artisan p:environment:setup

>> [email protected]
>> http(s)://deine-domain.de ODER http(s)://127.0.0.1
>> Europe/Berlin
>> redis
>> redis
>> redis
>> yes
>> localhost
>> LEER
>> 6379

# php artisan p:environment:database

>> 127.0.0.1
>> 3306
>> panel
>> pterodactyl
>> Dein SQL-Datenbank PW

# php artisan p:environment:mail

>> mail
>> E-Mail angeben
>> Absendername
>> Verschlüsselung
Hinweis: Solltest du ein „richtigen“ Mailserver besitzen, kannst du die SMTP-Daten eintragen und diesen für den Mailversand nutzen (ist empfohlen). Zum Testen und im Heimnetz reicht „mail“ aus.

# php artisan migrate --seed

>> yes

# php artisan p:user:make

>> yes
>> Mail
>> Username
>> Dein Name
>> Name
>> Passwort

# chown -R www-data:www-data *
# nano /etc/crontab

Dein Cronjob lautet wie folgt:

* * * * * www-data php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
# nano /etc/systemd/system/pteroq.service

Füge hier folgenden Inhalt hinein:

# Pterodactyl Queue Worker File
# ----------------------------------

[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
# On some systems the user and group might be different.
# Some systems use `apache` or `nginx` as the user and group.
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

[Install]
WantedBy=multi-user.target

7. Das Webinterface starten:

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

8. Anmelden & eine Kaffeepause einlegen 🙂
Browser öffnen und http(s)://DeineDomain.de ODER http(s)://127.0.0.1 aufrufen und dich mit den Daten aus dem Setup anmelden.
Damit das Panel korrekt funktioniert, solltest du eine Internetverbindung haben. Pterodactyl läd diverse Webseitenelemente von Cloudlfare herunter und nutzte am Anfang das (drecks) Tool reCaptcha von Google.

Tipp:
Geh in die Einstellungen (rechts oben), dann auf Settings. Dort lässt sich die Sprache auf Deutsch stellen und das (drecks) reCaptcha ausschalten.

Lege jetzt erst einmal eine Kaffeepause ein. Das war anstrengend 🙂

 


Wings installieren

Damit wir nun einen Gameserver oder einen Voiceserver in Betrieb nehmen können, brauchen wir einen Wings-Server.
Das ist der neue „Deamon“, welcher nun auch Servern installiert werden kann, um darauf dann die Gameserver zu installieren.
Wings ist unsere Schnittstelle zwischen dem Panel und den eigentlichen (Hardware)Servern.




WARNUNG: Wings funktionieren NICHT auf LXC, Virtuozzo oder OpenVZ! Du wirst es zwar installiert bekommen, aber Docker wird NICHT darin korrekt funktionieren!
Nutzt du einen Server in einem Rechenzentrum von einem Anbieter, frag nach, was er für Virtualisierungssoftware einsetzt!

1. Docker installieren
Wir benötigen Docker. Alle Server laufen in einem Docker Container getrennt voneinander. So kann keiner z.B. mit einem modifizierten Gameserver, dein Hostsystem komplett abschießen.

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

2. Docker in Autostart
Damit Docker bei Systemstart ebenfalls gestartet wird, setze noch folgenden Befehl ab:

# systemctl enable --now docker

3. Wings installieren
Nun installieren wir Wings auf unserer Maschine. Das schaffen wir mit 3 Befehlen.

# mkdir -p /etc/pterodactyl
# curl -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64
# chmod u+x /usr/local/bin/wings

4. Config erstellen
Erstelle im Webinterface bei Locations einen neuen Ort. Bennene ihn irgendwie.
Erstelle dann einen neuen Node bei Nodes.
Gebe allgemeine Infos an (Name, Serverleistung,…) und weiter unten deine Domain zum (Game)Server oder die IP-Adresse auf dem Wings läuft.
Kannst du HTTPS nutzen, nutze dies auch! 🙂
Die Einstellungen lassen sich anschließend im Bereich „Settings“ des Node-Servers editieren.
Im Tab „Configuration“ erhälst du nun eine Config, die wir benötigen.

Gebe auch im Tab „Allocation“ noch ggf. weitere verfügbare IPs und vor allem nutzbare Ports an!

5. Config einfügen
Füge nun die Config auf deiner Host-Maschine mit der Wings-Installation ein.
Öffne dazu die Config:

# nano /etc/pterodactyl/config.yml

und füge hier den Inhalt aus dem Panel ein.
Speichere dann die Datei ab.

6. Wings testweise starten
Starte nun Wings einmal auf dem Server direkt im Terminal. So sehen wir eventuelle Fehler im Log.

# wings --debug

Alles in Ordnung? Dann gehts weiter!
(Wenn nicht, Fehler suchen!)
Mit STRG + C kannst du Wings wieder beenden.

8. Autostart für Wings
Wings sollen auch bei Systemstart automatisch mit anlaufen. Also erstellen wir auch dafür noch eine Service-Datei.

# nano /etc/systemd/system/wings.service

Füge hier folgenden Inahlt ein:

[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service

[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitterval=600

[Install]
WantedBy=multi-user.target

9. Wings starten
Nun ist es an der Zeit, Wings auf dem System „normal“ zu starten!

# systemctl enable --now wings

Im Panel sollte nun das grüne Herz-Symbol zu erkennen sein und der Server als Verfügbar eingestuft werden.


Der Daemon ist nicht mehr aktuell! Installiere die Wings!

Den Daemon installieren

Damit wir nun Gameserver installieren können, brauchen wir den Daemon-Server. Dies ist sozusagen unser Arbeitssklave, der Befehle vom Webinterface annimmt und umsetzt.
Du kannst ihn auf nur einem Server installieren oder gleich auf mehreren. Du kannst somit viele Server über ein Panel steuern.




WICHTIGER HINWEIS: Der Daemon funktioniert aktuell NUR mit Debian 9 (bis Update 12) und mit nodejs 10.19.0 + npm 6.13.4. Bei neueren Versionen erhalten wir beim Installieren des Dienstes Fehlermeldungen von npm!

1. Benötigte Software installieren:

# apt install curl unzip zip htop iftop nano -y

2. Docker installieren:
Hinweis: Diese „Standardbefehle“ sollte funktionieren. Sollte die Installation nicht durch laufen, befrage eine vertrauensvolle Suchmaschine nach einer Lösung! Teilweise muss Docker etwas anders installiert werden.

# curl -sSL https://get.docker.com/ | CHANNEL=stable bash
# systemctl enable docker.service
# systemctl start docker.service

3. NodeJS und weitere benötigte Software installieren:

# curl -sL https://deb.nodesource.com/setup_10.x | bash -
# apt install nodejs make gcc g++ composer -y

4. Ordner für den Daemon und Speicherpfad für Gameserver anlegen:

# mkdir -p /srv/daemon /srv/daemon-data
# cd /srv/daemon

Tipp: Ändere die Pfade ab, wenn dein Speicherplatz irgendwo anders gemountet ist.

5. Dem Daemon herunterladen und installieren lassen:

# curl -L https://github.com/pterodactyl/daemon/releases/download/v0.6.12/daemon.tar.gz | tar --strip-components=1 -xzv
# npm install --only=production

WARNUNG: Sollten jetzt viele Errors auftreten, so wird der Daemon aktuell auf deinem System nicht unterstützt. Sorry 🙁

6. Locations erstellen und Code erzeugen:
Erstelle im Webinterface bei Locations einen neuen Ort. Bennene ihn irgendwie.
Erstelle dann einen neuen Node bei Nodes.
Gebe allgemeine Infos an (Name, Serverleistung,…) und weiter unten deine Domain zum (Game)Server oder die IP-Adresse auf dem der Daemon läuft.
Kannst du HTTPS nutzen, nutze dies auch! 🙂
Die Einstellungen lassen sich anschließend im Bereich „Settings“ des Node-Servers editieren.
Im Tab „Configuration“ erhälst du nun eine Config, die wir benötigen.

Gebe auch im Tab „Allocation“ noch ggf. weitere verfügbare IPs und vor allem nutzbare Ports an!

7. Config im Daemon hinterlegen:
Öffne nun die Datei:

# nano /srv/daemon/config/core.json

Füge dort den generierten Code aus dem Webinterface (Configuration) ein und speichere die Datei ab.

8. Den Daemon starten:

# npm start

Du willst den Daemon für immer laufen lassen?
Installiere forever für npm:

npm install -g forever

Starte dann den Daemon mir forever:

forever start src/index.js

Stoppen geht so:

forever stop src/index.js

Super! Wir sind fürs erste einmal durch!
Nun kannst du deinen Server fertig konfigurieren, Benutzer anlegen und Gameserver erstellen!

Viel Spaß fürs Erste!

Diese Diashow benötigt JavaScript.

Hinweis zum Schluss:

Das ganze Projekt hat noch etliche Fehler und es kann jederzeit zu unerwünschten Problemen kommen.
Da ich keiner der Entwickler bin und auch nicht mit diesen in Kontakt stehe, kann ich bei Problemen nicht helfen!
Wende dich am besten direkt an die Entwickler, die können da viel besser weiter helfen.

Solltest du noch ein paar Tipps & Tricks auf Lager haben, scheu dich nicht, diese unten uns allen mitzuteilen!

Panel + Wings Aktualisieren

Hier findest du noch die wichtigsten Befehle, um das Panel und Wings zu aktualisieren.

Panel

Der einfache Weg:
1. Update die installierten Pakete:

apt update && apt upgrade -y && apt autoremove -y

2. Starte den automatischen Updater:
HINWEIS: Passe ggf. die php-Version an!

cd /var/www/pterodactyl && php7.4 artisan p:upgrade

3. Beantworte die 3 gestellten Fragen mit YES, sofern alles passt

Der manuelle Update-Pfad sieht wie folgt aus:
1. Update die installierten Pakete:

apt update && apt upgrade -y && apt autoremove -y

2. Deaktiviere das Panel:
HINWEIS: Passe ggf. die php-Version an!

# cd /var/www/pterodactyl
php7.4 artisan down

3. Lade die neuste Panel-Version herunter und entpacke diese:

# curl -L https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz | tar -xzv

4. Setze die passenden Berechtigungen:

# chmod -R 755 storage/* bootstrap/cache

5. Aktualisiere die Abhängigkeiten:

# composer install --no-dev --optimize-autoloader

6. Leere den Cache:

# php artisan view:clear
# php artisan config:clear

7. Aktualisiere die Datenbank:
HINWEIS: Passe ggf. die php-Version an!

# php7.4 artisan migrate --seed --force

8. Setze die passenden Berechtigungen:

# chown -R nginx:nginx /var/www/pterodactyl/*

9. Starte alles neu:
HINWEIS: Passe ggf. die php-Version an!

# php7.4 artisan queue:restart
# php7.4 artisan up

Wings

1. Lade die aktuellste Version herunter und setze die passenden Berechtigungen:

# 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")"
# chmod u+x /usr/local/bin/wings

2. Starte Wings neu:

# systemctl restart wings

Ein Kommentar

  1. Guten Tag Herr Hoerli,

    wäre es möglich ihren Artikel zu Aktualisieren?
    Ich glaube es hat sich so einiges geändert und so mit eine Upgrade Verdient.

    Gruß
    Martin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.