release-1.1.0 #6
@@ -35,6 +35,7 @@ SERVER_PASSWORD=
|
|||||||
SERVER_MAX_SPECTATORS=40
|
SERVER_MAX_SPECTATORS=40
|
||||||
SERVER_SPEC_PASSWORD=
|
SERVER_SPEC_PASSWORD=
|
||||||
SERVER_LADDER_MODE=forced
|
SERVER_LADDER_MODE=forced
|
||||||
|
SERVER_LADDER_LIMIT_MAX=60000
|
||||||
|
|
||||||
# --- Netzwerk ---
|
# --- Netzwerk ---
|
||||||
# Bitte ändere die Ports, wenn sie in deinem Netzwerk bereits verwendet werden.
|
# Bitte ändere die Ports, wenn sie in deinem Netzwerk bereits verwendet werden.
|
||||||
|
|||||||
15
Dockerfile
15
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
|
&& chown -R www-data:www-data /opt/tmserver/GameData/Config/AdminServ
|
||||||
|
|
||||||
# Gesamtes GameData als Default-Template sichern (wird beim ersten Start ins Volume kopiert)
|
# 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/
|
COPY assets/bin/RunTrackmaniaServer.sh /opt/tmserver/
|
||||||
RUN sed -i 's/\r$//' /opt/tmserver/RunTrackmaniaServer.sh \
|
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 \
|
&& chmod -R 777 /var/www/html/remotecp/xml/settings \
|
||||||
&& chown -R www-data:www-data /var/www/html/remotecp/
|
&& 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)
|
# 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
|
# XAseco installieren
|
||||||
COPY assets/bin/xaseco_v1.16.zip /opt/tmserver/
|
COPY assets/bin/xaseco_v1.16.zip /opt/tmserver/
|
||||||
@@ -108,7 +114,7 @@ RUN sed -i '/<plugin>plugin\.freezone\.php<\/plugin>/d' /opt/tmserver/xaseco/plu
|
|||||||
&& sed -i 's/<plugin>plugin\.teamspeak3\.php<\/plugin>/<!-- <plugin>plugin.teamspeak3.php<\/plugin> -->/' /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)
|
# 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
|
# PHP-Debug-Konfiguration: wird zur Laufzeit vom Startup-Script gesetzt
|
||||||
# (kein Rebuild noetig – nur Container neustarten)
|
# (kein Rebuild noetig – nur Container neustarten)
|
||||||
@@ -136,6 +142,9 @@ ENV SERVER_DOWNLOAD_RATE=8192
|
|||||||
ENV SERVER_MODE=internet
|
ENV SERVER_MODE=internet
|
||||||
ENV FORCE_CONFIG_UPDATE=false
|
ENV FORCE_CONFIG_UPDATE=false
|
||||||
|
|
||||||
|
# Spieleinstellungen (MatchSettings)
|
||||||
|
ENV ALLWARMUPDURATION=0
|
||||||
|
|
||||||
# RemoteCP
|
# RemoteCP
|
||||||
ENV REMOTECP_DB_HOST=mariadb
|
ENV REMOTECP_DB_HOST=mariadb
|
||||||
ENV REMOTECP_DB_NAME=remotecp
|
ENV REMOTECP_DB_NAME=remotecp
|
||||||
|
|||||||
8
LICENSE
8
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
|
denen die Software zur Verfügung gestellt wird, dies unter den folgenden
|
||||||
Bedingungen zu gestatten:
|
Bedingungen zu gestatten:
|
||||||
|
|
||||||
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen
|
Der obige Urheberrechtshinweis einschließlich der Angaben zum Lizenzinhaber
|
||||||
Kopien oder wesentlichen Teilen der Software enthalten sein. Bei jeglicher
|
sowie dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen
|
||||||
Weiterverarbeitung, Veröffentlichung oder Verbreitung der Software müssen der
|
Teilen der Software enthalten sein.
|
||||||
Name „Patrick Asmus" und die E-Mail-Adresse „support@techniverse.net" des
|
|
||||||
Urhebers genannt werden.
|
|
||||||
|
|
||||||
DIE SOFTWARE WIRD „WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER
|
DIE SOFTWARE WIRD „WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER
|
||||||
STILLSCHWEIGENDE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH,
|
STILLSCHWEIGENDE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH,
|
||||||
|
|||||||
59
README.md
59
README.md
@@ -1,6 +1,13 @@
|
|||||||
# tmserver-docker
|
# 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).
|
> **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
|
### 2. Server starten
|
||||||
|
|
||||||
|
Das fertige Docker Image kann direkt verwendet werden – kein eigener Build nötig:
|
||||||
|
|
||||||
```bash
|
```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
|
### 3. Verwaltungsoberflächen öffnen
|
||||||
|
|
||||||
- **AdminServ:** `http://<host-ip>/`
|
- **AdminServ:** `http://<host-ip>/`
|
||||||
@@ -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`.
|
> **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
|
## Dokumentation
|
||||||
|
|
||||||
Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md):
|
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
|
- [XAseco](docs/xaseco.md) – Server-Controller für Rekorde, Karma und Jukebox
|
||||||
- [Ports](docs/ports.md) – Freigegebene Ports und deren Verwendung
|
- [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)
|
📝 **Blog:** [www.cleveradmin.de](https://www.cleveradmin.de)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ else
|
|||||||
echo "==> PHP-Debug-Modus deaktiviert"
|
echo "==> PHP-Debug-Modus deaktiviert"
|
||||||
cat > "$PHP_INI_DIR/99-adminserv-debug.ini" <<EOF
|
cat > "$PHP_INI_DIR/99-adminserv-debug.ini" <<EOF
|
||||||
display_errors = Off
|
display_errors = Off
|
||||||
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING & ~E_NOTICE
|
||||||
log_errors = On
|
log_errors = On
|
||||||
error_log = /var/log/php_errors.log
|
error_log = /var/log/php_errors.log
|
||||||
EOF
|
EOF
|
||||||
@@ -38,7 +38,7 @@ DEFAULT_CONTROLPANEL="/opt/tmserver/default-controlpanel"
|
|||||||
|
|
||||||
if [ ! -f "$ADMINSERV_DIR/index.php" ]; then
|
if [ ! -f "$ADMINSERV_DIR/index.php" ]; then
|
||||||
echo "==> Erster Start erkannt: Kopiere AdminServ-Dateien ins Volume..."
|
echo "==> 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 -R 777 "$ADMINSERV_DIR/logs/"
|
||||||
chmod 666 "$ADMINSERV_DIR/config/adminlevel.cfg.php"
|
chmod 666 "$ADMINSERV_DIR/config/adminlevel.cfg.php"
|
||||||
chmod 666 "$ADMINSERV_DIR/config/servers.cfg.php"
|
chmod 666 "$ADMINSERV_DIR/config/servers.cfg.php"
|
||||||
@@ -185,6 +185,16 @@ EORCPSERV
|
|||||||
</admins>
|
</admins>
|
||||||
EORCPADM
|
EORCPADM
|
||||||
|
|
||||||
|
# settings.xml: Registrierung deaktivieren (SuperAdmin wird automatisch angelegt)
|
||||||
|
mkdir -p "$REMOTECP_DIR/xml/settings"
|
||||||
|
cat > "$REMOTECP_DIR/xml/settings/settings.xml" <<EORCPSET
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<settings>
|
||||||
|
<register>false</register>
|
||||||
|
</settings>
|
||||||
|
EORCPSET
|
||||||
|
echo " settings.xml: Registrierung deaktiviert."
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# RemoteCP: Datenbank-Initialisierung
|
# RemoteCP: Datenbank-Initialisierung
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -247,7 +257,7 @@ XASECO_ENABLED="${XASECO_ENABLED:-true}"
|
|||||||
if [ "$XASECO_ENABLED" = "true" ]; then
|
if [ "$XASECO_ENABLED" = "true" ]; then
|
||||||
if [ ! -f "$XASECO_DIR/aseco.php" ]; then
|
if [ ! -f "$XASECO_DIR/aseco.php" ]; then
|
||||||
echo "==> Erster Start erkannt: Kopiere XAseco-Dateien ins Volume..."
|
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}"
|
XMLRPC_PORT="${SERVER_XMLRPC_PORT:-5000}"
|
||||||
XASECO_ADMIN="${XASECO_MASTERADMIN_LOGIN:-}"
|
XASECO_ADMIN="${XASECO_MASTERADMIN_LOGIN:-}"
|
||||||
@@ -353,10 +363,27 @@ if [ "$XASECO_ENABLED" = "true" ]; then
|
|||||||
fi
|
fi
|
||||||
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"
|
echo "Starting apache server"
|
||||||
service apache2 start
|
service apache2 start
|
||||||
|
|
||||||
CONFIG="/opt/tmserver/GameData/Config/dedicated_cfg.txt"
|
CONFIG="/opt/tmserver/GameData/Config/dedicated_cfg.txt"
|
||||||
|
GAME_SETTINGS="/opt/tmserver/GameData/Tracks/MatchSettings/custom_game_settings.txt"
|
||||||
GAMEDATA_DIR="/opt/tmserver/GameData"
|
GAMEDATA_DIR="/opt/tmserver/GameData"
|
||||||
DEFAULT_GAMEDATA="/opt/tmserver/default-gamedata"
|
DEFAULT_GAMEDATA="/opt/tmserver/default-gamedata"
|
||||||
|
|
||||||
@@ -375,16 +402,20 @@ FORCE_CONFIG_UPDATE="${FORCE_CONFIG_UPDATE:-false}"
|
|||||||
|
|
||||||
if [ ! -f "$CONFIG" ]; then
|
if [ ! -f "$CONFIG" ]; then
|
||||||
echo "==> Erster Start erkannt: Kopiere Default-GameData ins Volume..."
|
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/"
|
chmod -R 777 "$GAMEDATA_DIR/Config/"
|
||||||
mkdir -p "$GAMEDATA_DIR/Config/AdminServ/ServerOptions"
|
mkdir -p "$GAMEDATA_DIR/Config/AdminServ/ServerOptions"
|
||||||
chown -R www-data:www-data "$GAMEDATA_DIR/Config/AdminServ"
|
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
|
APPLY_ENV=true
|
||||||
elif [ "$FORCE_CONFIG_UPDATE" = "true" ]; then
|
elif [ "$FORCE_CONFIG_UPDATE" = "true" ]; then
|
||||||
echo "==> FORCE_CONFIG_UPDATE ist aktiv: Umgebungsvariablen werden erneut angewendet..."
|
echo "==> FORCE_CONFIG_UPDATE ist aktiv: Umgebungsvariablen werden erneut angewendet..."
|
||||||
echo " ACHTUNG: Manuelle Aenderungen an den betroffenen Feldern werden ueberschrieben!"
|
echo " ACHTUNG: Manuelle Aenderungen an den betroffenen Feldern werden ueberschrieben!"
|
||||||
# Template neu kopieren, damit alle Platzhalter vorhanden sind
|
# Template neu kopieren, damit alle Platzhalter vorhanden sind
|
||||||
cp "$DEFAULT_GAMEDATA/Config/dedicated_cfg.txt" "$CONFIG"
|
cp "$DEFAULT_GAMEDATA/Config/dedicated_cfg.txt" "$CONFIG"
|
||||||
|
cp "$DEFAULT_GAMEDATA/Tracks/MatchSettings/custom_game_settings.txt" "$GAME_SETTINGS"
|
||||||
APPLY_ENV=true
|
APPLY_ENV=true
|
||||||
else
|
else
|
||||||
echo "==> Vorhandene Konfiguration gefunden. Umgebungsvariablen werden NICHT angewendet."
|
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_MAX_SPECTATORS%%|${SERVER_MAX_SPECTATORS}|g" "$CONFIG"
|
||||||
sed -i "s|%%SERVER_SPEC_PASSWORD%%|${SERVER_SPEC_PASSWORD}|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_MODE%%|${SERVER_LADDER_MODE}|g" "$CONFIG"
|
||||||
|
sed -i "s|%%SERVER_LADDER_LIMIT_MAX%%|${SERVER_LADDER_LIMIT_MAX:-60000}|g" "$CONFIG"
|
||||||
|
|
||||||
# Netzwerk
|
# Netzwerk
|
||||||
sed -i "s|%%SERVER_PORT%%|${SERVER_PORT}|g" "$CONFIG"
|
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_UPLOAD_RATE%%|${SERVER_UPLOAD_RATE}|g" "$CONFIG"
|
||||||
sed -i "s|%%SERVER_DOWNLOAD_RATE%%|${SERVER_DOWNLOAD_RATE}|g" "$CONFIG"
|
sed -i "s|%%SERVER_DOWNLOAD_RATE%%|${SERVER_DOWNLOAD_RATE}|g" "$CONFIG"
|
||||||
|
|
||||||
|
# Spieleinstellungen (MatchSettings)
|
||||||
|
sed -i "s|<allwarmupduration>[^<]*</allwarmupduration>|<allwarmupduration>${ALLWARMUPDURATION:-0}</allwarmupduration>|" "$GAME_SETTINGS"
|
||||||
|
|
||||||
echo "Platzhalter erfolgreich ersetzt."
|
echo "Platzhalter erfolgreich ersetzt."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<game_mode>1</game_mode>
|
<game_mode>1</game_mode>
|
||||||
<chat_time>10000</chat_time>
|
<chat_time>10000</chat_time>
|
||||||
<finishtimeout>1</finishtimeout>
|
<finishtimeout>1</finishtimeout>
|
||||||
<allwarmupduration>1</allwarmupduration>
|
<allwarmupduration>0</allwarmupduration>
|
||||||
<disablerespawn>0</disablerespawn>
|
<disablerespawn>0</disablerespawn>
|
||||||
<forceshowallopponents>0</forceshowallopponents>
|
<forceshowallopponents>0</forceshowallopponents>
|
||||||
<rounds_pointslimit>30</rounds_pointslimit>
|
<rounds_pointslimit>30</rounds_pointslimit>
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<ladder_mode>%%SERVER_LADDER_MODE%%</ladder_mode> <!-- value between 'inactive', 'forced' (or '0', '1') -->
|
<ladder_mode>%%SERVER_LADDER_MODE%%</ladder_mode> <!-- value between 'inactive', 'forced' (or '0', '1') -->
|
||||||
<ladder_serverlimit_min>0</ladder_serverlimit_min> <!-- Those values will be clamped to the limits authorized on http://official.trackmania.com/tmf-ladderserver/ -->
|
<ladder_serverlimit_min>0</ladder_serverlimit_min> <!-- Those values will be clamped to the limits authorized on http://official.trackmania.com/tmf-ladderserver/ -->
|
||||||
<ladder_serverlimit_max>50000</ladder_serverlimit_max>
|
<ladder_serverlimit_max>%%SERVER_LADDER_LIMIT_MAX%%</ladder_serverlimit_max>
|
||||||
|
|
||||||
<enable_p2p_upload>True</enable_p2p_upload>
|
<enable_p2p_upload>True</enable_p2p_upload>
|
||||||
<enable_p2p_download>True</enable_p2p_download>
|
<enable_p2p_download>True</enable_p2p_download>
|
||||||
|
|||||||
135
assets/config/remotecp/plugins/CustomPoints/index.php
Normal file
135
assets/config/remotecp/plugins/CustomPoints/index.php
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* remoteCP 4
|
||||||
|
* ütf-8 release
|
||||||
|
*
|
||||||
|
* @package remoteCP
|
||||||
|
* @author hal.sascha
|
||||||
|
* @copyright (c) 2006-2009
|
||||||
|
* @version 4.0.3.5
|
||||||
|
*
|
||||||
|
* Patched by tmserver-docker:
|
||||||
|
* - Bare-constant-Zugriffe (pt_custom, pt_points, ...) durch
|
||||||
|
* defined()-Pruefungen ersetzt, um PHP 7.2+ Warnungen zu vermeiden.
|
||||||
|
*/
|
||||||
|
class CustomPoints extends rcp_plugin
|
||||||
|
{
|
||||||
|
public $display = 'side';
|
||||||
|
public $title = 'Points';
|
||||||
|
public $author = 'hal.ko.sascha';
|
||||||
|
public $version = '4.0.3.5';
|
||||||
|
public $nservstatus = array(2,3,4,5);
|
||||||
|
public $vpermissions = array('editgamesettings');
|
||||||
|
public $apermissions = array(
|
||||||
|
'setPoints' => '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 "<form action='ajax.php' method='post' id='custompoints' name='custompoints' class='postcmd' rel='{$this->display}area'>";
|
||||||
|
echo "<fieldset>";
|
||||||
|
|
||||||
|
echo "<div class='legend'>" . (defined('pt_custom') ? pt_custom : 'Custom Points') . "</div>";
|
||||||
|
|
||||||
|
echo "<div class='f-row'>
|
||||||
|
<label for='points'>" . (defined('pt_points') ? pt_points : 'Points') . "</label>
|
||||||
|
<div class='f-field'>
|
||||||
|
<input type='text' name='points' id='points' value='" . implode(',', $CustomPoints) . "' />
|
||||||
|
<div class='small'>" . (defined('pt_commasep') ? pt_commasep : 'Comma separated') . "</div>
|
||||||
|
</div>";
|
||||||
|
echo "</div>";
|
||||||
|
|
||||||
|
echo "</fieldset>";
|
||||||
|
|
||||||
|
echo "<input type='hidden' name='plugin' value='{$this->id}' />";
|
||||||
|
echo "<input type='hidden' name='action' value='setPoints' />";
|
||||||
|
echo "<button type='submit' title='" . (defined('ct_submit') ? ct_submit : 'Submit') . "' class='wide'>" . (defined('ct_submit') ? ct_submit : 'Submit') . "</button>";
|
||||||
|
echo "</form>";
|
||||||
|
|
||||||
|
echo "<form action='ajax.php' method='post' id='custompointspreset' name='custompointspreset' class='postcmd' rel='{$this->display}area'>";
|
||||||
|
echo "<fieldset>";
|
||||||
|
|
||||||
|
echo "<div class='legend'>" . (defined('pt_presets') ? pt_presets : 'Presets') . "</div>";
|
||||||
|
|
||||||
|
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 "<div class='f-row'>
|
||||||
|
<label>{$name}</label>
|
||||||
|
<div class='f-field'>";
|
||||||
|
|
||||||
|
echo "<input style='width:25px;' type='radio' name='preset' value='{$points}' /> ";
|
||||||
|
|
||||||
|
if (strlen($points) > 25) {
|
||||||
|
echo substr($points, 0, 25) . "...";
|
||||||
|
} else {
|
||||||
|
echo $points;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</div>";
|
||||||
|
echo "</div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</fieldset>";
|
||||||
|
|
||||||
|
echo "<input type='hidden' name='plugin' value='{$this->id}' />";
|
||||||
|
echo "<input type='hidden' name='action' value='setPointsPreset' />";
|
||||||
|
echo "<button type='submit' title='" . (defined('ct_submit') ? ct_submit : 'Submit') . "' class='wide'>" . (defined('ct_submit') ? ct_submit : 'Submit') . "</button>";
|
||||||
|
echo "</form>";
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
tmserver:
|
tmserver:
|
||||||
image: git.techniverse.net/scriptos/trackmania-server:1.0.0
|
image: git.techniverse.net/scriptos/trackmania-server:1.1.0
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
container_name: tmserver
|
container_name: tmserver
|
||||||
@@ -32,9 +32,14 @@ services:
|
|||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
|
MYSQL_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
|
||||||
|
# RemoteCP-Datenbank (via MariaDB-Init)
|
||||||
MYSQL_DATABASE: ${REMOTECP_DB_NAME:-remotecp}
|
MYSQL_DATABASE: ${REMOTECP_DB_NAME:-remotecp}
|
||||||
MYSQL_USER: ${REMOTECP_DB_USER:-remotecp}
|
MYSQL_USER: ${REMOTECP_DB_USER:-remotecp}
|
||||||
MYSQL_PASSWORD: ${REMOTECP_DB_PASSWORD}
|
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:
|
volumes:
|
||||||
- ./data/mariadb:/var/lib/mysql
|
- ./data/mariadb:/var/lib/mysql
|
||||||
- ./assets/db/init-xaseco-db.sh:/docker-entrypoint-initdb.d/20-init-xaseco-db.sh:ro
|
- ./assets/db/init-xaseco-db.sh:/docker-entrypoint-initdb.d/20-init-xaseco-db.sh:ro
|
||||||
|
|||||||
@@ -16,3 +16,36 @@
|
|||||||
| [RemoteCP](remotecp.md) | Alternative Server-Verwaltungsoberfläche |
|
| [RemoteCP](remotecp.md) | Alternative Server-Verwaltungsoberfläche |
|
||||||
| [XAseco](xaseco.md) | Server-Controller für Rekorde, Karma und Jukebox |
|
| [XAseco](xaseco.md) | Server-Controller für Rekorde, Karma und Jukebox |
|
||||||
| [Ports](ports.md) | Freigegebene Ports und deren Verwendung |
|
| [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
|
||||||
|
```
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ docker run -d \
|
|||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-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.
|
> **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.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ docker run -d \
|
|||||||
-p 3450:3450/tcp \
|
-p 3450:3450/tcp \
|
||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-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.
|
> **Hinweis:** Port 5000 (XML-RPC) wird intern von AdminServ verwendet und muss in der Regel nicht nach außen freigegeben werden.
|
||||||
|
|||||||
@@ -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
|
- 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 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 `<register>false</register>` deaktiviert werden
|
- Die Registrierung neuer Benutzer wird beim ersten Start automatisch deaktiviert (`xml/settings/settings.xml` → `<register>false</register>`). Der SuperAdmin-Account wird automatisch aus `SERVER_SA_PASSWORD` angelegt
|
||||||
|
|||||||
@@ -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.
|
> **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
|
```bash
|
||||||
docker build -t tmserver:latest -t tmserver:1.0.0 .
|
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`.
|
Damit wird das Image mit zwei Tags erstellt: `tmserver:latest` und `tmserver:1.0.0`.
|
||||||
|
|
||||||
## 3. Server starten
|
Anschließend den Server starten:
|
||||||
|
|
||||||
### Mit Docker Compose (empfohlen)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Konfiguration erfolgt über die `.env`-Datei, die automatisch eingelesen wird.
|
|
||||||
|
|
||||||
### Internet-Modus (docker run)
|
### 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.
|
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/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-v ./data/xaseco:/opt/tmserver/xaseco \
|
||||||
--name tmserver tmserver:latest
|
--name tmserver git.techniverse.net/scriptos/trackmania-server:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### LAN-Modus (docker run)
|
### LAN-Modus (docker run)
|
||||||
@@ -68,10 +86,10 @@ docker run -d \
|
|||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-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 |
|
| Tool | URL | Beschreibung |
|
||||||
|------|-----|-------------|
|
|------|-----|-------------|
|
||||||
|
|||||||
@@ -56,5 +56,5 @@ docker run -d \
|
|||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-v ./data/xaseco:/opt/tmserver/xaseco \
|
||||||
--name tmserver tmserver:latest
|
--name tmserver git.techniverse.net/scriptos/trackmania-server:latest
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ nano .env
|
|||||||
| `SERVER_MAX_SPECTATORS` | Maximale Zuschaueranzahl | `32` |
|
| `SERVER_MAX_SPECTATORS` | Maximale Zuschaueranzahl | `32` |
|
||||||
| `SERVER_SPEC_PASSWORD` | Zuschauer-Passwort (leer = offen) | *(leer)* |
|
| `SERVER_SPEC_PASSWORD` | Zuschauer-Passwort (leer = offen) | *(leer)* |
|
||||||
| `SERVER_LADDER_MODE` | Ladder-Modus (`inactive` oder `forced`) | `forced` |
|
| `SERVER_LADDER_MODE` | Ladder-Modus (`inactive` oder `forced`) | `forced` |
|
||||||
|
| `SERVER_LADDER_LIMIT_MAX` | Oberes Ladder-Serverlimit (Punktegrenze) | `60000` |
|
||||||
|
|
||||||
## Netzwerk
|
## Netzwerk
|
||||||
|
|
||||||
@@ -66,6 +67,12 @@ nano .env
|
|||||||
| `SERVER_MODE` | Server-Modus (`internet` oder `lan`) | `internet` |
|
| `SERVER_MODE` | Server-Modus (`internet` oder `lan`) | `internet` |
|
||||||
| `FORCE_CONFIG_UPDATE` | Erzwingt erneutes Anwenden aller Umgebungsvariablen auf die Config | `false` |
|
| `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
|
||||||
|
|
||||||
RemoteCP verwendet die SuperAdmin-Zugangsdaten (`SERVER_SA_PASSWORD`) des TM-Servers für den Web-Login. Es werden keine separaten Login-Variablen benötigt.
|
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 |
|
| 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.
|
> **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.
|
> **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:
|
Passe die Werte in der `.env`-Datei an und starte mit:
|
||||||
|
|
||||||
```bash
|
```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
|
### docker run
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -137,7 +148,7 @@ docker run -d \
|
|||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-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:
|
Einzelne Werte können zusätzlich überschrieben werden:
|
||||||
@@ -154,5 +165,5 @@ docker run -d \
|
|||||||
-v ./data/gamedata:/opt/tmserver/GameData \
|
-v ./data/gamedata:/opt/tmserver/GameData \
|
||||||
-v ./data/controlpanel:/var/www/html \
|
-v ./data/controlpanel:/var/www/html \
|
||||||
-v ./data/xaseco:/opt/tmserver/xaseco \
|
-v ./data/xaseco:/opt/tmserver/xaseco \
|
||||||
--name tmserver tmserver:latest
|
--name tmserver git.techniverse.net/scriptos/trackmania-server:latest
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user