release-1.2.2 #13

Merged
scriptos merged 4 commits from release-1.2.2 into master 2026-03-23 08:51:07 +00:00
7 changed files with 62 additions and 24 deletions
Showing only changes of commit f7d3a9ce83 - Show all commits

View File

@@ -69,12 +69,15 @@ FORCE_MOD_SPEED=
FORCE_MOD_ALPINE= FORCE_MOD_ALPINE=
FORCE_MOD_RALLY= FORCE_MOD_RALLY=
# --- MatchSettings --- # --- Spieleinstellungen (MatchSettings) ---
# Steuert, welche MatchSettings-Datei beim Serverstart geladen wird. # Steuert, welche MatchSettings-Datei beim Serverstart geladen wird.
# "auto" = die neueste .txt-Datei in data/gamedata/Tracks/MatchSettings/ wird automatisch erkannt. # "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"). # Alternativ kann ein expliziter Dateiname angegeben werden (z.B. "turnier_settings.txt").
MATCHSETTINGS_FILE=auto MATCHSETTINGS_FILE=auto
# Warmup-Dauer für alle Runden (0 = deaktiviert, 1 = eine Runde Warmup)
ALLWARMUPDURATION=0
# --- Debugging --- # --- 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. # 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 PHP_DISPLAY_ERRORS=false

View File

