Production ready: hardening, limits, docs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,7 @@ und Windows.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Ein **Lizenzschlüssel** von https://msco.mbm.wtf/keys (Login mit Steam, wie der FiveM-Keymaster).
|
||||
- Ein **Lizenzschlüssel** von https://msco.mbm.wtf/keys (Login mit Steam).
|
||||
Der Server prüft ihn beim Start und meldet sich danach regelmäßig beim Master für die Serverliste.
|
||||
- Ein My-Summer-Car-Spielstand als Startwelt.
|
||||
- Port **7777/TCP** im Router/Firewall freigegeben (sonst wird der Server nicht gelistet).
|
||||
@@ -122,11 +122,50 @@ Der Chat landet auch im Server-Log.
|
||||
|
||||
Beim Beitreten: Spielstand laden → Objekte erfassen → Weltzustand anwenden → an der letzten eigenen Position weiterspielen.
|
||||
|
||||
## Betrieb in Produktion
|
||||
|
||||
**Checkliste**
|
||||
- [ ] `LicenseKey` gesetzt, Server startet ohne Fehler (`docker logs msco-server`)
|
||||
- [ ] Nur Port **7777/TCP** nach außen offen; der Server braucht sonst nur ausgehend HTTPS zu `msco.mbm.wtf`
|
||||
- [ ] Log meldet keine Warnung „NOT reachable from the internet“ (sonst erscheint der Server nicht in der Liste)
|
||||
- [ ] Steam-Server (`RequireSteam: true`): `SteamWebApiKey` eintragen, damit Anmeldetickets wirklich bei Steam geprüft werden
|
||||
- [ ] Mindestens eine SteamID in `Admins`
|
||||
- [ ] Backups von `data/` eingerichtet (siehe unten)
|
||||
|
||||
**Neustarts:** Docker startet den Server nach einem Absturz neu (`restart: on-failure`). Bei Konfigurationsfehlern
|
||||
(kein/ungültiger Schlüssel, kein Spielstand) beendet er sich mit Code 1 und wird nach 3 Versuchen nicht mehr
|
||||
gestartet – dann ins Log schauen. `docker compose stop` / `systemctl stop` speichern vorher den Weltzustand.
|
||||
|
||||
**Logs:** werden von Docker auf 3 × 10 MB begrenzt. Chat, Beitritte, Kicks/Bans und Admin-Aktionen stehen darin.
|
||||
|
||||
**Backups:** Alles Wichtige liegt in `data/` (`server.json`, `save/`, `world.json`). Den Server dafür nicht
|
||||
anhalten – der Weltzustand wird atomar geschrieben. Beispiel (täglich per cron):
|
||||
|
||||
```bash
|
||||
tar czf /backup/msco-$(date +%F).tar.gz -C /pfad/zu/MSCO-Dedicated-Server data
|
||||
```
|
||||
|
||||
**Updates:** Server und Mod müssen dieselbe Version haben. Nach einem neuen Release:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Spieler mit einer anderen Mod-Version bekommen beim Verbinden eine Warnung.
|
||||
|
||||
**Weltzustand zurücksetzen:** Wird `world.json` mit der Zeit sehr groß oder macht Probleme beim Beitreten,
|
||||
einen aktuellen Spielstand nach `data/save/` legen und `msco reset-world` ausführen.
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Die Adresse des Masters (`https://msco.mbm.wtf`) ist fest eingebaut, damit niemand die Schlüsselprüfung mit
|
||||
einem eigenen Master umgehen kann. Nur Debug-Builds akzeptieren `MSCO_MASTER_URL`.
|
||||
- `data/` enthält Lizenzschlüssel und API-Keys – nicht veröffentlichen (steht in `.gitignore`).
|
||||
- Der Container läuft nicht als root. Spielerdaten (Nachrichten, Objektzustände) werden in der Größe begrenzt,
|
||||
unbekannte oder zu große Nachrichten verworfen.
|
||||
- Gebannte Spieler werden über ihre (bei Steam geprüfte) SteamID erkannt. Auf Non-Steam-Servern gibt es keine
|
||||
verlässliche Identität – dort sind Bans nur über den Namen möglich.
|
||||
|
||||
## Lizenz
|
||||
|
||||
|
||||
Reference in New Issue
Block a user