diff --git a/.env.example b/.env.example index 4f075dc..cb4c4e9 100644 --- a/.env.example +++ b/.env.example @@ -118,6 +118,12 @@ XASECO_DB_PASSWORD="4KpL8mWnR3xYvBq" # Server-Login und -Passwort werden automatisch aus SERVER_LOGIN / SERVER_LOGIN_PASSWORD übernommen. XASECO_DEDIMANIA_NATION=DEU +# XAseco-Healthcheck: Überwacht XAseco und startet es automatisch neu bei Absturz oder Verbindungsverlust. +XASECO_HEALTHCHECK=true + +# Prüfintervall des Healthchecks in Sekunden (Standard: 60) +XASECO_HEALTHCHECK_INTERVAL=60 + # --- IP-Watcher --- # Der IP-Watcher überwacht die ausgehende öffentliche IP des Containers und startet tmserver # automatisch neu, wenn sich die IP ändert – damit er sich beim Masterserver neu registriert. diff --git a/Dockerfile b/Dockerfile index b503965..3546af1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,7 +57,7 @@ RUN unzip /var/www/html/AdminServ_v2.1.1.zip -d /var/www/html \ && rm -f /var/www/html/AdminServ_v2.1.1.zip \ && rm -f /var/www/html/index.html \ && mkdir -p /var/www/html/logs \ - && chmod -R 777 /var/www/html/logs \ + && chmod 755 /var/www/html/logs \ && chmod 666 /var/www/html/config/adminlevel.cfg.php \ && chmod 666 /var/www/html/config/servers.cfg.php \ && chmod 666 /var/www/html/config/adminserv.cfg.php \ diff --git a/README.md b/README.md index 75a694f..22126df 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,9 @@ Die vollständige Dokumentation befindet sich im Ordner [`docs/`](docs/README.md - [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 +- [IP-Watcher](docs/ip-watcher.md) – Automatischer Neustart bei IP-Wechsel - [Ports](docs/ports.md) – Freigegebene Ports und deren Verwendung +- [Update](docs/update.md) – Bestehende Installation aktualisieren ## Danksagung diff --git a/assets/bin/RunTrackmaniaServer.sh b/assets/bin/RunTrackmaniaServer.sh index 29094fe..7c00c37 100644 --- a/assets/bin/RunTrackmaniaServer.sh +++ b/assets/bin/RunTrackmaniaServer.sh @@ -39,7 +39,7 @@ DEFAULT_CONTROLPANEL="/opt/tmserver/default-controlpanel" if [ ! -f "$ADMINSERV_DIR/index.php" ]; then echo "==> Erster Start erkannt: Kopiere AdminServ-Dateien ins Volume..." cp -a "$DEFAULT_CONTROLPANEL"/* "$ADMINSERV_DIR/" - chmod -R 777 "$ADMINSERV_DIR/logs/" + chmod 755 "$ADMINSERV_DIR/logs/" chmod 666 "$ADMINSERV_DIR/config/adminlevel.cfg.php" chmod 666 "$ADMINSERV_DIR/config/servers.cfg.php" chmod 666 "$ADMINSERV_DIR/config/adminserv.cfg.php" @@ -492,6 +492,25 @@ if [ -f "$ADMINSERV_CFG_VOL" ] && grep -q "0b28a5799a32c687dad2c5183718ceac" "$A echo " Die /config-Seite ist jetzt abgesichert." fi +# ============================================================ +# AdminServ: Logs-Verzeichnis-Berechtigungen korrigieren (fuer bestehende Volumes) +# ============================================================ +# In aelteren Versionen wurde /var/www/html/logs/ mit chmod 777 +# (world-writable) angelegt. logrotate verweigert die Rotation von +# Log-Dateien in world-writable Verzeichnissen aus Sicherheitsgruenden. +# Die korrekte Berechtigung ist 755: www-data (Owner) behaelt +# Schreibzugriff, anderen Nutzern wird Write entzogen. +# ============================================================ +ADMINSERV_LOGS_DIR="/var/www/html/logs" +if [ -d "$ADMINSERV_LOGS_DIR" ]; then + CURRENT_PERMS=$(stat -c '%a' "$ADMINSERV_LOGS_DIR") + if [ "$CURRENT_PERMS" != "755" ]; then + echo "==> Korrigiere Berechtigungen fuer AdminServ-Logs-Verzeichnis (${CURRENT_PERMS} -> 755)..." + chmod 755 "$ADMINSERV_LOGS_DIR" + echo " Berechtigungen erfolgreich korrigiert." + fi +fi + echo "Starting apache server" service apache2 start diff --git a/assets/bin/WatchPublicIP.sh b/assets/bin/WatchPublicIP.sh index 689dc27..26d8f8a 100644 --- a/assets/bin/WatchPublicIP.sh +++ b/assets/bin/WatchPublicIP.sh @@ -25,6 +25,8 @@ while true; do echo "[ip-watcher] Initiale öffentliche IP: ${CURRENT_IP}" fi LAST_IP="$CURRENT_IP" + else + echo "[ip-watcher] IP-Prüfung OK: ${CURRENT_IP} (unverändert). Nächste Prüfung in ${INTERVAL}s." fi sleep "$INTERVAL" diff --git a/assets/config/logrotate.conf b/assets/config/logrotate.conf index 7322f10..1487148 100644 --- a/assets/config/logrotate.conf +++ b/assets/config/logrotate.conf @@ -45,6 +45,7 @@ # AdminServ-Logs (liegen im persistenten Volume) /var/www/html/logs/*.log { + su www-data www-data size 10M rotate 5 missingok diff --git a/docker-compose.yml b/docker-compose.yml index dac882e..b94eb8a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: tmserver: - image: git.techniverse.net/scriptos/trackmania-server:1.3.1 + image: git.techniverse.net/scriptos/trackmania-server:1.3.2 build: context: . container_name: tmserver diff --git a/docs/README.md b/docs/README.md index 5bf8362..023b241 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,6 +17,7 @@ | [XAseco](xaseco.md) | Server-Controller für Rekorde, Karma und Jukebox | | [IP-Watcher](ip-watcher.md) | Automatischer Neustart bei IP-Wechsel | | [Ports](ports.md) | Freigegebene Ports und deren Verwendung | +| [Update](update.md) | Bestehende Installation aktualisieren | ## Projektstruktur @@ -50,7 +51,8 @@ ├── .gitea/ │ └── workflows/ │ └── docker-publish.yml # CI/CD: Docker Image Build & Push bei neuem Release-Tag -├── docs/ # Dokumentation +├── docs/ # Dokumentation (siehe Tabelle oben) +│ └── update.md # Update-Anleitung ├── docker-compose.yml # Docker Compose Konfiguration ├── Dockerfile # Docker Build-Definition ├── .dockerignore # Docker-Ignore-Regeln diff --git a/docs/update.md b/docs/update.md new file mode 100644 index 0000000..767cb42 --- /dev/null +++ b/docs/update.md @@ -0,0 +1,105 @@ +# Update-Anleitung + +Diese Anleitung beschreibt, wie du eine **bestehende Installation** auf den neuesten Stand bringst – ohne Daten zu verlieren und ohne alles neu aufsetzen zu müssen. + +> **Hinweis:** Alle persistenten Daten (Konfiguration, Tracks, Datenbanken, Logs) liegen im Ordner `./data/` und werden bei einem Update nicht berührt. + +--- + +## 1. Repository aktualisieren + +Wechsle in den Projektordner und lade die neuesten Änderungen: + +```bash +git pull +``` + +Damit werden aktualisierte Konfigurationsdateien, Skripte und Dokumentation aus dem Repository übernommen. + +--- + +## 2. Neue Umgebungsvariablen prüfen + +Mit neuen Versionen können neue Variablen in der `.env.example` hinzugekommen sein. Deine persönliche `.env`-Datei wird dabei **nicht überschrieben** – du musst neue Variablen manuell nachtragen. + +Vergleiche `.env.example` mit deiner `.env`, um fehlende Einträge zu finden: + +```bash +diff .env.example .env +``` + +Zeilen, die in `.env.example` vorhanden sind, aber nicht in deiner `.env`, erscheinen mit `<` am Anfang. Diese solltest du in deine `.env` übernehmen und die Werte anpassen. + +> **Tipp:** Neue Variablen haben in der Regel sinnvolle Standardwerte, die du oft einfach übernehmen kannst. Achte nur auf sicherheitsrelevante Werte wie Passwörter. + +--- + +## 3. Docker Image aktualisieren + +Lade das neueste Image aus der Registry: + +```bash +docker compose pull +``` + +--- + +## 4. Container neu starten + +Starte die Container mit dem neuen Image neu. Docker Compose erkennt automatisch, ob ein Rebuild nötig ist: + +```bash +docker compose up -d +``` + +> **Hinweis:** Wenn sich die `docker-compose.yml` geändert hat (z.B. neue Services oder geänderte Konfiguration), werden betroffene Container automatisch neu erstellt. Deine Daten in `./data/` bleiben dabei vollständig erhalten. + +--- + +## Zusammenfassung + +```bash +# Im Projektordner ausführen: +git pull +docker compose pull +docker compose up -d +``` + +Das war's – der Server läuft jetzt auf dem neuesten Stand. + +--- + +## Was passiert mit meinen Daten? + +| Ordner | Inhalt | Beim Update | +|--------|--------|-------------| +| `./data/gamedata/` | TM-Server-Daten, Konfiguration, Tracks | Bleibt erhalten | +| `./data/controlpanel/` | AdminServ- und RemoteCP-Daten | Bleibt erhalten | +| `./data/xaseco/` | XAseco-Konfiguration und Logs | Bleibt erhalten | +| `./data/mariadb/` | Datenbankdateien | Bleibt erhalten | +| `.env` | Deine Umgebungsvariablen | Wird nicht überschrieben | + +--- + +## Häufige Situationen + +### Neue Umgebungsvariable hat keinen Effekt + +Einige Variablen (z.B. `SERVER_SA_PASSWORD`) werden nur beim **ersten Start** in die `dedicated_cfg.txt` geschrieben. Falls du eine neue Variable nachträglich setzen möchtest, kannst du das erzwingen: + +```bash +# In der .env setzen: +FORCE_CONFIG_UPDATE=true +``` + +Dann Container neu starten. Danach unbedingt wieder auf `false` setzen, damit manuelle Änderungen erhalten bleiben. Weitere Details unter [Konfiguration](konfiguration.md). + +### Welches Image-Tag wird verwendet? + +In der `docker-compose.yml` ist das Image-Tag angegeben (z.B. `1.3.2` oder `latest`). Du kannst auf `latest` umstellen, um immer automatisch das neueste Image zu bekommen: + +```yaml +image: git.techniverse.net/scriptos/trackmania-server:latest +``` + +Alle verfügbaren Tags findest du in der [Container-Registry](https://git.techniverse.net/scriptos/-/packages/container/trackmania-server/).