feat(docker): add self-hosted all-in-one container setup
- Add Dockerfile (multi-stage build, unprivileged user, healthcheck), docker-compose.yml and .dockerignore - Server now serves static dist/ frontend and WebSocket relay on a single port (PORT, default 3001) with path-traversal protection, immutable asset caching and SPA fallback - Client connects via same origin in production; dedicated ws port is only used for vite dev/preview - Document Docker usage, env vars and manual production mode in README
This commit is contained in:
parent
c4347f8420
commit
b506ffad55
6 changed files with 235 additions and 31 deletions
39
README.md
39
README.md
|
|
@ -25,6 +25,45 @@ Enthält **Solo-Kampagne**, **2-Spieler-Coop** und **1v1-Duell** (Online/Lokal p
|
|||
|
||||
---
|
||||
|
||||
## 🐳 Docker
|
||||
|
||||
Das Spiel gibt es als **All-in-One-Container**: Frontend (statisch) und Multiplayer-Server teilen sich **einen Port** – ideal für Self-Hosting.
|
||||
|
||||
```bash
|
||||
# Image bauen (Multi-Stage-Build: Build → schlankes Runtime-Image)
|
||||
docker build -t trxtd:latest .
|
||||
|
||||
# Container starten
|
||||
docker run -d --name trxtd -p 3001:3001 trxtd:latest
|
||||
|
||||
# Oder mit Docker Compose (empfohlen)
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Danach läuft das komplette Spiel inkl. Online-Multiplayer unter **http://localhost:3001**.
|
||||
|
||||
**Enthaltene Härtung:**
|
||||
- Multi-Stage-Build (kein Build-Tooling im Runtime-Image)
|
||||
- Läuft als unprivilegierter Nutzer (`node`)
|
||||
- `HEALTHCHECK` über `/health`
|
||||
- `/assets/` mit immutablen Cache-Headern, SPA-Fallback für alle anderen Routen
|
||||
- WebSocket-Sicherheit: Payload-Limit (4 KB), Rate-Limiting (30 Aktionen/s), Schema-Validierung, Ping/Pong-Heartbeat
|
||||
|
||||
**Nützliche Umgebungsvariablen:**
|
||||
|
||||
| Variable | Default | Bedeutung |
|
||||
| --- | --- | --- |
|
||||
| `PORT` | `3001` | HTTP- und WebSocket-Port |
|
||||
| `DIST_DIR` | `./dist` | Ordner mit den statischen Dateien |
|
||||
|
||||
**Manuell ohne Docker im Produktionsmodus starten:**
|
||||
```bash
|
||||
npm run build
|
||||
npm run server # serves dist/ + ws auf :3001
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Spielmodi
|
||||
|
||||
### 1. Solo-Kampagne
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue