Pterodactyl – Installation des Panels

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 10 / Ubuntu 18 oder 19
– php7.3 oder höher
– nginx

Für den Daemon-Server (Gameserver):
– Linux – Debian 9! → Bei neueren System schlägt aktuell die Installation fehl!
– Docker-Support → Achtung: vServer-Hoster die die Server mit LXC betreiben, unterstützten ggf. kein Docker!
– nodejs 10.X + npm 6.X → Installieren wir weiter unten
– Viel viel CPU und RAM, für deine Gameserver

WICHTIG: Betreibst du alles auf einem Server, wird aktuell dringend Debian 9 empfohlen!

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

Wurde das ganze schon getestet?
Ja.
Debian 9 → Läuft alles!
Debian 10 → Nur das Webinterface funktioniert. Der Daemon nicht!
Ubuntu 19.10 → Nur das Webinterface funktioniert. Der Daemon nicht!
Schau am besten vor Beginn einmal auf die GitHub-Seite. Dort steht auch, was funktionieren sollte und was nicht.

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.

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.de;

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 -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.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.de/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    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.

# add-apt-repository ppa:ondrej/php
# 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 -y

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 --strip-components=1 -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:

* * * * * 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 🙂

 


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!

Schreibe einen Kommentar

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

* Durch das Absenden dieses Kommentars werden deine angegebenen Daten auf dem Server gespeichert. Du stimmst dadurch den Datenschutzbedingungen zu.