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/Dockerfile b/Dockerfile index 97bc40f..055b6b6 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 \ @@ -70,8 +70,14 @@ 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 -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 +114,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) @@ -136,6 +142,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/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, diff --git a/README.md b/README.md index 49c249a..4ccf5d9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # 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 +- **[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). @@ -20,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:///` @@ -31,33 +48,6 @@ docker compose up -d --build > **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): @@ -71,6 +61,17 @@ 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. + +## 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) diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index fe58113..a1fc25e 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" < 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" @@ -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 # ============================================================ @@ -247,7 +257,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:-}" @@ -353,10 +363,27 @@ if [ "$XASECO_ENABLED" = "true" ]; then fi fi +# ============================================================ +# RemoteCP: PHP-Warnungen in Plugins fixen (fuer bestehende Volumes) +# ============================================================ +# RemoteCP nutzt bare constants (pt_custom, pt_points, ...), die in +# PHP 7.2+ Warnungen ausloesen. Die gepatchte Datei aus dem Image +# wird in das Volume kopiert, falls die alte Version noch vorhanden ist. +# ============================================================ +CUSTOMPOINTS_FILE="/var/www/html/remotecp/plugins/CustomPoints/index.php" +CUSTOMPOINTS_DEFAULT="/opt/tmserver/default-controlpanel/remotecp/plugins/CustomPoints/index.php" +if [ -f "$CUSTOMPOINTS_FILE" ] && ! grep -q 'defined.*pt_custom' "$CUSTOMPOINTS_FILE"; then + echo "==> 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 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" @@ -375,16 +402,20 @@ 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..." 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." @@ -417,6 +448,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" @@ -425,6 +457,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/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/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/docker-compose.yml b/docker-compose.yml index 29e4e1d..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 @@ -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 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 +``` 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/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 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 4844f89..705139c 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 @@ -66,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. @@ -109,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. @@ -122,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 @@ -137,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: @@ -154,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 ```