Setup-Wizard für intraRP — ein Intranet-Rollenspielsystem mit Discord-Integration für FiveM-Feuerwehr- und Rettungsdienst-Communities.
Das Script lädt das aktuelle Release-ZIP herunter, führt die Datenbank-Migrations aus, erstellt die .env und löscht sich anschließend selbst.
- PHP ≥ 8.2 (empfohlen: 8.3 oder 8.4)
- Folgende Extensions müssen aktiviert sein:
| Extension | Zweck |
|---|---|
pdo |
Datenbank-Basis |
pdo_mysql |
MySQL-Treiber |
mbstring |
String-Handling (Twig, OAuth2) |
openssl |
HTTPS, OAuth2-Tokens |
fileinfo |
Upload-MIME-Erkennung |
dom |
XML/HTML-Parser (Twig, dompdf) |
xml |
XML-Parser |
json |
JSON-Serialisierung |
session |
Benutzer-Sessions |
intl |
Internationalisierung |
zip |
Release-ZIP entpacken |
curl |
HTTPS-Downloads |
filter |
Input-Validierung |
ctype |
String-Validierung |
gd oder imagick |
PDF-Generierung (dompdf) |
Das Release-ZIP ist ca. 100 MB groß. Folgende php.ini-Werte werden empfohlen:
memory_limit = 512Mmax_execution_time = 300upload_max_filesize = 256Mpost_max_size = 256M
- MySQL-Datenbank (muss vorab angelegt werden — Tabellen werden automatisch erstellt)
- Discord-Applikation (Client ID + Secret)
- Git — nur für Main/Custom Branch (Entwicklermodus)
exec()-Berechtigung — nur für Main/Custom Branch (Composer-Autoinstall)
setup.phpin das gewünschte Webserver-Verzeichnis hochladen- Sicherstellen dass das Verzeichnis für PHP beschreibbar ist (
chmod 0775) - Im Browser aufrufen (z.B.
https://example.com/setup.php) - Dem 6-Schritt-Wizard folgen:
- Prüfung — PHP-Version, Extensions, Schreibrechte, Download-Methode
- Version — Release-ZIP oder Branch auswählen
- Datenbank — Zugangsdaten eingeben und Verbindung testen
- System — Domain und Base Path bestätigen
- Discord — Client ID und Secret eintragen + live testen
- Übersicht — Eingaben prüfen und abschicken
- Setup abschicken — der Wizard lädt das ZIP, führt die DB-Migrations aus, schreibt die
.envund löscht sich selbst
Die Discord-Redirect-URI wird im System-Step automatisch angezeigt — diese muss in der Discord-Applikation unter OAuth2 → Redirects eingetragen werden.
Über setup.php?dev kann ein Custom Branch gewählt werden. Dafür muss Git auf dem Server installiert sein. Der Wizard versucht automatisch, Composer herunterzuladen und composer install --no-dev -o auszuführen — wenn exec() gesperrt ist, wird eine manuelle Anleitung gezeigt.
Mit setup.php?debug wird display_errors aktiviert und PHP-Fehler werden direkt im Browser ausgegeben. Für Produktivumgebungen nicht verwenden.
„Verzeichnis nicht beschreibbar"
Der PHP-User (meistens www-data oder der FPM-Pool-User) muss ins Setup-Verzeichnis schreiben dürfen. Lösung: chown www-data . und chmod 0775 . im Setup-Verzeichnis.
„Extension XY fehlt"
Shared-Hoster: im Kundenpanel nach „PHP-Module" suchen und die fehlende Extension aktivieren. VPS: apt install php8.2-<name> bzw. das Äquivalent der Distribution, dann PHP-FPM neu starten.
„GitHub API Fehler" / Rate-Limit
Das Setup kontaktiert api.github.com/repos/EmergencyForge/intraRP/releases/latest. Bei Rate-Limit-Überschreitung fällt es automatisch auf die nicht-authenticated Redirect-Route zurück. Wenn das auch scheitert: kurz warten (GitHub limitiert 60 requests/h pro IP) oder mit ?dev den Branch-Modus wählen.
„Discord lehnte ab: invalid_client" Die Client ID oder das Secret ist falsch. Im Discord Developer Portal unter der App → OAuth2 → Reset Secret, dann den neuen Wert eintragen.
„setup.php konnte nicht automatisch gelöscht werden"
Nach erfolgreichem Setup muss setup.php manuell aus dem Webroot entfernt werden — sonst könnte jemand das System re-installieren und dabei vorhandene Daten überschreiben.
Migration-Warnung im Abschluss-Screen
Wenn die Phinx-Migrations nicht automatisch liefen (z.B. weil vendor/ fehlt), versucht intraRP sie beim ersten Web-Request erneut auszuführen. Falls das ebenfalls scheitert: im Projekt-Root vendor/bin/phinx migrate -e production manuell ausführen.
- Das Setup nutzt einen CSRF-Token und ein Rate-Limit (20 Requests/Minute), um automatisierte Angriffe abzuwehren
- Der generierte
APP_KEYist ein 32-Byte Zufallswert ausrandom_bytes()— wird für künftige Token-Signaturen verwendet - Das Setup loggt Fehler ausschließlich in der PHP-Session, nicht in eine Datei — damit nach dem Setup keine Logs mit Pfaden/Credentials zurückbleiben
- Beim Branch-Update prüft das Setup, ob ein vorhandenes
.git-Verzeichnis tatsächlich aufEmergencyForge/intraRPzeigt, bevor esgit reset --hardausführt