@@ -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 - **[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 - **[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 - **[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. 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 ## 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 ## Spiegelung

View File

@@ -71,6 +71,18 @@ EOPHP
chown www-data:www-data "$ADMINSERV_DIR/config/servers.cfg.php" chown www-data:www-data "$ADMINSERV_DIR/config/servers.cfg.php"
echo " AdminServ-Server-Eintrag automatisch konfiguriert (Port: ${XMLRPC_PORT})." 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." echo " AdminServ-Dateien erfolgreich kopiert."
# ============================================================ # ============================================================

View File

@@ -22,27 +22,36 @@
``` ```
├── assets/ ├── assets/
│ ├── bin/ # Binaries und Startscript │ ├── bin/ # Binaries und Startscript
│ │ ├── AdminServ_v2.1.1.zip # AdminServ Web-UI │ │ ├── AdminServ_v2.1.1.zip # AdminServ Web-UI
│ │ ├── remoteCP_v4.0.3.5.zip # RemoteCP Web-UI │ │ ├── remoteCP_v4.0.3.5.zip # RemoteCP Web-UI
│ │ ├── xaseco_v1.16.zip # XAseco Server-Controller
│ │ ├── RunTrackmaniaServer.sh # Container-Startscript │ │ ├── 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/ │ ├── 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) │ │ ├── custom_game_settings.txt # MatchSettings (Spielmodus, Map-Rotation)
│ │ ├── dedicated_cfg.txt # Server-Config-Template (mit Platzhaltern) │ │ ├── dedicated_cfg.txt # Server-Config-Template (mit Platzhaltern)
│ │ ── remotecp/ │ │ ── remotecp/
│ │ └── plugins/ │ │ └── plugins/
│ │ ├── CustomPoints/ │ │ ├── CustomPoints/
│ │ │ └── index.php # CustomPoints-Plugin fuer RemoteCP │ │ │ └── index.php # CustomPoints-Plugin fuer RemoteCP
│ │ └── Mods/ │ │ └── Mods/
│ │ ── settings.xml # Skin-Bibliothek (techniverse.net) │ │ ── index.php # Mods-Plugin fuer RemoteCP
│ │ │ └── settings.xml # Skin-Bibliothek (techniverse.net)
│ │ └── xaseco/
│ │ └── teamspeak3.xml # TeamSpeak3-Konfiguration fuer XAseco
│ └── db/ │ └── db/
│ └── init-xaseco-db.sh # MariaDB Init-Script fuer XAseco-DB │ └── init-xaseco-db.sh # MariaDB Init-Script fuer XAseco-DB
├── docs/ # Dokumentation ├── docs/ # Dokumentation
├── docker-compose.yml # Docker Compose Konfiguration ├── docker-compose.yml # Docker Compose Konfiguration
├── Dockerfile # Docker Build-Definition ├── Dockerfile # Docker Build-Definition
├── .dockerignore # Docker-Ignore-Regeln
├── .env.example # Vorlage fuer Umgebungsvariablen ├── .env.example # Vorlage fuer Umgebungsvariablen
├── .env # Lokale Umgebungsvariablen (nicht im Git!) ├── .env # Lokale Umgebungsvariablen (nicht im Git!)
├── .gitattributes # Git-Attribut-Konfiguration
├── .gitignore # Git-Ignore-Regeln
├── LICENSE # Lizenz ├── LICENSE # Lizenz
├── README.md # Projektbeschreibung ├── README.md # Projektbeschreibung
└── data/ # Persistente Daten (zur Laufzeit) └── data/ # Persistente Daten (zur Laufzeit)

View File

@@ -4,17 +4,19 @@ Die Server-Verwaltungsoberfläche basiert auf [AdminServ](https://github.com/Chr
## Einrichtung ## Einrichtung
1. `http://<host-server-des-containers>` im Browser aufrufen AdminServ wird beim ersten Container-Start **vollständig automatisch konfiguriert**:
2. Ein Passwort festlegen dieses wird als AdminServ-Passwort verwendet
3. TM-Server-Informationen eintragen (Standardwerte können beibehalten werden) - Serververbindung (Adresse `127.0.0.1`, XML-RPC-Port)
4. `Address` auf `localhost` setzen, um den eingebetteten Server zu verwalten - Server-Eintrag (Name, DisplayServ-Passwort)
5. Speichern - Konfigurationspasswort (siehe [Konfigurationsseite (`/config`)](#konfigurationsseite-config))
Es ist kein manuelles Setup nötig.
## Verbindung zum Server ## Verbindung zum Server
1. Über den Button „Servers" zur Serverliste navigieren 1. `http://<host-server-des-containers>` im Browser aufrufen
2. Den gewünschten Server auswählen 2. Den Server aus der Liste auswählen
3. Admin-Stufe wählen und zugehöriges Passwort eingeben 3. Admin-Stufe wählen (SuperAdmin, Admin oder User) und das zugehörige Passwort eingeben
## Standard-Passwörter ## Standard-Passwörter
@@ -24,9 +26,11 @@ Die Server-Verwaltungsoberfläche basiert auf [AdminServ](https://github.com/Chr
| Admin | `Admin` | | Admin | `Admin` |
| User | `User` | | 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://<host-server-des-containers>/config` geändert werden. Die Admin-Stufen können unter `http://<host-server-des-containers>/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 ## Persistente Speicherung
@@ -67,6 +71,16 @@ rm -rf ./data/controlpanel/*
docker compose up -d docker compose up -d
``` ```
## Konfigurationsseite (`/config`)
AdminServ bringt unter `http://<host-ip>/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) ## 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. 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.

View File

@@ -18,6 +18,7 @@ Das gesamte **GameData-Verzeichnis** wird über ein Bind-Mount (`./data/gamedata
|-----------|----------------|-------------| |-----------|----------------|-------------|
| `./data/gamedata` | `/opt/tmserver/GameData` | Gesamtes GameData-Verzeichnis | | `./data/gamedata` | `/opt/tmserver/GameData` | Gesamtes GameData-Verzeichnis |
| `./data/controlpanel` | `/var/www/html` | AdminServ- und RemoteCP-Daten | | `./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 | | `./data/mariadb` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
### Enthaltene Unterordner ### Enthaltene Unterordner

View File

@@ -43,10 +43,10 @@ Die Konfiguration erfolgt über die `.env`-Datei, die automatisch eingelesen wir
Alternativ kannst du das Image auch selbst bauen: Alternativ kannst du das Image auch selbst bauen:
```bash ```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: Anschließend den Server starten: