- Replace socket.io relay with Colyseus 0.15 authoritative server - GameRoom with GameState schema (players, units, resources) - Pure TS services: CombatResolver, EconomyService, PathfindingService, UnitManager - POST /api/create-room → 4-char invite code - React/MUI LobbyScreen: Create (shows code + START GAME) / Join by code - ColyseusClient: joinOrCreate/join by room type = invite code - Nginx: static assets direct, all else proxied to Colyseus (WS upgrade) - Content-hashed JS bundles for Cloudflare cache-busting - 1-player lobbies: START GAME button bypasses 2-player wait
33 lines
797 B
YAML
33 lines
797 B
YAML
version: '3.8'
|
|
|
|
services:
|
|
backend:
|
|
build:
|
|
context: .
|
|
target: backend
|
|
image: restitution-backend:latest
|
|
networks:
|
|
- hermes-net
|
|
expose:
|
|
- "8081"
|
|
|
|
frontend:
|
|
build:
|
|
context: .
|
|
target: frontend
|
|
image: restitution-frontend:latest
|
|
networks:
|
|
- hermes-net
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=hermes-net"
|
|
- "traefik.http.routers.restitution.rule=Host(`restitution.damascusfront.net`)"
|
|
- "traefik.http.routers.restitution.entrypoints=websecure"
|
|
- "traefik.http.routers.restitution.tls=true"
|
|
- "traefik.http.routers.restitution.tls.certresolver=cloudflare"
|
|
- "traefik.http.services.restitution.loadbalancer.server.port=80"
|
|
|
|
networks:
|
|
hermes-net:
|
|
external: true
|