From 495a5a2663e27fddb8f3795324b357f5f536554b Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 00:09:35 +0100 Subject: [PATCH 01/13] fix: Berechtigungen bei Volume-Kopie korrigiert (cp -a statt cp -r) Closes #5 --- Dockerfile | 6 +++--- assets/bin/RunTrackmaniaServer.sh | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 97bc40f..0738de0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,7 +41,7 @@ RUN mkdir -p /opt/tmserver/GameData/Config/AdminServ/ServerOptions \ && chown -R www-data:www-data /opt/tmserver/GameData/Config/AdminServ # Gesamtes GameData als Default-Template sichern (wird beim ersten Start ins Volume kopiert) -RUN cp -r /opt/tmserver/GameData /opt/tmserver/default-gamedata +RUN cp -a /opt/tmserver/GameData /opt/tmserver/default-gamedata COPY assets/bin/RunTrackmaniaServer.sh /opt/tmserver/ RUN sed -i 's/\r$//' /opt/tmserver/RunTrackmaniaServer.sh \ @@ -71,7 +71,7 @@ RUN unzip /var/www/html/remoteCP_v4.0.3.5.zip -d /var/www/html \ && chown -R www-data:www-data /var/www/html/remotecp/ # AdminServ- und RemoteCP-Dateien als Default-Template sichern (wird beim ersten Start ins Volume kopiert) -RUN cp -r /var/www/html /opt/tmserver/default-controlpanel +RUN cp -a /var/www/html /opt/tmserver/default-controlpanel # XAseco installieren COPY assets/bin/xaseco_v1.16.zip /opt/tmserver/ @@ -108,7 +108,7 @@ RUN sed -i '/plugin\.freezone\.php<\/plugin>/d' /opt/tmserver/xaseco/plu && sed -i 's/plugin\.teamspeak3\.php<\/plugin>//' /opt/tmserver/xaseco/plugins.xml # XAseco als Default-Template sichern (wird beim ersten Start ins Volume kopiert) -RUN cp -r /opt/tmserver/xaseco /opt/tmserver/default-xaseco +RUN cp -a /opt/tmserver/xaseco /opt/tmserver/default-xaseco # PHP-Debug-Konfiguration: wird zur Laufzeit vom Startup-Script gesetzt # (kein Rebuild noetig – nur Container neustarten) diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index fe58113..15578fd 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -38,7 +38,7 @@ DEFAULT_CONTROLPANEL="/opt/tmserver/default-controlpanel" if [ ! -f "$ADMINSERV_DIR/index.php" ]; then echo "==> Erster Start erkannt: Kopiere AdminServ-Dateien ins Volume..." - cp -r "$DEFAULT_CONTROLPANEL"/* "$ADMINSERV_DIR/" + cp -a "$DEFAULT_CONTROLPANEL"/* "$ADMINSERV_DIR/" chmod -R 777 "$ADMINSERV_DIR/logs/" chmod 666 "$ADMINSERV_DIR/config/adminlevel.cfg.php" chmod 666 "$ADMINSERV_DIR/config/servers.cfg.php" @@ -247,7 +247,7 @@ XASECO_ENABLED="${XASECO_ENABLED:-true}" if [ "$XASECO_ENABLED" = "true" ]; then if [ ! -f "$XASECO_DIR/aseco.php" ]; then echo "==> Erster Start erkannt: Kopiere XAseco-Dateien ins Volume..." - cp -r "$DEFAULT_XASECO"/* "$XASECO_DIR/" + cp -a "$DEFAULT_XASECO"/* "$XASECO_DIR/" XMLRPC_PORT="${SERVER_XMLRPC_PORT:-5000}" XASECO_ADMIN="${XASECO_MASTERADMIN_LOGIN:-}" @@ -375,10 +375,13 @@ FORCE_CONFIG_UPDATE="${FORCE_CONFIG_UPDATE:-false}" if [ ! -f "$CONFIG" ]; then echo "==> Erster Start erkannt: Kopiere Default-GameData ins Volume..." - cp -r "$DEFAULT_GAMEDATA"/* "$GAMEDATA_DIR/" + cp -a "$DEFAULT_GAMEDATA"/* "$GAMEDATA_DIR/" chmod -R 777 "$GAMEDATA_DIR/Config/" mkdir -p "$GAMEDATA_DIR/Config/AdminServ/ServerOptions" chown -R www-data:www-data "$GAMEDATA_DIR/Config/AdminServ" + # Tracks-Verzeichnis fuer AdminServ beschreibbar machen (Maps-Upload/Download) + chown -R www-data:www-data "$GAMEDATA_DIR/Tracks/" + chmod -R 755 "$GAMEDATA_DIR/Tracks/" APPLY_ENV=true elif [ "$FORCE_CONFIG_UPDATE" = "true" ]; then echo "==> FORCE_CONFIG_UPDATE ist aktiv: Umgebungsvariablen werden erneut angewendet..." -- 2.49.1 From e05de1fbe2c1de2b79a800a2ed2ed7cc6e2d55dd Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 00:22:15 +0100 Subject: [PATCH 02/13] =?UTF-8?q?feat:=20SERVER=5FLADDER=5FLIMIT=5FMAX=20a?= =?UTF-8?q?ls=20ENV-Variable=20hinzugef=C3=BCgt=20(Closes=20#3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + assets/bin/RunTrackmaniaServer.sh | 1 + assets/config/dedicated_cfg.txt | 2 +- docs/umgebungsvariablen.md | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 9f0f8a9..f216c68 100644 --- a/.env.example +++ b/.env.example @@ -35,6 +35,7 @@ SERVER_PASSWORD= SERVER_MAX_SPECTATORS=40 SERVER_SPEC_PASSWORD= SERVER_LADDER_MODE=forced +SERVER_LADDER_LIMIT_MAX=60000 # --- Netzwerk --- # Bitte ändere die Ports, wenn sie in deinem Netzwerk bereits verwendet werden. diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index 15578fd..d29fbea 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -420,6 +420,7 @@ if [ "$APPLY_ENV" = "true" ]; then sed -i "s|%%SERVER_MAX_SPECTATORS%%|${SERVER_MAX_SPECTATORS}|g" "$CONFIG" sed -i "s|%%SERVER_SPEC_PASSWORD%%|${SERVER_SPEC_PASSWORD}|g" "$CONFIG" sed -i "s|%%SERVER_LADDER_MODE%%|${SERVER_LADDER_MODE}|g" "$CONFIG" + sed -i "s|%%SERVER_LADDER_LIMIT_MAX%%|${SERVER_LADDER_LIMIT_MAX:-60000}|g" "$CONFIG" # Netzwerk sed -i "s|%%SERVER_PORT%%|${SERVER_PORT}|g" "$CONFIG" diff --git a/assets/config/dedicated_cfg.txt b/assets/config/dedicated_cfg.txt index a56276c..3e6d9cd 100644 --- a/assets/config/dedicated_cfg.txt +++ b/assets/config/dedicated_cfg.txt @@ -35,7 +35,7 @@ %%SERVER_LADDER_MODE%% 0 - 50000 + %%SERVER_LADDER_LIMIT_MAX%% True True diff --git a/docs/umgebungsvariablen.md b/docs/umgebungsvariablen.md index 4844f89..85692e2 100644 --- a/docs/umgebungsvariablen.md +++ b/docs/umgebungsvariablen.md @@ -48,6 +48,7 @@ nano .env | `SERVER_MAX_SPECTATORS` | Maximale Zuschaueranzahl | `32` | | `SERVER_SPEC_PASSWORD` | Zuschauer-Passwort (leer = offen) | *(leer)* | | `SERVER_LADDER_MODE` | Ladder-Modus (`inactive` oder `forced`) | `forced` | +| `SERVER_LADDER_LIMIT_MAX` | Oberes Ladder-Serverlimit (Punktegrenze) | `60000` | ## Netzwerk -- 2.49.1 From ffdc11a02b0ebbc8a890d2e1de14f4d6224f3a21 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 00:29:12 +0100 Subject: [PATCH 03/13] feat: Warmup deaktivieren & als ENV-Variable steuerbar machen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Default von allwarmupduration in custom_game_settings.txt auf 0 gesetzt - Neue Umgebungsvariable ALLWARMUPDURATION (Default: 0) - Startup-Script wendet ENV auf MatchSettings an (inkl. FORCE_CONFIG_UPDATE) - Dokumentation ergänzt (umgebungsvariablen.md) Closes #2 --- Dockerfile | 3 +++ assets/bin/RunTrackmaniaServer.sh | 5 +++++ assets/config/custom_game_settings.txt | 2 +- docs/umgebungsvariablen.md | 6 ++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0738de0..9199d73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -136,6 +136,9 @@ ENV SERVER_DOWNLOAD_RATE=8192 ENV SERVER_MODE=internet ENV FORCE_CONFIG_UPDATE=false +# Spieleinstellungen (MatchSettings) +ENV ALLWARMUPDURATION=0 + # RemoteCP ENV REMOTECP_DB_HOST=mariadb ENV REMOTECP_DB_NAME=remotecp diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index d29fbea..0f4a504 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -357,6 +357,7 @@ echo "Starting apache server" service apache2 start CONFIG="/opt/tmserver/GameData/Config/dedicated_cfg.txt" +GAME_SETTINGS="/opt/tmserver/GameData/Tracks/MatchSettings/custom_game_settings.txt" GAMEDATA_DIR="/opt/tmserver/GameData" DEFAULT_GAMEDATA="/opt/tmserver/default-gamedata" @@ -388,6 +389,7 @@ elif [ "$FORCE_CONFIG_UPDATE" = "true" ]; then echo " ACHTUNG: Manuelle Aenderungen an den betroffenen Feldern werden ueberschrieben!" # Template neu kopieren, damit alle Platzhalter vorhanden sind cp "$DEFAULT_GAMEDATA/Config/dedicated_cfg.txt" "$CONFIG" + cp "$DEFAULT_GAMEDATA/Tracks/MatchSettings/custom_game_settings.txt" "$GAME_SETTINGS" APPLY_ENV=true else echo "==> Vorhandene Konfiguration gefunden. Umgebungsvariablen werden NICHT angewendet." @@ -429,6 +431,9 @@ if [ "$APPLY_ENV" = "true" ]; then sed -i "s|%%SERVER_UPLOAD_RATE%%|${SERVER_UPLOAD_RATE}|g" "$CONFIG" sed -i "s|%%SERVER_DOWNLOAD_RATE%%|${SERVER_DOWNLOAD_RATE}|g" "$CONFIG" + # Spieleinstellungen (MatchSettings) + sed -i "s|[^<]*|${ALLWARMUPDURATION:-0}|" "$GAME_SETTINGS" + echo "Platzhalter erfolgreich ersetzt." fi diff --git a/assets/config/custom_game_settings.txt b/assets/config/custom_game_settings.txt index e5fc67f..ba90084 100644 --- a/assets/config/custom_game_settings.txt +++ b/assets/config/custom_game_settings.txt @@ -4,7 +4,7 @@ 1 10000 1 - 1 + 0 0 0 30 diff --git a/docs/umgebungsvariablen.md b/docs/umgebungsvariablen.md index 85692e2..5af2ea8 100644 --- a/docs/umgebungsvariablen.md +++ b/docs/umgebungsvariablen.md @@ -67,6 +67,12 @@ nano .env | `SERVER_MODE` | Server-Modus (`internet` oder `lan`) | `internet` | | `FORCE_CONFIG_UPDATE` | Erzwingt erneutes Anwenden aller Umgebungsvariablen auf die Config | `false` | +## Spieleinstellungen (MatchSettings) + +| Variable | Beschreibung | Standard | +|----------|-------------|----------| +| `ALLWARMUPDURATION` | Warmup-Dauer für alle Runden (`0` = deaktiviert, `1` = eine Runde Warmup) | `0` | + ## RemoteCP RemoteCP verwendet die SuperAdmin-Zugangsdaten (`SERVER_SA_PASSWORD`) des TM-Servers für den Web-Login. Es werden keine separaten Login-Variablen benötigt. -- 2.49.1 From 5891429c83495b1779f6493e7e552ff3814f85e3 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:09:37 +0100 Subject: [PATCH 04/13] fix: RemoteCP CustomPoints PHP-Warnungen behoben (undefined constants) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bare-constant-Zugriffe (pt_custom, pt_points, ...) in CustomPoints/index.php durch defined()-Prüfungen ersetzt, um PHP 7.2+ Warnungen zu vermeiden. Zusätzlich werden im Produktivmodus (PHP_DISPLAY_ERRORS=false) Warnungen und Notices in der PHP error_reporting unterdrückt. - Gepatchte index.php als assets/config/remotecp/plugins/CustomPoints/index.php - Dockerfile: COPY der gepatchten Datei statt fragiler sed-Patches - RunTrackmaniaServer.sh: Auto-Patch für bestehende Volumes beim Container-Start - error_reporting im Produktivmodus um ~E_WARNING & ~E_NOTICE ergänzt Closes #4 --- Dockerfile | 6 + assets/bin/RunTrackmaniaServer.sh | 18 ++- .../remotecp/plugins/CustomPoints/index.php | 135 ++++++++++++++++++ docs/umgebungsvariablen.md | 4 +- 4 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 assets/config/remotecp/plugins/CustomPoints/index.php diff --git a/Dockerfile b/Dockerfile index 9199d73..055b6b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,6 +70,12 @@ RUN unzip /var/www/html/remoteCP_v4.0.3.5.zip -d /var/www/html \ && chmod -R 777 /var/www/html/remotecp/xml/settings \ && chown -R www-data:www-data /var/www/html/remotecp/ +# Fix PHP-Warnungen in RemoteCP CustomPoints-Plugin (undefined constants) +# RemoteCP nutzt bare constants (pt_custom, pt_points, ...), die in PHP 7.2+ +# Warnungen ausloesen. Das gepatchte Plugin nutzt stattdessen defined()-Pruefungen. +COPY assets/config/remotecp/plugins/CustomPoints/index.php /var/www/html/remotecp/plugins/CustomPoints/index.php +RUN chown www-data:www-data /var/www/html/remotecp/plugins/CustomPoints/index.php + # AdminServ- und RemoteCP-Dateien als Default-Template sichern (wird beim ersten Start ins Volume kopiert) RUN cp -a /var/www/html /opt/tmserver/default-controlpanel diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index 0f4a504..d2ef431 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -18,7 +18,7 @@ else echo "==> PHP-Debug-Modus deaktiviert" cat > "$PHP_INI_DIR/99-adminserv-debug.ini" < Patche CustomPoints-Plugin (PHP-Warnungen beheben)..." + cp "$CUSTOMPOINTS_DEFAULT" "$CUSTOMPOINTS_FILE" + chown www-data:www-data "$CUSTOMPOINTS_FILE" + echo " CustomPoints-Plugin erfolgreich gepatcht." +fi + echo "Starting apache server" service apache2 start diff --git a/assets/config/remotecp/plugins/CustomPoints/index.php b/assets/config/remotecp/plugins/CustomPoints/index.php new file mode 100644 index 0000000..5e43f48 --- /dev/null +++ b/assets/config/remotecp/plugins/CustomPoints/index.php @@ -0,0 +1,135 @@ + 'editgamesettings', + 'setPointsPreset' => 'editgamesettings' + ); + public $presets; + + public function onLoad() + { + $this->presets = Core::getObject('session')->loadXML( + Core::getSetting('pluginpath') . $this->id . '/presets.xml' + ); + } + + public function onOutput() + { + $CustomPoints = array(); + + if (Core::getObject('gbx')->query('GetRoundCustomPoints')) { + $CustomPoints = Core::getObject('gbx')->getResponse(); + } + + if (!is_array($CustomPoints)) { + $CustomPoints = array(); + } + + if (!Core::getObject('session')->checkPerm('editgamesettings')) { + return; + } + + echo "
"; + echo "
"; + + echo "
" . (defined('pt_custom') ? pt_custom : 'Custom Points') . "
"; + + echo "
+ +
+ +
" . (defined('pt_commasep') ? pt_commasep : 'Comma separated') . "
+
"; + echo "
"; + + echo "
"; + + echo ""; + echo ""; + echo ""; + echo "
"; + + echo "
"; + echo "
"; + + echo "
" . (defined('pt_presets') ? pt_presets : 'Presets') . "
"; + + if ($this->presets && is_object($this->presets)) { + foreach ($this->presets->children() as $preset) { + + $name = isset($preset['name']) ? $preset['name'] : 'Preset'; + $points = isset($preset['points']) ? (string)$preset['points'] : ''; + + echo "
+ +
"; + + echo " "; + + if (strlen($points) > 25) { + echo substr($points, 0, 25) . "..."; + } else { + echo $points; + } + + echo "
"; + echo "
"; + } + } + + echo "
"; + + echo ""; + echo ""; + echo ""; + echo "
"; + } + + public function setPoints() + { + if (!array_key_exists('points', $_REQUEST)) return; + + $str = preg_replace("/[^0-9,]/", "", $_REQUEST['points']); + $array = $this->makeIntArray(explode(',', $str)); + + Core::getObject('actions')->add('SetRoundCustomPoints', $array, true); + } + + public function setPointsPreset() + { + if (!array_key_exists('preset', $_REQUEST)) return; + + $str = preg_replace("/[^0-9,]/", "", $_REQUEST['preset']); + $array = $this->makeIntArray(explode(',', $str)); + + Core::getObject('actions')->add('SetRoundCustomPoints', $array, true); + } + + private function makeIntArray($array) + { + foreach ($array as $key => $value) { + $array[$key] = (int)$value; + } + return $array; + } +} diff --git a/docs/umgebungsvariablen.md b/docs/umgebungsvariablen.md index 5af2ea8..71093d6 100644 --- a/docs/umgebungsvariablen.md +++ b/docs/umgebungsvariablen.md @@ -116,9 +116,11 @@ XAseco ist ein Server-Controller für Rekorde, Karma, Jukebox und mehr. Siehe [X | Variable | Beschreibung | Standard | |----------|-------------|----------| -| `PHP_DISPLAY_ERRORS` | Zeigt PHP-Fehlermeldungen im Browser an (nur zur Fehlersuche!) | `false` | +| `PHP_DISPLAY_ERRORS` | Aktiviert den PHP-Debug-Modus: Fehlermeldungen im Browser + vollständige Warnungen im Log (nur zur Fehlersuche!) | `false` | > **Hinweis:** Der Debug-Modus erfordert **keinen** Rebuild des Images. Es genügt, die Variable in der `.env`-Datei zu ändern und den Container neu zu starten (`docker compose restart`). Im Produktivbetrieb sollte `PHP_DISPLAY_ERRORS` immer auf `false` stehen. +> +> Bei `false` werden nur schwerwiegende Fehler geloggt (keine Warnungen/Notices). Bei `true` werden zusätzlich alle Warnungen und Hinweise angezeigt und geloggt – nützlich zur Fehlersuche bei Problemen mit RemoteCP oder AdminServ. > **Hinweis:** Bei `FORCE_CONFIG_UPDATE=true` wird die `dedicated_cfg.txt` aus dem Template neu erzeugt und alle Platzhalter mit den aktuellen Umgebungsvariablen ersetzt. Manuelle Änderungen gehen dabei verloren! Nach dem Update sollte `FORCE_CONFIG_UPDATE` wieder auf `false` gesetzt werden. -- 2.49.1 From 76e739f12a965141725a4fe1f969a31bd7b023c7 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:15:37 +0100 Subject: [PATCH 05/13] refactor(license): Redundante Namensnennung in Lizenzbedingungen entfernt --- LICENSE | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/LICENSE b/LICENSE index 39d8b65..90c510b 100644 --- a/LICENSE +++ b/LICENSE @@ -23,11 +23,9 @@ unterzulizenzieren und/oder Kopien der Software zu verkaufen, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten: -Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen -Kopien oder wesentlichen Teilen der Software enthalten sein. Bei jeglicher -Weiterverarbeitung, Veröffentlichung oder Verbreitung der Software müssen der -Name „Patrick Asmus" und die E-Mail-Adresse „support@techniverse.net" des -Urhebers genannt werden. +Der obige Urheberrechtshinweis einschließlich der Angaben zum Lizenzinhaber +sowie dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen +Teilen der Software enthalten sein. DIE SOFTWARE WIRD „WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH, -- 2.49.1 From b672f84f5547916b19556e09d4c1884d91b93bcc Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:21:07 +0100 Subject: [PATCH 06/13] =?UTF-8?q?fix:=20RemoteCP-Benutzerregistrierung=20s?= =?UTF-8?q?tandardm=C3=A4=C3=9Fig=20deaktivieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/bin/RunTrackmaniaServer.sh | 10 ++++++++++ docs/remotecp.md | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index d2ef431..a1fc25e 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -185,6 +185,16 @@ EORCPSERV EORCPADM + # settings.xml: Registrierung deaktivieren (SuperAdmin wird automatisch angelegt) + mkdir -p "$REMOTECP_DIR/xml/settings" + cat > "$REMOTECP_DIR/xml/settings/settings.xml" < + + false + +EORCPSET + echo " settings.xml: Registrierung deaktiviert." + # ============================================================ # RemoteCP: Datenbank-Initialisierung # ============================================================ diff --git a/docs/remotecp.md b/docs/remotecp.md index 43aa08d..b8412fc 100644 --- a/docs/remotecp.md +++ b/docs/remotecp.md @@ -112,4 +112,4 @@ Falls RemoteCP nicht erreichbar ist oder Fehler anzeigt: - RemoteCP ist ein älteres Tool (Version 4.0.3.5) und wurde für PHP 5.x entwickelt, läuft aber mit PHP 7.4 - Die Live-Funktionen (`remoteCP[Live]`) benötigen eine laufende Serververbindung -- Die Registrierung neuer Benutzer ist standardmäßig aktiviert und kann in `xml/settings/settings.xml` über `false` deaktiviert werden +- Die Registrierung neuer Benutzer wird beim ersten Start automatisch deaktiviert (`xml/settings/settings.xml` → `false`). Der SuperAdmin-Account wird automatisch aus `SERVER_SA_PASSWORD` angelegt -- 2.49.1 From 35e485b0655b02489de7d20ff51b8c7d57ccfe8a Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:24:09 +0100 Subject: [PATCH 07/13] =?UTF-8?q?docs:=20Danksagung=20an=20Thomas=20(retro?= =?UTF-8?q?nerd.at)=20in=20README=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 49c249a..01d829b 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,10 @@ Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md - [XAseco](docs/xaseco.md) – Server-Controller für Rekorde, Karma und Jukebox - [Ports](docs/ports.md) – Freigegebene Ports und deren Verwendung +## 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. + --- 📝 **Blog:** [www.cleveradmin.de](https://www.cleveradmin.de) -- 2.49.1 From c081e43375552bbaa136ac1fef7d1475d2687964 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:29:10 +0100 Subject: [PATCH 08/13] =?UTF-8?q?fix(mariadb):=20XAseco-DB-Variablen=20exp?= =?UTF-8?q?lizit=20im=20Compose=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 29e4e1d..2c5cd66 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,9 +32,14 @@ services: - .env environment: MYSQL_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD} + # RemoteCP-Datenbank (via MariaDB-Init) MYSQL_DATABASE: ${REMOTECP_DB_NAME:-remotecp} MYSQL_USER: ${REMOTECP_DB_USER:-remotecp} MYSQL_PASSWORD: ${REMOTECP_DB_PASSWORD} + # XAseco-Datenbank (via Init-Script init-xaseco-db.sh) + XASECO_DB_NAME: ${XASECO_DB_NAME:-xaseco} + XASECO_DB_USER: ${XASECO_DB_USER:-xaseco} + XASECO_DB_PASSWORD: ${XASECO_DB_PASSWORD} volumes: - ./data/mariadb:/var/lib/mysql - ./assets/db/init-xaseco-db.sh:/docker-entrypoint-initdb.d/20-init-xaseco-db.sh:ro -- 2.49.1 From 69940ee56b99a7a70a3f5533778f6773162b08b2 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:32:18 +0100 Subject: [PATCH 09/13] =?UTF-8?q?Kurzbeschreibung=20des=20Projekts=20zur?= =?UTF-8?q?=20README=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 01d829b..3ddc897 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,15 @@ Trackmania Nations Forever Docker Server +Ein vollständiges Docker-Setup für einen **TrackMania Nations Forever**-Server – inklusive Web-Verwaltung und Server-Controller: + +- **TrackMania Dedicated Server** – der eigentliche Spielserver für Internet- oder LAN-Betrieb +- **[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 + +Alle Komponenten laufen in einem einzigen Container und werden über Umgebungsvariablen konfiguriert. + > **Hinweis:** Dieses Projekt ist ein Fork von [lduriez/tmserver-docker](https://github.com/lduriez/tmserver-docker?tab=readme-ov-file). Der Server unterstützt sowohl den **Internet-Dedicated-Modus** (Standard) als auch den **LAN-Dedicated-Modus**. -- 2.49.1 From 7482071f2c2415c0094c1d4c67637a291789d083 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:36:56 +0100 Subject: [PATCH 10/13] =?UTF-8?q?README:=20Hinweis=20auf=20Repository-Spie?= =?UTF-8?q?gelung=20von=20Gitea=20nach=20GitHub=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3ddc897..21a2fc4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # tmserver-docker -Trackmania Nations Forever Docker Server - Ein vollständiges Docker-Setup für einen **TrackMania Nations Forever**-Server – inklusive Web-Verwaltung und Server-Controller: - **TrackMania Dedicated Server** – der eigentliche Spielserver für Internet- oder LAN-Betrieb @@ -84,6 +82,13 @@ Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md 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. +## Spiegelung + +Dieses Repository wird von **Gitea** auf **GitHub** gespiegelt. Das Master-Repository befindet sich auf Gitea: + +- **Gitea (Master):** [git.techniverse.net/scriptos/tmserver-docker](https://git.techniverse.net/scriptos/tmserver-docker.git) +- **GitHub (Spiegel):** [github.com/pscriptos/tmserver-docker](https://github.com/pscriptos/tmserver-docker.git) + --- 📝 **Blog:** [www.cleveradmin.de](https://www.cleveradmin.de) -- 2.49.1 From 3354ebd541cbc5103378fd69b267890435da7ef2 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:44:09 +0100 Subject: [PATCH 11/13] docs: Fertiges Docker Image aus Container-Registry bewerben --- README.md | 12 +++++++++++- docs/konfiguration.md | 2 +- docs/ports.md | 2 +- docs/schnellstart.md | 36 +++++++++++++++++++++++++++--------- docs/server-modi.md | 2 +- docs/umgebungsvariablen.md | 8 +++++--- 6 files changed, 46 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 21a2fc4..f179989 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,20 @@ Passe die Werte in der `.env`-Datei an deine Umgebung an (Passwörter, Masterser ### 2. Server starten +Das fertige Docker Image kann direkt verwendet werden – kein eigener Build nötig: + ```bash -docker compose up -d --build +docker compose up -d ``` +Das Image wird automatisch aus der Container-Registry geladen: + +``` +git.techniverse.net/scriptos/trackmania-server:latest +``` + +> **Tipp:** Alle verfügbaren Tags findest du in der [Container-Registry](https://git.techniverse.net/scriptos/-/packages/container/trackmania-server/). Wenn du das Image lieber selbst bauen möchtest, findest du die Anleitung unter [Schnellstart – Selbst bauen](docs/schnellstart.md#docker-image-selbst-bauen). + ### 3. Verwaltungsoberflächen öffnen - **AdminServ:** `http:///` diff --git a/docs/konfiguration.md b/docs/konfiguration.md index 13ae80b..0781602 100644 --- a/docs/konfiguration.md +++ b/docs/konfiguration.md @@ -88,7 +88,7 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` > **Achtung:** Bei `FORCE_CONFIG_UPDATE=true` wird die `dedicated_cfg.txt` komplett aus dem Template neu erzeugt und alle Platzhalter mit den aktuellen Umgebungsvariablen ersetzt. **Manuelle Änderungen an der Config gehen dabei verloren!** Andere Dateien im GameData-Volume (Tracks, Skins, Scores, etc.) bleiben erhalten. Nach dem Update sollte `FORCE_CONFIG_UPDATE` wieder auf `false` gesetzt werden. diff --git a/docs/ports.md b/docs/ports.md index d9e334b..d301658 100644 --- a/docs/ports.md +++ b/docs/ports.md @@ -20,7 +20,7 @@ docker run -d \ -p 3450:3450/tcp \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` > **Hinweis:** Port 5000 (XML-RPC) wird intern von AdminServ verwendet und muss in der Regel nicht nach außen freigegeben werden. diff --git a/docs/schnellstart.md b/docs/schnellstart.md index dfbfdcd..d7bf828 100644 --- a/docs/schnellstart.md +++ b/docs/schnellstart.md @@ -18,7 +18,29 @@ Bearbeite die `.env`-Datei und setze mindestens die gewünschten Passwörter. F > **Wichtig:** Die `.env`-Datei enthält sensible Daten (Passwörter, Keys) und wird über die `.gitignore` vom Einchecken ausgeschlossen. -## 2. Docker Image bauen +## 2. Server starten + +### Fertiges Docker Image verwenden (empfohlen) + +Es steht ein fertiges Docker Image in der Container-Registry bereit – kein eigener Build nötig: + +``` +git.techniverse.net/scriptos/trackmania-server:latest +``` + +> **Tipp:** Alle verfügbaren Tags findest du in der [Container-Registry](https://git.techniverse.net/scriptos/-/packages/container/trackmania-server/). + +#### Mit Docker Compose + +```bash +docker compose up -d +``` + +Die Konfiguration erfolgt über die `.env`-Datei, die automatisch eingelesen wird. Das Image wird automatisch aus der Registry geladen. + +### Docker Image selbst bauen + +Alternativ kannst du das Image auch selbst bauen: ```bash docker build -t tmserver:latest -t tmserver:1.0.0 . @@ -26,16 +48,12 @@ docker build -t tmserver:latest -t tmserver:1.0.0 . Damit wird das Image mit zwei Tags erstellt: `tmserver:latest` und `tmserver:1.0.0`. -## 3. Server starten - -### Mit Docker Compose (empfohlen) +Anschließend den Server starten: ```bash docker compose up -d --build ``` -Die Konfiguration erfolgt über die `.env`-Datei, die automatisch eingelesen wird. - ### Internet-Modus (docker run) Für den Internet-Modus wird ein Server-Account benötigt. Dieser kann auf der [Trackmania Players-Seite](https://players.trackmaniaforever.com) erstellt werden. @@ -50,7 +68,7 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` ### LAN-Modus (docker run) @@ -68,10 +86,10 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` -## 4. Verwaltungsoberflächen öffnen +## 3. Verwaltungsoberflächen öffnen | Tool | URL | Beschreibung | |------|-----|-------------| diff --git a/docs/server-modi.md b/docs/server-modi.md index 424795a..74f0615 100644 --- a/docs/server-modi.md +++ b/docs/server-modi.md @@ -56,5 +56,5 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` diff --git a/docs/umgebungsvariablen.md b/docs/umgebungsvariablen.md index 71093d6..705139c 100644 --- a/docs/umgebungsvariablen.md +++ b/docs/umgebungsvariablen.md @@ -131,9 +131,11 @@ XAseco ist ein Server-Controller für Rekorde, Karma, Jukebox und mehr. Siehe [X Passe die Werte in der `.env`-Datei an und starte mit: ```bash -docker compose up -d --build +docker compose up -d ``` +> **Tipp:** Das fertige Docker Image wird automatisch aus der [Container-Registry](https://git.techniverse.net/scriptos/-/packages/container/trackmania-server/) geladen. Wenn du das Image selbst bauen möchtest, verwende stattdessen `docker compose up -d --build`. + ### docker run ```bash @@ -146,7 +148,7 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` Einzelne Werte können zusätzlich überschrieben werden: @@ -163,5 +165,5 @@ docker run -d \ -v ./data/gamedata:/opt/tmserver/GameData \ -v ./data/controlpanel:/var/www/html \ -v ./data/xaseco:/opt/tmserver/xaseco \ - --name tmserver tmserver:latest + --name tmserver git.techniverse.net/scriptos/trackmania-server:latest ``` -- 2.49.1 From 503fadf1d61b9907b26d4a18d08f4c6ad35d900b Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:47:47 +0100 Subject: [PATCH 12/13] docs: Projektstruktur aktualisiert und in Doku-Uebersicht verschoben --- README.md | 27 --------------------------- docs/README.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index f179989..4ccf5d9 100644 --- a/README.md +++ b/README.md @@ -48,33 +48,6 @@ git.techniverse.net/scriptos/trackmania-server:latest > **Hinweis:** Für den Internet-Modus müssen `SERVER_LOGIN` und `SERVER_VALIDATION_KEY` in der `.env`-Datei gesetzt sein. Einen Server-Account kannst du auf [players.trackmaniaforever.com](https://players.trackmaniaforever.com) erstellen. Für den LAN-Modus setze `SERVER_MODE=lan`. -## Projektstruktur - -``` -├── 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 -│ │ ├── RunTrackmaniaServer.sh # Container-Startscript -│ │ └── TrackmaniaServer_*.zip # Trackmania Server Binary -│ ├── config/ -│ ├── custom_game_settings.txt # MatchSettings (Spielmodus, Map-Rotation) -│ └── dedicated_cfg.txt # Server-Config-Template (mit Platzhaltern) -│ └── db/ -│ └── init-xaseco-db.sh # MariaDB Init-Script fuer XAseco-DB -├── docs/ # Dokumentation -├── docker-compose.yml # Docker Compose Konfiguration -├── Dockerfile # Docker Build-Definition -├── .env.example # Vorlage fuer Umgebungsvariablen -├── .env # Lokale Umgebungsvariablen (nicht im Git!) -└── data/ # Persistente Daten (zur Laufzeit) - ├── gamedata/ # TM-Server-Daten - ├── controlpanel/ # AdminServ + RemoteCP - ├── xaseco/ # XAseco-Konfiguration und Logs - └── mariadb/ # MariaDB-Datenbankdateien -``` - ## Dokumentation Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md): diff --git a/docs/README.md b/docs/README.md index 7ba5be7..7e000d5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,3 +16,36 @@ | [RemoteCP](remotecp.md) | Alternative Server-Verwaltungsoberfläche | | [XAseco](xaseco.md) | Server-Controller für Rekorde, Karma und Jukebox | | [Ports](ports.md) | Freigegebene Ports und deren Verwendung | + +## Projektstruktur + +``` +├── 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 +│ │ ├── RunTrackmaniaServer.sh # Container-Startscript +│ │ └── TrackmaniaServer_*.zip # Trackmania Server Binary +│ ├── config/ +│ │ ├── 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 +│ └── db/ +│ └── init-xaseco-db.sh # MariaDB Init-Script fuer XAseco-DB +├── docs/ # Dokumentation +├── docker-compose.yml # Docker Compose Konfiguration +├── Dockerfile # Docker Build-Definition +├── .env.example # Vorlage fuer Umgebungsvariablen +├── .env # Lokale Umgebungsvariablen (nicht im Git!) +├── LICENSE # Lizenz +├── README.md # Projektbeschreibung +└── data/ # Persistente Daten (zur Laufzeit) + ├── gamedata/ # TM-Server-Daten + ├── controlpanel/ # AdminServ + RemoteCP + ├── xaseco/ # XAseco-Konfiguration und Logs + └── mariadb/ # MariaDB-Datenbankdateien +``` -- 2.49.1 From 9b37dfd2bccfba3626a8010f6faeb09ca3e2bc25 Mon Sep 17 00:00:00 2001 From: "Patrick Asmus (scriptos)" Date: Sun, 22 Mar 2026 01:55:16 +0100 Subject: [PATCH 13/13] Release: Docker Image Version 1.1.0 gepusht --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2c5cd66..f707c9f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: tmserver: - image: git.techniverse.net/scriptos/trackmania-server:1.0.0 + image: git.techniverse.net/scriptos/trackmania-server:1.1.0 build: context: . container_name: tmserver -- 2.49.1