mirror of
https://git.techniverse.net/scriptos/tmserver-docker.git
synced 2026-05-08 07:05:47 +00:00
xaseco implementiert + Doku erweitert + Lizenz erweitert.
This commit is contained in:
+25
-3
@@ -2,10 +2,13 @@
|
||||
# tmserver-docker – Umgebungsvariablen
|
||||
# ============================================================
|
||||
# Diese Datei wird von docker-compose.yml eingelesen.
|
||||
# Bitte ändere sämtliche Passwörter hier, um die Sicherheit deines Servers zu gewährleisten.
|
||||
# Kopiere diese Vorlage nach .env und passe die Werte an:
|
||||
# cp .env.example .env
|
||||
#
|
||||
# ⚠ SICHERHEITSHINWEIS:
|
||||
# Die unten stehenden Passwörter sind vorgenerierte Beispielwerte
|
||||
# und öffentlich einsehbar! Ändere ALLE Passwörter, bevor du
|
||||
# den Server produktiv einsetzt.
|
||||
# ============================================================
|
||||
|
||||
# --- Authentifizierung ---
|
||||
@@ -24,8 +27,8 @@ SERVER_VALIDATION_KEY=
|
||||
# --- Server-Optionen ---
|
||||
# Bitte ändere den Server-Namen und die Beschreibung, um deinen Server von anderen zu unterscheiden.
|
||||
# Du kannst auch die Anzahl der Spieler und Zuschauer anpassen, sowie ein Passwort setzen, um den Zugang zu beschränken.
|
||||
SERVER_NAME="$F00F$F10re$F20eZ$F30on$F40e $F50|$F60 T$F70ra$F80ck$F90ma$FA0n$FB0ia$FC0 S$FD0er$FE0ve$FF0r"
|
||||
SERVER_DESC="Powered by tm-server-docker"
|
||||
SERVER_NAME='Trackmania Server'
|
||||
SERVER_DESC="Powered by tmserver-docker"
|
||||
SERVER_HIDE=0
|
||||
SERVER_MAX_PLAYERS=40
|
||||
SERVER_PASSWORD=
|
||||
@@ -66,3 +69,22 @@ REMOTECP_DB_HOST=mariadb
|
||||
REMOTECP_DB_NAME=remotecp
|
||||
REMOTECP_DB_USER=remotecp
|
||||
REMOTECP_DB_PASSWORD="6MP2mBdF9TBtdmN"
|
||||
|
||||
# --- XAseco ---
|
||||
# XAseco ist ein Server-Controller, der Rekorde, Karma, Jukebox und vieles mehr verwaltet.
|
||||
# Setze XASECO_ENABLED auf false, um XAseco zu deaktivieren.
|
||||
XASECO_ENABLED=true
|
||||
|
||||
# Dein Spieler-Login (wird als MasterAdmin und Admin in XAseco eingetragen)
|
||||
XASECO_MASTERADMIN_LOGIN=
|
||||
|
||||
# XAseco-Datenbankzugang
|
||||
# Bitte ändere die Zugangsdaten für die XAseco-Datenbank, um die Sicherheit deiner Datenbank zu gewährleisten.
|
||||
XASECO_DB_HOST=mariadb
|
||||
XASECO_DB_NAME=xaseco
|
||||
XASECO_DB_USER=xaseco
|
||||
XASECO_DB_PASSWORD="4KpL8mWnR3xYvBq"
|
||||
|
||||
# Dedimania-Nation (3-Zeichen IOC-Code, z.B. DEU, AUT, CHE)
|
||||
# Server-Login und -Passwort werden automatisch aus SERVER_LOGIN / SERVER_LOGIN_PASSWORD übernommen.
|
||||
XASECO_DEDIMANIA_NATION=DEU
|
||||
|
||||
+47
@@ -13,6 +13,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
php-xml \
|
||||
php-mbstring \
|
||||
php-mysql \
|
||||
php-curl \
|
||||
default-mysql-client \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@@ -72,6 +73,43 @@ RUN unzip /var/www/html/remoteCP_v4.0.3.5.zip -d /var/www/html \
|
||||
# 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
|
||||
|
||||
# XAseco installieren
|
||||
COPY assets/bin/xaseco_v1.16.zip /opt/tmserver/
|
||||
RUN unzip /opt/tmserver/xaseco_v1.16.zip -d /opt/tmserver/ \
|
||||
&& rm -f /opt/tmserver/xaseco_v1.16.zip \
|
||||
# newinstall-Dateien in den Hauptordner verschieben
|
||||
&& cp /opt/tmserver/xaseco/newinstall/access.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/adminops.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/Aseco.sh /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/AsecoF.sh /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/autotime.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/bannedips.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/config.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/dedimania.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/html.tpl /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/localdatabase.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/matchsave.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/musicserver.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/plugins.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/rasp.xml /opt/tmserver/xaseco/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/text.tpl /opt/tmserver/xaseco/ \
|
||||
# Die drei PHP-Dateien nach includes/
|
||||
&& cp /opt/tmserver/xaseco/newinstall/jfreu.config.php /opt/tmserver/xaseco/includes/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/rasp.settings.php /opt/tmserver/xaseco/includes/ \
|
||||
&& cp /opt/tmserver/xaseco/newinstall/votes.config.php /opt/tmserver/xaseco/includes/ \
|
||||
# Start-Scripte ausfuehrbar machen
|
||||
&& chmod +x /opt/tmserver/xaseco/Aseco.sh \
|
||||
&& chmod +x /opt/tmserver/xaseco/AsecoF.sh \
|
||||
# newinstall-Ordner aufraeumen
|
||||
&& rm -rf /opt/tmserver/xaseco/newinstall
|
||||
|
||||
# Nicht mehr verfuegbare Plugins deaktivieren (freezone entfernen, teamspeak3 auskommentieren)
|
||||
RUN sed -i '/<plugin>plugin\.freezone\.php<\/plugin>/d' /opt/tmserver/xaseco/plugins.xml \
|
||||
&& sed -i 's/<plugin>plugin\.teamspeak3\.php<\/plugin>/<!-- <plugin>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
|
||||
|
||||
# PHP-Debug-Konfiguration: wird zur Laufzeit vom Startup-Script gesetzt
|
||||
# (kein Rebuild noetig – nur Container neustarten)
|
||||
|
||||
@@ -103,12 +141,21 @@ ENV REMOTECP_DB_HOST=mariadb
|
||||
ENV REMOTECP_DB_NAME=remotecp
|
||||
ENV REMOTECP_DB_USER=remotecp
|
||||
|
||||
# XAseco
|
||||
ENV XASECO_ENABLED=true
|
||||
ENV XASECO_MASTERADMIN_LOGIN=""
|
||||
ENV XASECO_DB_HOST=mariadb
|
||||
ENV XASECO_DB_NAME=xaseco
|
||||
ENV XASECO_DB_USER=xaseco
|
||||
ENV XASECO_DEDIMANIA_NATION=DEU
|
||||
|
||||
# Debugging
|
||||
ENV PHP_DISPLAY_ERRORS=false
|
||||
|
||||
# Volumes fuer persistente Daten
|
||||
VOLUME /opt/tmserver/GameData
|
||||
VOLUME /var/www/html
|
||||
VOLUME /opt/tmserver/xaseco
|
||||
|
||||
EXPOSE 5000/tcp
|
||||
EXPOSE 2350/tcp
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
MIT License
|
||||
MIT-Lizenz
|
||||
|
||||
Copyright © 2019 lduriez (Original: https://github.com/lduriez/tmserver-docker)
|
||||
Copyright © 2026 Patrick Asmus
|
||||
@@ -14,20 +14,75 @@ Blog: https://www.cleveradmin.de
|
||||
|
||||
---
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen
|
||||
Dokumentationsdateien (die „Software") erhält, kostenlos die Erlaubnis erteilt,
|
||||
uneingeschränkt mit der Software zu handeln, einschließlich und ohne
|
||||
Einschränkung der Rechte, die Software zu verwenden, zu kopieren, zu
|
||||
verändern, zusammenzuführen, zu veröffentlichen, zu verbreiten,
|
||||
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:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
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.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
DIE SOFTWARE WIRD „WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER
|
||||
STILLSCHWEIGENDE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH,
|
||||
ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER
|
||||
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN
|
||||
DRITTER. IN KEINEM FALL HAFTEN DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR
|
||||
JEGLICHE ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB AUS VERTRAG,
|
||||
UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS ODER IN VERBINDUNG MIT
|
||||
DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE
|
||||
ERGEBEN.
|
||||
|
||||
===============================================================================
|
||||
Hinweise zu enthaltenen Drittanbieter-Tools
|
||||
===============================================================================
|
||||
|
||||
Die oben genannte MIT-Lizenz gilt ausschließlich für den Code, die
|
||||
Konfiguration und die Container-Arbeit dieses Repositories (tmserver-docker)
|
||||
von Patrick Asmus. Die folgenden Drittanbieter-Tools werden in diesem Projekt
|
||||
eingebunden und unterliegen jeweils ihren eigenen Lizenzbedingungen. Alle
|
||||
Rechte an diesen Tools verbleiben bei den jeweiligen Entwicklern bzw.
|
||||
Rechteinhabern.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
1. AdminServ
|
||||
-------------------------------------------------------------------------------
|
||||
Beschreibung: Web-Interface zur Verwaltung von TrackMania Forever und
|
||||
ManiaPlanet Dedicated Servern.
|
||||
Ursprünglicher Entwickler: Kev717
|
||||
Weiterentwicklung: Chris92de
|
||||
Repository: https://github.com/Chris92de/AdminServ
|
||||
Lizenz: Keine Lizenzdatei im Repository vorhanden.
|
||||
Alle Rechte verbleiben bei den jeweiligen Entwicklern
|
||||
(Kev717, Chris92de und weitere Mitwirkende).
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
2. remoteCP
|
||||
-------------------------------------------------------------------------------
|
||||
Beschreibung: Remote-Control-Panel für TrackMania Server.
|
||||
Entwickler: hal.sascha
|
||||
Lizenz: GNU Lesser General Public License (LGPL)
|
||||
https://www.gnu.org/licenses/lgpl-3.0.html
|
||||
Hinweis: Alle Rechte verbleiben beim Entwickler hal.sascha.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
3. XASECO
|
||||
-------------------------------------------------------------------------------
|
||||
Beschreibung: Server-Controller für TrackMania (Nations/Forever).
|
||||
Basiert auf ASECO von Florian Schnell und RASP von
|
||||
Eyez (Iain Surgey) & Assembler Maniac (Brad Mettee).
|
||||
Entwickler: Xymph (Frans P. de Vries)
|
||||
Copyright: © 2007-2026 Frans P. de Vries
|
||||
Website: https://www.xaseco.org
|
||||
Kontakt: tm@gamers.org
|
||||
Lizenz: Keine explizite Open-Source-Lizenz im Projekt angegeben.
|
||||
Alle Rechte verbleiben bei Frans P. de Vries (Xymph)
|
||||
und den ursprünglichen Autoren von ASECO und RASP.
|
||||
|
||||
===============================================================================
|
||||
|
||||
@@ -16,6 +16,8 @@ cp .env.example .env
|
||||
|
||||
Passe die Werte in der `.env`-Datei an deine Umgebung an (Passwörter, Masterserver-Account, etc.).
|
||||
|
||||
> **⚠ 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.
|
||||
|
||||
### 2. Server starten
|
||||
|
||||
```bash
|
||||
@@ -36,20 +38,24 @@ docker compose up -d --build
|
||||
│ ├── 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/
|
||||
│ ├── 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
|
||||
├── AdminServ/ # AdminServ + RemoteCP
|
||||
└── MariaDB/ # MariaDB-Datenbankdateien
|
||||
├── gamedata/ # TM-Server-Daten
|
||||
├── controlpanel/ # AdminServ + RemoteCP
|
||||
├── xaseco/ # XAseco-Konfiguration und Logs
|
||||
└── mariadb/ # MariaDB-Datenbankdateien
|
||||
```
|
||||
|
||||
## Dokumentation
|
||||
@@ -62,6 +68,7 @@ Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md
|
||||
- [Server-Modi](docs/server-modi.md) – LAN- und Internet-Dedicated-Modus
|
||||
- [AdminServ](docs/adminserv.md) – Einrichtung der Server-Verwaltungsoberfläche
|
||||
- [RemoteCP](docs/remotecp.md) – Alternative Server-Verwaltungsoberfläche
|
||||
- [XAseco](docs/xaseco.md) – Server-Controller für Rekorde, Karma und Jukebox
|
||||
- [Ports](docs/ports.md) – Freigegebene Ports und deren Verwendung
|
||||
|
||||
---
|
||||
|
||||
@@ -232,6 +232,127 @@ else
|
||||
echo "==> Vorhandene AdminServ-Daten gefunden. Keine Aenderungen."
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# XAseco: First-Run-Logik
|
||||
# ============================================================
|
||||
# Beim ersten Start (leeres Volume) werden die XAseco-Dateien
|
||||
# aus dem Default-Template ins Volume kopiert und die
|
||||
# Konfiguration aus den Umgebungsvariablen angewendet.
|
||||
# ============================================================
|
||||
|
||||
XASECO_DIR="/opt/tmserver/xaseco"
|
||||
DEFAULT_XASECO="/opt/tmserver/default-xaseco"
|
||||
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/"
|
||||
|
||||
XMLRPC_PORT="${SERVER_XMLRPC_PORT:-5000}"
|
||||
XASECO_ADMIN="${XASECO_MASTERADMIN_LOGIN:-}"
|
||||
SA_PW_XASECO=$(printf '%s' "${SERVER_SA_PASSWORD:-SuperAdmin}" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
|
||||
# --- config.xml: MasterAdmin und TMServer-Verbindung konfigurieren ---
|
||||
if [ -n "$XASECO_ADMIN" ]; then
|
||||
SAFE_ADMIN=$(printf '%s' "$XASECO_ADMIN" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
# MasterAdmin in die masteradmins-Liste einfuegen (nach <masteradmins>-Tag)
|
||||
sed -i "/<masteradmins>/a\\
|
||||
<tmlogin>${SAFE_ADMIN}</tmlogin> <ipaddress></ipaddress>" "$XASECO_DIR/config.xml"
|
||||
echo " config.xml: MasterAdmin '${XASECO_ADMIN}' gesetzt."
|
||||
else
|
||||
echo " HINWEIS: XASECO_MASTERADMIN_LOGIN nicht gesetzt."
|
||||
echo " Bitte manuell in xaseco/config.xml eintragen!"
|
||||
fi
|
||||
|
||||
sed -i "s|<password>YOUR_SUPERADMIN_PASSWORD</password>|<password>${SA_PW_XASECO}</password>|" "$XASECO_DIR/config.xml"
|
||||
sed -i "s|<port>5000</port>|<port>${XMLRPC_PORT}</port>|" "$XASECO_DIR/config.xml"
|
||||
echo " config.xml: TMServer-Verbindung konfiguriert (Port: ${XMLRPC_PORT})."
|
||||
|
||||
# --- adminops.xml: Admin-Login eintragen ---
|
||||
if [ -n "$XASECO_ADMIN" ]; then
|
||||
SAFE_ADMIN=$(printf '%s' "$XASECO_ADMIN" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
sed -i "s|<!-- format:\n.*<tmlogin>YOUR_ADMIN_LOGIN</tmlogin>.*\n.*-->||" "$XASECO_DIR/adminops.xml"
|
||||
# Admin in die admins-Liste einfuegen
|
||||
sed -i "/<admins>/a\\
|
||||
<tmlogin>${SAFE_ADMIN}</tmlogin> <ipaddress></ipaddress>" "$XASECO_DIR/adminops.xml"
|
||||
echo " adminops.xml: Admin '${XASECO_ADMIN}' eingetragen."
|
||||
fi
|
||||
|
||||
# --- localdatabase.xml: MySQL-Verbindung konfigurieren ---
|
||||
XASECO_DB_HOST="${XASECO_DB_HOST:-mariadb}"
|
||||
XASECO_DB_NAME="${XASECO_DB_NAME:-xaseco}"
|
||||
XASECO_DB_USER="${XASECO_DB_USER:-xaseco}"
|
||||
XASECO_DB_PASSWORD="${XASECO_DB_PASSWORD:-}"
|
||||
|
||||
if [ -n "$XASECO_DB_PASSWORD" ]; then
|
||||
SAFE_DB_HOST=$(printf '%s' "$XASECO_DB_HOST" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
SAFE_DB_USER=$(printf '%s' "$XASECO_DB_USER" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
SAFE_DB_PW=$(printf '%s' "$XASECO_DB_PASSWORD" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
SAFE_DB_NAME=$(printf '%s' "$XASECO_DB_NAME" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
sed -i "s|<mysql_server>localhost</mysql_server>|<mysql_server>${SAFE_DB_HOST}</mysql_server>|" "$XASECO_DIR/localdatabase.xml"
|
||||
sed -i "s|<mysql_login>YOUR_MYSQL_LOGIN</mysql_login>|<mysql_login>${SAFE_DB_USER}</mysql_login>|" "$XASECO_DIR/localdatabase.xml"
|
||||
sed -i "s|<mysql_password>YOUR_MYSQL_PASSWORD</mysql_password>|<mysql_password>${SAFE_DB_PW}</mysql_password>|" "$XASECO_DIR/localdatabase.xml"
|
||||
sed -i "s|<mysql_database>aseco</mysql_database>|<mysql_database>${SAFE_DB_NAME}</mysql_database>|" "$XASECO_DIR/localdatabase.xml"
|
||||
echo " localdatabase.xml: MySQL-Verbindung konfiguriert (Host: ${XASECO_DB_HOST}, DB: ${XASECO_DB_NAME})."
|
||||
else
|
||||
echo " WARNUNG: XASECO_DB_PASSWORD nicht gesetzt!"
|
||||
echo " XAseco-Datenbank muss manuell in xaseco/localdatabase.xml konfiguriert werden."
|
||||
fi
|
||||
|
||||
# --- dedimania.xml: Server-Account konfigurieren ---
|
||||
DEDI_LOGIN="${SERVER_LOGIN:-}"
|
||||
DEDI_PASSWORD="${SERVER_LOGIN_PASSWORD:-}"
|
||||
DEDI_NATION="${XASECO_DEDIMANIA_NATION:-DEU}"
|
||||
|
||||
if [ -n "$DEDI_LOGIN" ] && [ -n "$DEDI_PASSWORD" ]; then
|
||||
SAFE_DEDI_LOGIN=$(printf '%s' "$DEDI_LOGIN" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
SAFE_DEDI_PW=$(printf '%s' "$DEDI_PASSWORD" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
SAFE_DEDI_NATION=$(printf '%s' "$DEDI_NATION" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
sed -i "s|<login>YOUR_SERVER_LOGIN</login>|<login>${SAFE_DEDI_LOGIN}</login>|" "$XASECO_DIR/dedimania.xml"
|
||||
sed -i "s|<password>YOUR_SERVER_PASSWORD</password>|<password>${SAFE_DEDI_PW}</password>|" "$XASECO_DIR/dedimania.xml"
|
||||
sed -i "s|<nation>YOUR_SERVER_NATION</nation>|<nation>${SAFE_DEDI_NATION}</nation>|" "$XASECO_DIR/dedimania.xml"
|
||||
echo " dedimania.xml: Server-Account konfiguriert (Nation: ${DEDI_NATION})."
|
||||
else
|
||||
echo " HINWEIS: SERVER_LOGIN/SERVER_LOGIN_PASSWORD nicht gesetzt."
|
||||
echo " Dedimania wird ohne Account konfiguriert."
|
||||
fi
|
||||
|
||||
# --- XAseco-Datenbank: Schema importieren ---
|
||||
if [ -n "$XASECO_DB_PASSWORD" ]; then
|
||||
echo " Warte auf MariaDB (${XASECO_DB_HOST}) fuer XAseco-DB..."
|
||||
DB_READY=false
|
||||
for i in $(seq 1 30); do
|
||||
if mysql -h "$XASECO_DB_HOST" -u "$XASECO_DB_USER" -p"$XASECO_DB_PASSWORD" "$XASECO_DB_NAME" -e "SELECT 1" > /dev/null 2>&1; then
|
||||
echo " MariaDB erreichbar."
|
||||
DB_READY=true
|
||||
break
|
||||
fi
|
||||
echo " Versuch $i/30 - MariaDB noch nicht bereit, warte 3s..."
|
||||
sleep 3
|
||||
done
|
||||
|
||||
if [ "$DB_READY" = "true" ]; then
|
||||
echo " Importiere XAseco-Datenbankschema..."
|
||||
for sqlfile in "$XASECO_DIR"/localdb/*.sql; do
|
||||
if [ -f "$sqlfile" ]; then
|
||||
echo " -> $(basename "$sqlfile")"
|
||||
mysql -h "$XASECO_DB_HOST" -u "$XASECO_DB_USER" -p"$XASECO_DB_PASSWORD" "$XASECO_DB_NAME" < "$sqlfile"
|
||||
fi
|
||||
done
|
||||
echo " XAseco-Datenbank erfolgreich initialisiert."
|
||||
else
|
||||
echo " WARNUNG: MariaDB nicht erreichbar nach 90s!"
|
||||
echo " XAseco-Datenbankschema muss manuell importiert werden."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo " XAseco-Konfiguration abgeschlossen."
|
||||
else
|
||||
echo "==> Vorhandene XAseco-Daten gefunden. Keine Aenderungen."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starting apache server"
|
||||
service apache2 start
|
||||
|
||||
@@ -327,4 +448,41 @@ echo "Server config dedicated_cfg.txt is"
|
||||
cat "$CONFIG"
|
||||
|
||||
echo "Launching Server in ${SERVER_MODE} mode"
|
||||
exec ./TrackmaniaServer /dedicated_cfg=dedicated_cfg.txt /game_settings=MatchSettings/custom_game_settings.txt /nodaemon ${LAUNCH_MODE}
|
||||
./TrackmaniaServer /dedicated_cfg=dedicated_cfg.txt /game_settings=MatchSettings/custom_game_settings.txt /nodaemon ${LAUNCH_MODE} &
|
||||
TM_PID=$!
|
||||
echo "TrackmaniaServer gestartet (PID: ${TM_PID})"
|
||||
|
||||
# ============================================================
|
||||
# XAseco starten (nach TrackmaniaServer)
|
||||
# ============================================================
|
||||
if [ "${XASECO_ENABLED:-true}" = "true" ] && [ -f "/opt/tmserver/xaseco/aseco.php" ]; then
|
||||
echo "==> Warte auf TrackmaniaServer XMLRPC..."
|
||||
XMLRPC_PORT="${SERVER_XMLRPC_PORT:-5000}"
|
||||
XMLRPC_READY=false
|
||||
for i in $(seq 1 30); do
|
||||
if php -r "@fsockopen('127.0.0.1', ${XMLRPC_PORT}, \$e, \$m, 2) ? exit(0) : exit(1);" 2>/dev/null; then
|
||||
XMLRPC_READY=true
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
if [ "$XMLRPC_READY" = "true" ]; then
|
||||
echo "==> Starte XAseco..."
|
||||
cd /opt/tmserver/xaseco
|
||||
php aseco.php TMN </dev/null >>aseco.log 2>&1 &
|
||||
XASECO_PID=$!
|
||||
echo " XAseco gestartet (PID: ${XASECO_PID})"
|
||||
cd /opt/tmserver
|
||||
else
|
||||
echo " WARNUNG: XMLRPC-Port ${XMLRPC_PORT} nicht erreichbar nach 60s!"
|
||||
echo " XAseco wurde NICHT gestartet. Bitte manuell starten."
|
||||
fi
|
||||
else
|
||||
if [ "${XASECO_ENABLED:-true}" != "true" ]; then
|
||||
echo "==> XAseco ist deaktiviert (XASECO_ENABLED=${XASECO_ENABLED})."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Auf TrackmaniaServer warten (Hauptprozess)
|
||||
wait $TM_PID
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
# ============================================================
|
||||
# MariaDB Init-Script: XAseco-Datenbank erstellen
|
||||
# ============================================================
|
||||
# Wird automatisch beim ersten Start des MariaDB-Containers
|
||||
# ausgefuehrt (via /docker-entrypoint-initdb.d/).
|
||||
# Erstellt Datenbank und Benutzer fuer XAseco, sofern die
|
||||
# entsprechenden Umgebungsvariablen gesetzt sind.
|
||||
# ============================================================
|
||||
|
||||
XASECO_DB_NAME="${XASECO_DB_NAME:-xaseco}"
|
||||
XASECO_DB_USER="${XASECO_DB_USER:-xaseco}"
|
||||
XASECO_DB_PASSWORD="${XASECO_DB_PASSWORD:-}"
|
||||
|
||||
if [ -z "$XASECO_DB_PASSWORD" ]; then
|
||||
echo "HINWEIS: XASECO_DB_PASSWORD nicht gesetzt – ueberspringe XAseco-DB-Erstellung."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Erstelle XAseco-Datenbank '${XASECO_DB_NAME}' und Benutzer '${XASECO_DB_USER}'..."
|
||||
|
||||
mariadb -u root -p"${MYSQL_ROOT_PASSWORD}" <<-EOSQL
|
||||
CREATE DATABASE IF NOT EXISTS \`${XASECO_DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER IF NOT EXISTS '${XASECO_DB_USER}'@'%' IDENTIFIED BY '${XASECO_DB_PASSWORD}';
|
||||
GRANT ALL PRIVILEGES ON \`${XASECO_DB_NAME}\`.* TO '${XASECO_DB_USER}'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
EOSQL
|
||||
|
||||
echo "XAseco-Datenbank erfolgreich erstellt."
|
||||
@@ -18,6 +18,7 @@ services:
|
||||
volumes:
|
||||
- ./data/gamedata:/opt/tmserver/GameData
|
||||
- ./data/controlpanel:/var/www/html
|
||||
- ./data/xaseco:/opt/tmserver/xaseco
|
||||
networks:
|
||||
tmserver_net:
|
||||
ipv4_address: 172.20.60.10
|
||||
@@ -35,6 +36,7 @@ services:
|
||||
MYSQL_PASSWORD: ${REMOTECP_DB_PASSWORD}
|
||||
volumes:
|
||||
- ./data/mariadb:/var/lib/mysql
|
||||
- ./assets/db/init-xaseco-db.sh:/docker-entrypoint-initdb.d/20-init-xaseco-db.sh:ro
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 10s
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
@@ -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 |
|
||||
Reference in New Issue
Block a user