12 KiB
Umgebungsvariablen
Alle Umgebungsvariablen werden über die .env-Datei konfiguriert, die von docker-compose.yml automatisch eingelesen wird. Alternativ können sie beim docker run über --env-file .env oder einzeln mit -e gesetzt werden.
Die Variablen werden beim ersten Start (leeres GameData-Volume) in die dedicated_cfg.txt eingetragen. Bei weiteren Starts bleiben manuelle Änderungen erhalten. Siehe Konfiguration für Details.
Sicherheitshinweis: Sensible Werte (Passwörter, Keys) sind nicht im Docker-Image hinterlegt. Sie werden ausschließlich zur Laufzeit über die
.env-Datei übergeben. Die.env-Datei ist über.gitignoreund.dockerignoregeschützt und wird weder ins Git noch in den Docker-Build-Context aufgenommen.
Einrichtung
# Vorlage kopieren
cp .env.example .env
# Werte anpassen
nano .env
⚠ Sicherheitshinweis: Die
.env.exampleenthä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_PASSWORDundXASECO_DB_PASSWORD.
Authentifizierung
| Variable | Beschreibung | Standard |
|---|---|---|
SERVER_SA_PASSWORD |
SuperAdmin-Passwort | SuperAdmin |
SERVER_ADM_PASSWORD |
Admin-Passwort | Admin |
SERVER_USER_PASSWORD |
User-Passwort | User |
Masterserver-Account
| Variable | Beschreibung | Standard |
|---|---|---|
SERVER_LOGIN |
Masterserver-Login (nur Internet-Modus) | (leer) |
SERVER_LOGIN_PASSWORD |
Masterserver-Passwort | (leer) |
SERVER_VALIDATION_KEY |
Masterserver-Validierungsschlüssel | (leer) |
Wichtig: Im Internet-Modus müssen
SERVER_LOGINundSERVER_VALIDATION_KEYgesetzt sein, andernfalls startet der Server nicht.
Server-Optionen
| Variable | Beschreibung | Standard |
|---|---|---|
SERVER_NAME |
Servername (im Spiel sichtbar) | Trackmania Server |
SERVER_DESC |
Serverbeschreibung | Powered by tmserver-docker |
SERVER_HIDE |
Server verstecken (0 = sichtbar, 1 = versteckt, 2 = vor Nations versteckt) |
0 |
SERVER_MAX_PLAYERS |
Maximale Spieleranzahl | 32 |
SERVER_PASSWORD |
Passwort zum Beitreten (leer = offen) | (leer) |
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
| Variable | Beschreibung | Standard |
|---|---|---|
SERVER_PORT |
Gameserver-Port | 2350 |
SERVER_P2P_PORT |
P2P-Port | 3450 |
SERVER_XMLRPC_PORT |
XML-RPC-Port (intern für AdminServ) | 5000 |
SERVER_UPLOAD_RATE |
Upload-Rate in Kbps | 512 |
SERVER_DOWNLOAD_RATE |
Download-Rate in Kbps | 8192 |
Server-Modus & Steuerung
| Variable | Beschreibung | Standard |
|---|---|---|
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 |
|---|---|---|
MATCHSETTINGS_FILE |
MatchSettings-Datei beim Serverstart: auto = neueste .txt-Datei im Ordner wird automatisch geladen, oder ein expliziter Dateiname (z.B. meine_settings.txt) |
auto |
ALLWARMUPDURATION |
Warmup-Dauer für alle Runden (0 = deaktiviert, 1 = eine Runde Warmup) |
0 |
SHUFFLE_MAPLIST |
Map-Reihenfolge beim Containerstart zufällig mischen (true = aktiviert, false = deaktiviert) |
false |
Automatische MatchSettings-Erkennung
Standardmäßig (MATCHSETTINGS_FILE=auto) wird beim Serverstart automatisch die neueste .txt-Datei im Verzeichnis data/gamedata/Tracks/MatchSettings/ anhand des Änderungsdatums ermittelt und geladen. So werden z.B. über AdminServ exportierte MatchSettings beim nächsten Neustart automatisch aktiv.
Beispiele:
# Automatisch die neueste Datei laden (Standard)
MATCHSETTINGS_FILE=auto
# Eine bestimmte Datei verwenden
MATCHSETTINGS_FILE=turnier_settings.txt
Hinweis: Falls die angegebene oder automatisch ermittelte Datei nicht existiert, wird auf
custom_game_settings.txtzurückgefallen. Die aktiv geladene Datei wird beim Serverstart in der Konsole ausgegeben.
Map-Shuffle
Mit SHUFFLE_MAPLIST=true wird die Reihenfolge aller Maps in der aktiven MatchSettings-Datei beim jedem Containerstart zufällig durchgemischt. So startet der Server jedes Mal mit einer anderen Map, statt immer bei Map #1 zu beginnen.
- Die
<challenge>-Einträge in der MatchSettings-XML werden zufällig neu angeordnet - Der
<startindex>wird automatisch auf0gesetzt - Die aktive MatchSettings-Datei wird dabei direkt überschrieben
- Die ersten 3 Maps der neuen Reihenfolge werden beim Start in der Konsole angezeigt
Beispiel:
# Map-Reihenfolge bei jedem Start mischen
SHUFFLE_MAPLIST=true
# Deaktiviert (Standard) – Reihenfolge bleibt wie in der Datei
SHUFFLE_MAPLIST=false
Hinweis: Der Shuffle wird auf die MatchSettings-Datei angewendet, die durch
MATCHSETTINGS_FILEbestimmt wird (entweder automatisch oder explizit). Die Änderung ist persistent – die Datei wird tatsächlich umgeschrieben. Bei jedem Neustart wird erneut gemischt.
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.
| Variable | Beschreibung | Standard |
|---|---|---|
REMOTECP_DB_HOST |
Hostname des Datenbankservers | mariadb |
REMOTECP_DB_NAME |
Name der RemoteCP-Datenbank | remotecp |
REMOTECP_DB_USER |
Datenbank-Benutzername | remotecp |
REMOTECP_DB_PASSWORD |
Datenbank-Passwort | (muss gesetzt werden) |
Hinweis: Diese Werte werden nur beim ersten Start (leeres Volume) angewendet. Weitere Details unter RemoteCP.
Forced Mods (Skins)
Mods sind Texturpakete (Skins), die das Aussehen einer Spielumgebung komplett verändern. Über FORCE_MOD_*-Variablen kann beim Containerstart automatisch ein Mod pro Umgebung forciert werden. Spieler laden den Mod dann automatisch beim Betreten des Servers herunter.
| Variable | Beschreibung | Standard |
|---|---|---|
FORCE_MOD_STADIUM |
Mod-URL für die Stadium-Umgebung | (leer) |
FORCE_MOD_ISLAND |
Mod-URL für die Island-Umgebung | (leer) |
FORCE_MOD_BAY |
Mod-URL für die Bay-Umgebung | (leer) |
FORCE_MOD_COAST |
Mod-URL für die Coast-Umgebung | (leer) |
FORCE_MOD_SPEED |
Mod-URL für die Speed-Umgebung | (leer) |
FORCE_MOD_ALPINE |
Mod-URL für die Alpine-Umgebung | (leer) |
FORCE_MOD_RALLY |
Mod-URL für die Rally-Umgebung | (leer) |
Hinweis: Die Mods werden per XML-RPC (
SetForcedMods) bei jedem Containerstart gesetzt – unabhängig vonFORCE_CONFIG_UPDATE. Die URL muss auf eine gültige Mod-ZIP-Datei zeigen, die für die Spieler erreichbar ist.
Verfügbare Skins
Eine Auswahl vorkonfigurierter Skins steht unter https://assets.techniverse.net/tm/skins/ bereit und ist auch im RemoteCP-Mods-Plugin als Dropdown auswählbar.
Beispiel:
# Portal-Mod für Stadium forcieren
FORCE_MOD_STADIUM=https://assets.techniverse.net/tm/skins/Portal.zip
# Mehrere Umgebungen gleichzeitig
FORCE_MOD_STADIUM=https://assets.techniverse.net/tm/skins/Xmas.zip
FORCE_MOD_ISLAND=https://example.com/mods/island_mod.zip
Mods über RemoteCP verwalten
Zusätzlich zur automatischen Konfiguration per Umgebungsvariable können Mods auch zur Laufzeit über das RemoteCP-Web-Interface (http://<host-ip>/remotecp/) im Mods-Plugin per Dropdown ausgewählt und aktiviert werden.
MariaDB
| Variable | Beschreibung | Standard |
|---|---|---|
MARIADB_ROOT_PASSWORD |
Root-Passwort für den MariaDB-Server | (muss gesetzt werden) |
Wichtig:
MARIADB_ROOT_PASSWORDmuss gesetzt sein, damit der MariaDB-Container startet. Die Datenbank und der Benutzer für RemoteCP werden automatisch ausREMOTECP_DB_NAME,REMOTECP_DB_USERundREMOTECP_DB_PASSWORDerstellt.
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 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 |
XASECO_HEALTHCHECK |
Automatische Überwachung und Neustart von XAseco bei Absturz/Verbindungsverlust | true |
XASECO_HEALTHCHECK_INTERVAL |
Prüfintervall des Healthchecks in Sekunden | 60 |
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.
IP-Watcher
| Variable | Beschreibung | Standard |
|---|---|---|
IP_WATCHER_INTERVAL |
Prüfintervall in Sekunden, in dem die öffentliche IP geprüft wird | 300 |
Hinweis: Der IP-Watcher verwendet den Docker-Socket (
/var/run/docker.sock), umtmserverbei einer IP-Änderung automatisch neu zu starten. Weitere Details unter IP-Watcher.
Debugging
| Variable | Beschreibung | Standard |
|---|---|---|
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 solltePHP_DISPLAY_ERRORSimmer auffalsestehen.Bei
falsewerden nur schwerwiegende Fehler geloggt (keine Warnungen/Notices). Beitruewerden zusätzlich alle Warnungen und Hinweise angezeigt und geloggt – nützlich zur Fehlersuche bei Problemen mit RemoteCP oder AdminServ.
Hinweis: Bei
FORCE_CONFIG_UPDATE=truewird diededicated_cfg.txtaus dem Template neu erzeugt und alle Platzhalter mit den aktuellen Umgebungsvariablen ersetzt. Manuelle Änderungen gehen dabei verloren! Nach dem Update sollteFORCE_CONFIG_UPDATEwieder auffalsegesetzt werden.
Beispiel
Docker Compose (empfohlen)
Passe die Werte in der .env-Datei an und starte mit:
docker compose up -d
Tipp: Das fertige Docker Image wird automatisch aus der Container-Registry geladen. Wenn du das Image selbst bauen möchtest, verwende stattdessen
docker compose up -d --build.
docker run
docker run -d \
--env-file .env \
-p 2350:2350/tcp \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver git.techniverse.net/scriptos/trackmania-server:latest
Einzelne Werte können zusätzlich überschrieben werden:
docker run -d \
--env-file .env \
-e SERVER_NAME="Mein Server" \
-e SERVER_MAX_PLAYERS=64 \
-p 2350:2350/tcp \
-p 2350:2350/udp \
-p 3450:3450/tcp \
-p 80:80/tcp \
-v ./data/gamedata:/opt/tmserver/GameData \
-v ./data/controlpanel:/var/www/html \
-v ./data/xaseco:/opt/tmserver/xaseco \
--name tmserver git.techniverse.net/scriptos/trackmania-server:latest