From f7d3a9ce839fe6c22823b60da5f567b8e4956cd4 Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 23 Mar 2026 09:25:48 +0100 Subject: [PATCH] docs: Doku an Code anpassen, AdminServ-Konfigurationspasswort automatisch absichern --- .env.example | 5 ++++- README.md | 3 +-- assets/bin/RunTrackmaniaServer.sh | 12 ++++++++++++ docs/README.md | 29 ++++++++++++++++++---------- docs/adminserv.md | 32 ++++++++++++++++++++++--------- docs/konfiguration.md | 1 + docs/schnellstart.md | 4 ++-- 7 files changed, 62 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index cd5a740..0ef78a0 100644 --- a/.env.example +++ b/.env.example @@ -69,12 +69,15 @@ FORCE_MOD_SPEED= FORCE_MOD_ALPINE= FORCE_MOD_RALLY= -# --- MatchSettings --- +# --- Spieleinstellungen (MatchSettings) --- # Steuert, welche MatchSettings-Datei beim Serverstart geladen wird. # "auto" = die neueste .txt-Datei in data/gamedata/Tracks/MatchSettings/ wird automatisch erkannt. # Alternativ kann ein expliziter Dateiname angegeben werden (z.B. "turnier_settings.txt"). MATCHSETTINGS_FILE=auto +# Warmup-Dauer für alle Runden (0 = deaktiviert, 1 = eine Runde Warmup) +ALLWARMUPDURATION=0 + # --- Debugging --- # Setze diesen Wert auf true, um PHP-Fehlermeldungen anzuzeigen. Dies kann bei der Fehlersuche hilfreich sein, sollte aber in einer Produktionsumgebung auf false belassen werden. PHP_DISPLAY_ERRORS=false diff --git a/README.md b/README.md index cafe7d4..75a694f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Ein vollständiges Docker-Setup für einen **TrackMania Nations Forever**-Server - **[XAseco](docs/xaseco.md)** – Server-Controller, der lokale Rekorde, Dedimania-Weltrekorde, Karma/Votes und eine Track-Jukebox direkt im Spielchat verwaltet - **[AdminServ](docs/adminserv.md)** – Web-Oberfläche zur komfortablen Verwaltung und Konfiguration des Servers - **[RemoteCP](docs/remotecp.md)** – alternative Web-Verwaltungsoberfläche mit eigenem Login- und Benutzersystem -- **[Mods / Skins](docs/remotecp.md#mods--skins)** – über 50 vorkonfigurierte Stadium-Skins (gehostet auf [assets.techniverse.net](https://assets.techniverse.net/tm/skins/)), automatisch beim Start forcierbar Alle Komponenten laufen in einem einzigen Container und werden über Umgebungsvariablen konfiguriert. @@ -64,7 +63,7 @@ Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md ## Danksagung -Danke an **Thomas** ([retronerd.at](https://retronerd.at)), dass er mir sein Wissen zur Verfügung gestellt hat und dass er hier im Projekt mitgewirkt hat. +Ein herzliches Dankeschön an **[Thomas](https://retronerd.at)** – für seine tatkräftige Unterstützung, sein wertvolles Wissen und seine Mitwirkung an diesem Projekt. Ohne ihn wäre dieses Projekt nicht das, was es heute ist! ## Spiegelung diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index 54dfd89..e09a225 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -71,6 +71,18 @@ EOPHP chown www-data:www-data "$ADMINSERV_DIR/config/servers.cfg.php" echo " AdminServ-Server-Eintrag automatisch konfiguriert (Port: ${XMLRPC_PORT})." + # AdminServ-Konfigurationspasswort automatisch sichern + # OnlineConfig::PASSWORD in adminserv.cfg.php schuetzt die /config-Seite + # (Server hinzufuegen/aendern/loeschen). Da der Server-Eintrag bereits + # automatisch konfiguriert wird, ist kein manueller Zugriff noetig. + # Der Standard-Hash aus dem ZIP wird durch einen zufaelligen ersetzt. + ADMINSERV_CFG="$ADMINSERV_DIR/config/adminserv.cfg.php" + if [ -f "$ADMINSERV_CFG" ]; then + RANDOM_HASH=$(head -c 32 /dev/urandom | md5sum | cut -d' ' -f1) + sed -i "s|const PASSWORD = '[^']*';|const PASSWORD = '${RANDOM_HASH}';|" "$ADMINSERV_CFG" + echo " AdminServ-Konfigurationspasswort automatisch gesichert." + fi + echo " AdminServ-Dateien erfolgreich kopiert." # ============================================================ diff --git a/docs/README.md b/docs/README.md index bb10a03..0a38fa9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,27 +22,36 @@ ``` ├── assets/ │ ├── bin/ # Binaries und Startscript -│ │ ├── AdminServ_v2.1.1.zip # AdminServ Web-UI -│ │ ├── remoteCP_v4.0.3.5.zip # RemoteCP Web-UI -│ │ ├── xaseco_v1.16.zip # XAseco Server-Controller +│ │ ├── AdminServ_v2.1.1.zip # AdminServ Web-UI +│ │ ├── remoteCP_v4.0.3.5.zip # RemoteCP Web-UI │ │ ├── RunTrackmaniaServer.sh # Container-Startscript -│ │ └── TrackmaniaServer_*.zip # Trackmania Server Binary +│ │ ├── TrackmaniaServer_2011-02-21.zip # Trackmania Server Binary +│ │ └── xaseco_v1.16.zip # XAseco Server-Controller │ ├── config/ +│ │ ├── adminserv/ # AdminServ-Konfiguration +│ │ │ ├── get_matchset_mapimport.php # MatchSet Map-Import Script +│ │ │ └── maps-creatematchset.php # MatchSet-Erstellung Script │ │ ├── custom_game_settings.txt # MatchSettings (Spielmodus, Map-Rotation) │ │ ├── dedicated_cfg.txt # Server-Config-Template (mit Platzhaltern) -│ │ └── remotecp/ -│ │ └── plugins/ -│ │ ├── CustomPoints/ -│ │ │ └── index.php # CustomPoints-Plugin fuer RemoteCP -│ │ └── Mods/ -│ │ └── settings.xml # Skin-Bibliothek (techniverse.net) +│ │ ├── remotecp/ +│ │ │ └── plugins/ +│ │ │ ├── CustomPoints/ +│ │ │ │ └── index.php # CustomPoints-Plugin fuer RemoteCP +│ │ │ └── Mods/ +│ │ │ ├── index.php # Mods-Plugin fuer RemoteCP +│ │ │ └── settings.xml # Skin-Bibliothek (techniverse.net) +│ │ └── xaseco/ +│ │ └── teamspeak3.xml # TeamSpeak3-Konfiguration fuer XAseco │ └── db/ │ └── init-xaseco-db.sh # MariaDB Init-Script fuer XAseco-DB ├── docs/ # Dokumentation ├── docker-compose.yml # Docker Compose Konfiguration ├── Dockerfile # Docker Build-Definition +├── .dockerignore # Docker-Ignore-Regeln ├── .env.example # Vorlage fuer Umgebungsvariablen ├── .env # Lokale Umgebungsvariablen (nicht im Git!) +├── .gitattributes # Git-Attribut-Konfiguration +├── .gitignore # Git-Ignore-Regeln ├── LICENSE # Lizenz ├── README.md # Projektbeschreibung └── data/ # Persistente Daten (zur Laufzeit) diff --git a/docs/adminserv.md b/docs/adminserv.md index ed5a726..364ab89 100644 --- a/docs/adminserv.md +++ b/docs/adminserv.md @@ -4,17 +4,19 @@ Die Server-Verwaltungsoberfläche basiert auf [AdminServ](https://github.com/Chr ## Einrichtung -1. `http://` im Browser aufrufen -2. Ein Passwort festlegen – dieses wird als AdminServ-Passwort verwendet -3. TM-Server-Informationen eintragen (Standardwerte können beibehalten werden) -4. `Address` auf `localhost` setzen, um den eingebetteten Server zu verwalten -5. Speichern +AdminServ wird beim ersten Container-Start **vollständig automatisch konfiguriert**: + +- Serververbindung (Adresse `127.0.0.1`, XML-RPC-Port) +- Server-Eintrag (Name, DisplayServ-Passwort) +- Konfigurationspasswort (siehe [Konfigurationsseite (`/config`)](#konfigurationsseite-config)) + +Es ist kein manuelles Setup nötig. ## Verbindung zum Server -1. Über den Button „Servers" zur Serverliste navigieren -2. Den gewünschten Server auswählen -3. Admin-Stufe wählen und zugehöriges Passwort eingeben +1. `http://` im Browser aufrufen +2. Den Server aus der Liste auswählen +3. Admin-Stufe wählen (SuperAdmin, Admin oder User) und das zugehörige Passwort eingeben ## Standard-Passwörter @@ -24,9 +26,11 @@ Die Server-Verwaltungsoberfläche basiert auf [AdminServ](https://github.com/Chr | Admin | `Admin` | | User | `User` | +Diese Passwörter werden über die `.env`-Datei gesetzt (`SERVER_SA_PASSWORD`, `SERVER_ADM_PASSWORD`, `SERVER_USER_PASSWORD`) und beim ersten Start in die `dedicated_cfg.txt` geschrieben. AdminServ liest die Passwörter über die XML-RPC-Verbindung direkt vom TM-Server. + Die Admin-Stufen können unter `http:///config` geändert werden. -> **Hinweis:** Es wird empfohlen, die Standard-Passwörter über die `.env`-Datei (`SERVER_SA_PASSWORD`, `SERVER_ADM_PASSWORD`) zu ändern. Siehe [Umgebungsvariablen](umgebungsvariablen.md). +> **Hinweis:** Die Standard-Passwörter in der `.env.example` sind öffentlich einsehbar. Ändere sie unbedingt, bevor du den Server produktiv einsetzt. Siehe [Umgebungsvariablen](umgebungsvariablen.md). ## Persistente Speicherung @@ -67,6 +71,16 @@ rm -rf ./data/controlpanel/* docker compose up -d ``` +## Konfigurationsseite (`/config`) + +AdminServ bringt unter `http:///config` eine eigene Konfigurationsseite mit, über die Server-Einträge hinzugefügt, geändert oder gelöscht werden können. Diese Seite ist durch ein separates Passwort geschützt (`OnlineConfig::PASSWORD` in `adminserv.cfg.php`, MD5-gehasht). + +Da dieser Container als **Standalone-Setup** läuft und ausschließlich den einen lokalen TrackMania-Server bedient, wird die `/config`-Seite **nicht benötigt** – der Server-Eintrag wird beim ersten Start automatisch angelegt (Adresse, XML-RPC-Port, Passwörter). + +Zur Absicherung wird das Konfigurationspasswort beim ersten Container-Start automatisch durch einen **zufällig generierten MD5-Hash** ersetzt. Damit ist die `/config`-Seite vor unbefugtem Zugriff geschützt, ohne dass ein Benutzer ein Passwort vergeben oder sich merken muss. + +> **Hinweis:** Falls du dennoch Zugriff auf die `/config`-Seite benötigst (z.B. für Debugging), kannst du den MD5-Hash in `data/controlpanel/config/adminserv.cfg.php` manuell auf ein bekanntes Passwort setzen. Beispiel: `const PASSWORD = '5f4dcc3b5aa765d61d8327deb882cf99';` entspricht dem Passwort `password`. + ## Gepatchte AdminServ-Bugs (TmForever) AdminServ (v2.1.1) enthält zwei Bugs, die speziell im Zusammenspiel mit TmForever auftreten. Diese werden beim Container-Start automatisch gepatcht – auch bei bestehenden Volumes. diff --git a/docs/konfiguration.md b/docs/konfiguration.md index 26dd20a..72e0d49 100644 --- a/docs/konfiguration.md +++ b/docs/konfiguration.md @@ -18,6 +18,7 @@ Das gesamte **GameData-Verzeichnis** wird über ein Bind-Mount (`./data/gamedata |-----------|----------------|-------------| | `./data/gamedata` | `/opt/tmserver/GameData` | Gesamtes GameData-Verzeichnis | | `./data/controlpanel` | `/var/www/html` | AdminServ- und RemoteCP-Daten | +| `./data/xaseco` | `/opt/tmserver/xaseco` | XAseco-Konfiguration und Logs | | `./data/mariadb` | `/var/lib/mysql` | MariaDB-Datenbankdateien | ### Enthaltene Unterordner diff --git a/docs/schnellstart.md b/docs/schnellstart.md index 97d7a18..496b813 100644 --- a/docs/schnellstart.md +++ b/docs/schnellstart.md @@ -43,10 +43,10 @@ Die Konfiguration erfolgt über die `.env`-Datei, die automatisch eingelesen wir Alternativ kannst du das Image auch selbst bauen: ```bash -docker build -t tmserver:latest -t tmserver:1.1.1 . +docker build -t tmserver:latest -t tmserver:1.2.1 . ``` -Damit wird das Image mit zwei Tags erstellt: `tmserver:latest` und `tmserver:1.1.1`. +Damit wird das Image mit zwei Tags erstellt: `tmserver:latest` und `tmserver:1.2.1`. Anschließend den Server starten: