xaseco implementiert + Doku erweitert + Lizenz erweitert.

This commit is contained in:
scriptos
2026-03-20 23:11:15 +01:00
parent 5d626a7c9d
commit bef71bd924
16 changed files with 521 additions and 44 deletions
+3
View File
@@ -4,6 +4,8 @@
> **Wichtig:** Vor dem ersten Start muss eine `.env`-Datei aus der Vorlage erstellt werden: `cp .env.example .env`
> **⚠ Sicherheitshinweis:** Die `.env.example` enthält **vorgenerierte Beispiel-Passwörter**. Diese dienen nur als Platzhalter und sind öffentlich einsehbar! **Ändere unbedingt alle Passwörter** in der `.env`-Datei, bevor du den Server produktiv einsetzt.
| Dokument | Beschreibung |
|----------|-------------|
| [Schnellstart](schnellstart.md) | Erste Schritte und minimale Konfiguration |
@@ -12,4 +14,5 @@
| [Server-Modi](server-modi.md) | LAN- und Internet-Dedicated-Modus |
| [AdminServ](adminserv.md) | Einrichtung der Server-Verwaltungsoberfläche |
| [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 |
+9 -7
View File
@@ -6,7 +6,7 @@ Die Template-Konfiguration befindet sich im Repository unter `assets/config/dedi
## Persistente Speicherung
Das gesamte **GameData-Verzeichnis** wird über ein Bind-Mount (`./data/GameData`) persistent auf dem Host gespeichert. Das bedeutet:
Das gesamte **GameData-Verzeichnis** wird über ein Bind-Mount (`./data/gamedata`) persistent auf dem Host gespeichert. Das bedeutet:
- Alle Daten (Konfiguration, Tracks, Skins, Scores, Cache, etc.) bleiben erhalten
- Manuelle Änderungen gehen nicht verloren, auch wenn der Container neu erstellt wird
@@ -16,9 +16,9 @@ Das gesamte **GameData-Verzeichnis** wird über ein Bind-Mount (`./data/GameData
| Host-Pfad | Container-Pfad | Beschreibung |
|-----------|----------------|-------------|
| `./data/GameData` | `/opt/tmserver/GameData` | Gesamtes GameData-Verzeichnis |
| `./data/AdminServ` | `/var/www/html` | AdminServ- und RemoteCP-Daten |
| `./data/MariaDB` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
| `./data/gamedata` | `/opt/tmserver/GameData` | Gesamtes GameData-Verzeichnis |
| `./data/controlpanel` | `/var/www/html` | AdminServ- und RemoteCP-Daten |
| `./data/mariadb` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
### Enthaltene Unterordner
@@ -54,7 +54,7 @@ Nach dem ersten Start kann die Konfiguration direkt auf dem Host bearbeitet werd
```bash
# Konfiguration direkt auf dem Host bearbeiten
nano ./data/GameData/Config/dedicated_cfg.txt
nano ./data/gamedata/Config/dedicated_cfg.txt
# Alternativ: im Container anzeigen
docker exec tmserver cat /opt/tmserver/GameData/Config/dedicated_cfg.txt
@@ -63,7 +63,7 @@ docker exec tmserver cat /opt/tmserver/GameData/Config/dedicated_cfg.txt
docker restart tmserver
```
> **Hinweis:** Da `GameData/` als Bind-Mount eingebunden ist, sind Dateien direkt unter `./data/GameData/` auf dem Host verfügbar ohne `docker cp` oder `docker exec`.
> **Hinweis:** Da `GameData/` als Bind-Mount eingebunden ist, sind Dateien direkt unter `./data/gamedata/` auf dem Host verfügbar ohne `docker cp` oder `docker exec`.
## Konfiguration zurücksetzen (FORCE_CONFIG_UPDATE)
@@ -85,7 +85,9 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
+2 -1
View File
@@ -18,7 +18,8 @@ docker run -d \
-p 2350:2350/tcp \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
+3 -3
View File
@@ -64,7 +64,7 @@ Die MariaDB-Daten werden über ein eigenes Bind-Mount persistent gespeichert:
| Host-Pfad | Container-Pfad | Beschreibung |
|-----------|----------------|-------------|
| `./data/MariaDB` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
| `./data/mariadb` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
> **Hinweis:** Der MariaDB-Container kann auch für weitere Tools genutzt werden. Zusätzliche Datenbanken und Benutzer können über den Root-Zugang (`MARIADB_ROOT_PASSWORD`) erstellt werden.
@@ -83,9 +83,9 @@ RemoteCP wird im gleichen Volume wie AdminServ gespeichert:
| Host-Pfad | Container-Pfad | Beschreibung |
|-----------|----------------|-------------|
| `./data/AdminServ/remotecp` | `/var/www/html/remotecp` | RemoteCP-Installation |
| `./data/controlpanel/remotecp` | `/var/www/html/remotecp` | RemoteCP-Installation |
Die Konfigurationsdateien befinden sich unter `./data/AdminServ/remotecp/xml/`:
Die Konfigurationsdateien befinden sich unter `./data/controlpanel/remotecp/xml/`:
| Datei | Beschreibung |
|-------|-------------|
+13 -6
View File
@@ -14,6 +14,8 @@ cp .env.example .env
Bearbeite die `.env`-Datei und setze mindestens die gewünschten Passwörter. Für den Internet-Modus müssen zusätzlich `SERVER_LOGIN` und `SERVER_VALIDATION_KEY` gesetzt werden.
> **⚠ Sicherheitshinweis:** Die `.env.example` enthält **vorgenerierte Beispiel-Passwörter**. Diese dienen nur als Platzhalter und sind öffentlich einsehbar! **Ändere unbedingt alle Passwörter**, bevor du den Server produktiv einsetzt.
> **Wichtig:** Die `.env`-Datei enthält sensible Daten (Passwörter, Keys) und wird über die `.gitignore` vom Einchecken ausgeschlossen.
## 2. Docker Image bauen
@@ -45,7 +47,10 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \ -v ./data/AdminServ:/var/www/html \ --name tmserver tmserver:latest
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
### LAN-Modus (docker run)
@@ -60,8 +65,9 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/AdminServ:/var/www/html \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
@@ -80,9 +86,10 @@ Alle Server- und AdminServ-Daten werden über Bind-Mounts persistent auf dem Hos
| Host-Pfad | Container-Pfad | Beschreibung |
|-----------|----------------|-------------|
| `./data/GameData` | `/opt/tmserver/GameData` | TM-Server-Daten (Config, Tracks, Skins, etc.) |
| `./data/AdminServ` | `/var/www/html` | AdminServ- und RemoteCP-Daten |
| `./data/MariaDB` | `/var/lib/mysql` | MariaDB-Datenbankdateien |
| `./data/gamedata` | `/opt/tmserver/GameData` | TM-Server-Daten (Config, Tracks, Skins, etc.) |
| `./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 |
Beim ersten Start werden die Verzeichnisse automatisch aus dem Image erzeugt und die Umgebungsvariablen aus der `.env`-Datei angewendet. Bei weiteren Starts bleibt alles erhalten.
+3 -1
View File
@@ -53,6 +53,8 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
+24 -2
View File
@@ -16,6 +16,8 @@ cp .env.example .env
nano .env
```
> **⚠ Sicherheitshinweis:** Die `.env.example` enthält **vorgenerierte Beispiel-Passwörter**. Diese dienen nur als Platzhalter und sind öffentlich einsehbar! **Ändere unbedingt alle Passwörter**, bevor du den Server produktiv einsetzt. Betroffen sind: `SERVER_SA_PASSWORD`, `SERVER_ADM_PASSWORD`, `SERVER_USER_PASSWORD`, `MARIADB_ROOT_PASSWORD`, `REMOTECP_DB_PASSWORD` und `XASECO_DB_PASSWORD`.
## Authentifizierung
| Variable | Beschreibung | Standard |
@@ -87,6 +89,22 @@ RemoteCP verwendet die SuperAdmin-Zugangsdaten (`SERVER_SA_PASSWORD`) des TM-Ser
> **Hinweis:** Der MariaDB-Container kann mehrere Datenbanken beherbergen. Zusätzliche Datenbanken und Benutzer können über den Root-Zugang erstellt werden.
## XAseco
XAseco ist ein Server-Controller für Rekorde, Karma, Jukebox und mehr. Siehe [XAseco](xaseco.md) für Details.
| Variable | Beschreibung | Standard |
|----------|-------------|----------|
| `XASECO_ENABLED` | XAseco aktivieren/deaktivieren | `true` |
| `XASECO_MASTERADMIN_LOGIN` | Dein Spieler-Login (MasterAdmin) | *(muss gesetzt werden)* |
| `XASECO_DB_HOST` | Hostname des Datenbankservers | `mariadb` |
| `XASECO_DB_NAME` | Name der XAseco-Datenbank | `xaseco` |
| `XASECO_DB_USER` | Datenbank-Benutzername | `xaseco` |
| `XASECO_DB_PASSWORD` | Datenbank-Passwort | *(muss gesetzt werden)* |
| `XASECO_DEDIMANIA_NATION` | Dedimania-Nation (IOC-Code) | `DEU` |
> **Hinweis:** Die Server-Zugangsdaten (`SERVER_SA_PASSWORD`, `SERVER_XMLRPC_PORT`) und Dedimania-Daten (`SERVER_LOGIN`, `SERVER_LOGIN_PASSWORD`) werden automatisch aus der bestehenden Konfiguration übernommen.
## Debugging
| Variable | Beschreibung | Standard |
@@ -116,7 +134,9 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
@@ -131,6 +151,8 @@ docker run -d \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/GameData:/opt/tmserver/GameData \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver tmserver:latest
```
+120
View File
@@ -0,0 +1,120 @@
# XAseco
XAseco ist ein Server-Controller für TrackMania Nations Forever. Er verwaltet lokale Rekorde, Dedimania-Weltrekorde, Karma/Votes, eine Track-Jukebox und vieles mehr direkt im Spielchat.
Im Container wird die modifizierte Version **XAseco 1.16** verwendet, die für PHP 7.x angepasst wurde (Patches von Bueddel, Xymph, undef.de und reaby).
## Funktionsweise
XAseco verbindet sich über XML-RPC mit dem TrackMania-Server und reagiert auf Spielereignisse (neue Rekorde, Spieler-Connects, Chat-Befehle usw.). Die Daten werden in einer eigenen MySQL-Datenbank gespeichert.
## Konfiguration
Die Konfiguration erfolgt ausschließlich über Umgebungsvariablen in der `.env`-Datei. Beim **ersten Start** (leeres XAseco-Volume) werden die Werte automatisch in die XML-Konfigurationsdateien eingetragen.
### Erforderliche Variablen
| Variable | Beschreibung | Standard |
|----------|-------------|----------|
| `XASECO_MASTERADMIN_LOGIN` | Dein Spieler-Login (MasterAdmin mit allen Rechten) | *(muss gesetzt werden)* |
| `XASECO_DB_PASSWORD` | Passwort für die XAseco-Datenbank | *(muss gesetzt werden)* |
### Optionale Variablen
| Variable | Beschreibung | Standard |
|----------|-------------|----------|
| `XASECO_ENABLED` | XAseco aktivieren/deaktivieren | `true` |
| `XASECO_DB_HOST` | Hostname des Datenbankservers | `mariadb` |
| `XASECO_DB_NAME` | Name der XAseco-Datenbank | `xaseco` |
| `XASECO_DB_USER` | Datenbank-Benutzername | `xaseco` |
| `XASECO_DEDIMANIA_NATION` | Dedimania-Nation ([IOC-Code](https://en.wikipedia.org/wiki/List_of_IOC_country_codes), z.B. `DEU`, `AUT`, `CHE`) | `DEU` |
### Automatisch übernommene Variablen
Diese Werte werden aus der bestehenden Server-Konfiguration übernommen und müssen **nicht** separat gesetzt werden:
| Quelle | Verwendung in XAseco |
|--------|---------------------|
| `SERVER_SA_PASSWORD` | SuperAdmin-Passwort für die XML-RPC-Verbindung |
| `SERVER_XMLRPC_PORT` | XML-RPC-Port für die Verbindung zum TM-Server |
| `SERVER_LOGIN` | Dedimania Server-Login |
| `SERVER_LOGIN_PASSWORD` | Dedimania Server-Passwort |
## Datenbank
XAseco verwendet eine **eigene Datenbank** im selben MariaDB-Container. Die Datenbank und der Benutzer werden beim ersten Start des MariaDB-Containers automatisch erstellt (über ein Init-Script).
Das Datenbankschema (drei Tabellen-Dateien) wird beim ersten Start des tmserver-Containers automatisch importiert.
### Manueller Zugriff
Falls nötig, kann die XAseco-Datenbank über den MariaDB-Root-Zugang administriert werden:
```bash
docker exec -it tmserver-mariadb mysql -u root -p
```
### Nachträgliche Installation (bestehende MariaDB)
Das Init-Script (`assets/db/init-xaseco-db.sh`) wird von MariaDB nur beim **allerersten Start** (leeres `data/mariadb/`-Volume) ausgeführt. Wenn der MariaDB-Container bereits Daten enthält (z.B. weil er zuvor ohne XAseco lief), muss die Datenbank **einmalig manuell** erstellt werden:
```bash
docker exec -it tmserver-mariadb mysql -u root -p -e "
CREATE DATABASE IF NOT EXISTS xaseco CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'xaseco'@'%' IDENTIFIED BY 'DEIN_XASECO_DB_PASSWORT';
GRANT ALL PRIVILEGES ON xaseco.* TO 'xaseco'@'%';
FLUSH PRIVILEGES;"
```
Ersetze `DEIN_XASECO_DB_PASSWORT` durch den Wert von `XASECO_DB_PASSWORD` aus der `.env`-Datei. Das Tabellen-Schema wird anschließend beim nächsten Container-Start automatisch importiert, sofern das XAseco-Volume noch leer ist.
## Admin-System
XAseco kennt drei Berechtigungsstufen:
| Stufe | Beschreibung |
|-------|-------------|
| **MasterAdmin** | Volle Kontrolle (wird über `XASECO_MASTERADMIN_LOGIN` gesetzt) |
| **Admin** | Erweiterte Befehle (ebenfalls über `XASECO_MASTERADMIN_LOGIN` gesetzt) |
| **Operator** | Eingeschränkte Moderationsbefehle |
Weitere Admins/Operatoren können nach dem ersten Start manuell in `data/xaseco/adminops.xml` eingetragen werden.
## Persistente Daten
Alle XAseco-Daten werden im Volume `./data/xaseco/` gespeichert:
- Konfigurationsdateien (`config.xml`, `localdatabase.xml`, `dedimania.xml`, ...)
- Log-Datei (`aseco.log`)
- Admin-/Operator-Listen (`adminops.xml`)
## Deaktivieren
XAseco kann über die `.env`-Datei deaktiviert werden:
```env
XASECO_ENABLED=false
```
Der TrackMania-Server läuft dann ohne Server-Controller.
## Logs
Die XAseco-Logdatei befindet sich unter:
```
./data/xaseco/aseco.log
```
Bei Problemen ist dies die erste Anlaufstelle für die Fehlersuche.
## Wichtige Chat-Befehle
| Befehl | Beschreibung |
|--------|-------------|
| `/helpadmin` | Admin-Befehle anzeigen |
| `/recs` | Lokale Rekorde anzeigen |
| `/dedirecs` | Dedimania-Rekorde anzeigen |
| `/jukebox` | Track-Jukebox öffnen |
| `/stats` | Spieler-Statistiken anzeigen |
| `/admin help` | Alle Admin-Befehle |