@babylonjs-toolkit/server 0.0.0-stage → 9.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CUSTOM.md +1690 -0
- package/DEPLOY.md +2012 -0
- package/README.md +1081 -2
- package/lib/AbuseLimits.d.ts +64 -0
- package/lib/AbuseLimits.js +121 -0
- package/lib/Authentication.d.ts +86 -0
- package/lib/Authentication.js +272 -0
- package/lib/BootSessionOwner.d.ts +86 -0
- package/lib/BootSessionOwner.js +116 -0
- package/lib/ColyseusLoggerAdapter.d.ts +32 -0
- package/lib/ColyseusLoggerAdapter.js +73 -0
- package/lib/DedicatedSceneRegistry.d.ts +52 -0
- package/lib/DedicatedSceneRegistry.js +74 -0
- package/lib/DedicatedSession.d.ts +152 -0
- package/lib/DedicatedSession.js +173 -0
- package/lib/DualTransport.d.ts +112 -0
- package/lib/DualTransport.js +197 -0
- package/lib/GameServer.d.ts +64 -0
- package/lib/GameServer.js +647 -0
- package/lib/GameServerConfig.d.ts +387 -0
- package/lib/GameServerConfig.js +1059 -0
- package/lib/GameServerLobbyRoom.d.ts +33 -0
- package/lib/GameServerLobbyRoom.js +56 -0
- package/lib/GameServerLogger.d.ts +111 -0
- package/lib/GameServerLogger.js +190 -0
- package/lib/GameServerMetrics.d.ts +158 -0
- package/lib/GameServerMetrics.js +276 -0
- package/lib/GameServerState.d.ts +164 -0
- package/lib/GameServerState.js +26 -0
- package/lib/HeadlessRuntime.d.ts +316 -0
- package/lib/HeadlessRuntime.js +380 -0
- package/lib/JoinGate.d.ts +34 -0
- package/lib/JoinGate.js +221 -0
- package/lib/NetworkAddresses.d.ts +33 -0
- package/lib/NetworkAddresses.js +90 -0
- package/lib/PlayerTokens.d.ts +17 -0
- package/lib/PlayerTokens.js +24 -0
- package/lib/RoomServerTransport.d.ts +73 -0
- package/lib/RoomServerTransport.js +90 -0
- package/lib/ServerEndpoints.d.ts +133 -0
- package/lib/ServerEndpoints.js +247 -0
- package/lib/ServerInit.d.ts +28 -0
- package/lib/ServerInit.js +113 -0
- package/lib/SessionRoom.d.ts +391 -0
- package/lib/SessionRoom.js +930 -0
- package/lib/TlsCertificates.d.ts +35 -0
- package/lib/TlsCertificates.js +130 -0
- package/lib/admin/AccountRoutes.d.ts +8 -0
- package/lib/admin/AccountRoutes.js +502 -0
- package/lib/admin/AdminAccounts.d.ts +329 -0
- package/lib/admin/AdminAccounts.js +607 -0
- package/lib/admin/AdminApiRouter.d.ts +202 -0
- package/lib/admin/AdminApiRouter.js +465 -0
- package/lib/admin/AdminApiTypes.d.ts +1782 -0
- package/lib/admin/AdminApiTypes.js +4 -0
- package/lib/admin/AdminAudit.d.ts +113 -0
- package/lib/admin/AdminAudit.js +266 -0
- package/lib/admin/AdminCli.d.ts +7 -0
- package/lib/admin/AdminCli.js +351 -0
- package/lib/admin/AdminClock.d.ts +51 -0
- package/lib/admin/AdminClock.js +10 -0
- package/lib/admin/AdminConsole.d.ts +39 -0
- package/lib/admin/AdminConsole.js +325 -0
- package/lib/admin/AdminConstants.d.ts +147 -0
- package/lib/admin/AdminConstants.js +167 -0
- package/lib/admin/AdminCrypto.d.ts +19 -0
- package/lib/admin/AdminCrypto.js +29 -0
- package/lib/admin/AdminExtensionsHost.d.ts +176 -0
- package/lib/admin/AdminExtensionsHost.js +307 -0
- package/lib/admin/AdminPasswords.d.ts +33 -0
- package/lib/admin/AdminPasswords.js +92 -0
- package/lib/admin/AdminPermissions.d.ts +28 -0
- package/lib/admin/AdminPermissions.js +74 -0
- package/lib/admin/AdminRecords.d.ts +196 -0
- package/lib/admin/AdminRecords.js +3 -0
- package/lib/admin/AdminRequestBodies.d.ts +47 -0
- package/lib/admin/AdminRequestBodies.js +84 -0
- package/lib/admin/AdminRequestGate.d.ts +38 -0
- package/lib/admin/AdminRequestGate.js +59 -0
- package/lib/admin/AdminResponses.d.ts +103 -0
- package/lib/admin/AdminResponses.js +164 -0
- package/lib/admin/AdminServices.d.ts +99 -0
- package/lib/admin/AdminServices.js +4 -0
- package/lib/admin/AdminStaticFiles.d.ts +29 -0
- package/lib/admin/AdminStaticFiles.js +97 -0
- package/lib/admin/AdminStore.d.ts +152 -0
- package/lib/admin/AdminStore.js +46 -0
- package/lib/admin/AlertChannels.d.ts +43 -0
- package/lib/admin/AlertChannels.js +120 -0
- package/lib/admin/AlertEngine.d.ts +231 -0
- package/lib/admin/AlertEngine.js +681 -0
- package/lib/admin/AlertRoutes.d.ts +8 -0
- package/lib/admin/AlertRoutes.js +180 -0
- package/lib/admin/ApiKeyRoutes.d.ts +8 -0
- package/lib/admin/ApiKeyRoutes.js +53 -0
- package/lib/admin/ApiKeys.d.ts +63 -0
- package/lib/admin/ApiKeys.js +167 -0
- package/lib/admin/AuditRoutes.d.ts +8 -0
- package/lib/admin/AuditRoutes.js +106 -0
- package/lib/admin/AuthToolRoutes.d.ts +13 -0
- package/lib/admin/AuthToolRoutes.js +164 -0
- package/lib/admin/BanList.d.ts +87 -0
- package/lib/admin/BanList.js +152 -0
- package/lib/admin/CborDecoder.d.ts +18 -0
- package/lib/admin/CborDecoder.js +201 -0
- package/lib/admin/ColyseusCloudClient.d.ts +313 -0
- package/lib/admin/ColyseusCloudClient.js +272 -0
- package/lib/admin/ColyseusCloudRoutes.d.ts +8 -0
- package/lib/admin/ColyseusCloudRoutes.js +91 -0
- package/lib/admin/ColyseusCloudService.d.ts +180 -0
- package/lib/admin/ColyseusCloudService.js +476 -0
- package/lib/admin/ColyseusCloudSettings.d.ts +16 -0
- package/lib/admin/ColyseusCloudSettings.js +29 -0
- package/lib/admin/ColyseusCloudViews.d.ts +105 -0
- package/lib/admin/ColyseusCloudViews.js +371 -0
- package/lib/admin/CommonPasswords.d.ts +6 -0
- package/lib/admin/CommonPasswords.js +19 -0
- package/lib/admin/ConfigOverrides.d.ts +174 -0
- package/lib/admin/ConfigOverrides.js +406 -0
- package/lib/admin/ConfigRoutes.d.ts +8 -0
- package/lib/admin/ConfigRoutes.js +91 -0
- package/lib/admin/ConsoleSessions.d.ts +112 -0
- package/lib/admin/ConsoleSessions.js +201 -0
- package/lib/admin/DedicatedRoutes.d.ts +21 -0
- package/lib/admin/DedicatedRoutes.js +254 -0
- package/lib/admin/ExtensionRoutes.d.ts +8 -0
- package/lib/admin/ExtensionRoutes.js +145 -0
- package/lib/admin/FileAdminStore.d.ts +157 -0
- package/lib/admin/FileAdminStore.js +349 -0
- package/lib/admin/FleetDirectory.d.ts +323 -0
- package/lib/admin/FleetDirectory.js +489 -0
- package/lib/admin/FleetLeader.d.ts +43 -0
- package/lib/admin/FleetLeader.js +89 -0
- package/lib/admin/FleetRoutes.d.ts +55 -0
- package/lib/admin/FleetRoutes.js +465 -0
- package/lib/admin/HealthWarnings.d.ts +10 -0
- package/lib/admin/HealthWarnings.js +95 -0
- package/lib/admin/LeaderboardRoutes.d.ts +8 -0
- package/lib/admin/LeaderboardRoutes.js +569 -0
- package/lib/admin/LogBuffer.d.ts +60 -0
- package/lib/admin/LogBuffer.js +92 -0
- package/lib/admin/LogRedaction.d.ts +15 -0
- package/lib/admin/LogRedaction.js +72 -0
- package/lib/admin/LogRoutes.d.ts +45 -0
- package/lib/admin/LogRoutes.js +307 -0
- package/lib/admin/MaintenanceMode.d.ts +41 -0
- package/lib/admin/MaintenanceMode.js +74 -0
- package/lib/admin/MaintenanceWindows.d.ts +91 -0
- package/lib/admin/MaintenanceWindows.js +207 -0
- package/lib/admin/MetricsRoutes.d.ts +8 -0
- package/lib/admin/MetricsRoutes.js +209 -0
- package/lib/admin/MetricsSampler.d.ts +124 -0
- package/lib/admin/MetricsSampler.js +211 -0
- package/lib/admin/OneTimeCodes.d.ts +60 -0
- package/lib/admin/OneTimeCodes.js +162 -0
- package/lib/admin/OpenIdConnect.d.ts +146 -0
- package/lib/admin/OpenIdConnect.js +335 -0
- package/lib/admin/Passkeys.d.ts +130 -0
- package/lib/admin/Passkeys.js +432 -0
- package/lib/admin/PlayerRoutes.d.ts +20 -0
- package/lib/admin/PlayerRoutes.js +676 -0
- package/lib/admin/RedisAdminStore.d.ts +114 -0
- package/lib/admin/RedisAdminStore.js +258 -0
- package/lib/admin/RolloutCoordinator.d.ts +99 -0
- package/lib/admin/RolloutCoordinator.js +321 -0
- package/lib/admin/ServerEvents.d.ts +57 -0
- package/lib/admin/ServerEvents.js +89 -0
- package/lib/admin/SessionRoutes.d.ts +113 -0
- package/lib/admin/SessionRoutes.js +386 -0
- package/lib/admin/UserRoutes.d.ts +8 -0
- package/lib/admin/UserRoutes.js +214 -0
- package/lib/cli.d.ts +2 -0
- package/lib/cli.js +221 -0
- package/lib/console/assets/index-CI5N7c-T.js +21 -0
- package/lib/console/assets/index-DPitvzLp.css +1 -0
- package/lib/console/favicon.svg +1 -0
- package/lib/console/index.html +16 -0
- package/lib/discord/DiscordOAuth.d.ts +57 -0
- package/lib/discord/DiscordOAuth.js +127 -0
- package/lib/discord/DiscordSessions.d.ts +79 -0
- package/lib/discord/DiscordSessions.js +135 -0
- package/lib/discord/DiscordSignInConstants.d.ts +54 -0
- package/lib/discord/DiscordSignInConstants.js +55 -0
- package/lib/discord/DiscordSignInRoutes.d.ts +51 -0
- package/lib/discord/DiscordSignInRoutes.js +359 -0
- package/lib/index.d.ts +24 -0
- package/lib/index.js +18 -0
- package/lib/leaderboards/FileLeaderboardRankStore.d.ts +293 -0
- package/lib/leaderboards/FileLeaderboardRankStore.js +808 -0
- package/lib/leaderboards/LeaderboardConstants.d.ts +63 -0
- package/lib/leaderboards/LeaderboardConstants.js +70 -0
- package/lib/leaderboards/LeaderboardError.d.ts +15 -0
- package/lib/leaderboards/LeaderboardError.js +20 -0
- package/lib/leaderboards/LeaderboardIdentity.d.ts +44 -0
- package/lib/leaderboards/LeaderboardIdentity.js +72 -0
- package/lib/leaderboards/LeaderboardPublicApi.d.ts +17 -0
- package/lib/leaderboards/LeaderboardPublicApi.js +389 -0
- package/lib/leaderboards/LeaderboardRankStore.d.ts +296 -0
- package/lib/leaderboards/LeaderboardRankStore.js +18 -0
- package/lib/leaderboards/LeaderboardRules.d.ts +122 -0
- package/lib/leaderboards/LeaderboardRules.js +472 -0
- package/lib/leaderboards/LeaderboardScheduler.d.ts +43 -0
- package/lib/leaderboards/LeaderboardScheduler.js +103 -0
- package/lib/leaderboards/LeaderboardService.d.ts +669 -0
- package/lib/leaderboards/LeaderboardService.js +1667 -0
- package/lib/leaderboards/LeaderboardTransfer.d.ts +35 -0
- package/lib/leaderboards/LeaderboardTransfer.js +580 -0
- package/lib/leaderboards/RedisLeaderboardRankStore.d.ts +282 -0
- package/lib/leaderboards/RedisLeaderboardRankStore.js +691 -0
- package/package.json +64 -4
- package/templates/init/Caddyfile +6 -0
- package/templates/init/DEPLOY.md +233 -0
- package/templates/init/Dockerfile +12 -0
- package/templates/init/app.json +21 -0
- package/templates/init/aws/README.md +118 -0
- package/templates/init/aws/ecs-fargate-alb.yml +207 -0
- package/templates/init/aws/ecs-fargate-nlb-quic.yml +210 -0
- package/templates/init/babylon-game-server.config.mjs +158 -0
- package/templates/init/colyseus-cloud/README.md +133 -0
- package/templates/init/colyseus-cloud/babylon-game-server.config.mjs +36 -0
- package/templates/init/colyseus-cloud/ecosystem.config.cjs +35 -0
- package/templates/init/colyseus-cloud/gitignore +6 -0
- package/templates/init/colyseus-cloud/package.json +15 -0
- package/templates/init/digitalocean-app.yaml +30 -0
- package/templates/init/docker-compose.full.yml +45 -0
- package/templates/init/docker-compose.websocket.yml +41 -0
- package/templates/init/fly.toml +56 -0
- package/templates/init/heroku.yml +11 -0
- package/templates/init/kubernetes/deployment.yaml +71 -0
- package/templates/init/kubernetes/redis.yaml +73 -0
- package/templates/init/kubernetes/service.yaml +24 -0
- package/templates/init/monitoring/grafana-dashboard.json +539 -0
- package/templates/init/monitoring/prometheus-alerts.yml +51 -0
- package/templates/init/monitoring/prometheus-scrape.yml +17 -0
- package/templates/init/railway.json +13 -0
- package/templates/init/render.yaml +19 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Babylon Game Server {{version}} behind Caddy: WebSocket (wss://) with HTTPS at Caddy.
|
|
2
|
+
# TLS: edge (Caddy gets the certificate for CADDY_SITE)
|
|
3
|
+
# UDP: not supported on this recipe (Caddy proxies TCP only; use docker-compose.full.yml for HTTP/3)
|
|
4
|
+
# Auth: set GAME_SERVER_AUTH_* to enable
|
|
5
|
+
#
|
|
6
|
+
# CADDY_SITE=game.example.com docker compose -f docker-compose.websocket.yml up -d
|
|
7
|
+
# Players then use wss://game.example.com. Local check without a domain:
|
|
8
|
+
# CADDY_SITE=:8080 docker compose -f docker-compose.websocket.yml up -d
|
|
9
|
+
# curl -s http://localhost:8080/game-server/health
|
|
10
|
+
services:
|
|
11
|
+
game-server:
|
|
12
|
+
image: ${GAME_SERVER_IMAGE:-ghcr.io/mackeyk24/babylon-game-server:{{version}}}
|
|
13
|
+
restart: unless-stopped
|
|
14
|
+
environment:
|
|
15
|
+
GAME_SERVER_CONFIG: /app/config/babylon-game-server.config.mjs
|
|
16
|
+
# Caddy forwards the player's address in x-forwarded-for.
|
|
17
|
+
GAME_SERVER_TRUST_PROXY: "true"
|
|
18
|
+
# Admin console data (accounts, bans, audit log) on the game-server-data volume. Back it up.
|
|
19
|
+
GAME_SERVER_ADMIN_DATA_DIR: /data
|
|
20
|
+
volumes:
|
|
21
|
+
- ./babylon-game-server.config.mjs:/app/config/babylon-game-server.config.mjs:ro
|
|
22
|
+
- game-server-data:/data
|
|
23
|
+
# No published ports: only Caddy reaches the server, on the compose network.
|
|
24
|
+
|
|
25
|
+
caddy:
|
|
26
|
+
image: caddy:2
|
|
27
|
+
restart: unless-stopped
|
|
28
|
+
depends_on:
|
|
29
|
+
- game-server
|
|
30
|
+
ports:
|
|
31
|
+
- "${CADDY_HTTP_PORT:-443}:443"
|
|
32
|
+
- "8080:8080"
|
|
33
|
+
environment:
|
|
34
|
+
- CADDY_SITE
|
|
35
|
+
volumes:
|
|
36
|
+
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
|
37
|
+
- caddy-data:/data
|
|
38
|
+
|
|
39
|
+
volumes:
|
|
40
|
+
caddy-data:
|
|
41
|
+
game-server-data:
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# TLS: edge (Fly's proxy terminates TLS on 443 with a certificate for your app or custom domain)
|
|
2
|
+
# UDP: not supported on this host (see below)
|
|
3
|
+
# Auth: set GAME_SERVER_AUTH_* to enable (fly secrets set GAME_SERVER_AUTH_ENABLED=true ...)
|
|
4
|
+
#
|
|
5
|
+
# Babylon Game Server {{version}} on Fly.io, WebSocket only. Deploy from this folder:
|
|
6
|
+
# fly launch --copy-config --no-deploy (pick an app name; it replaces "app" below)
|
|
7
|
+
# fly deploy
|
|
8
|
+
# Players use wss://<app>.fly.dev (or your custom domain after `fly certs add`).
|
|
9
|
+
#
|
|
10
|
+
# Why no UDP / HTTP/3: Fly delivers UDP only to a socket bound to the special address fly-global-services, while TCP
|
|
11
|
+
# services bind 0.0.0.0. The server's HTTP/3 transport binds one address for TCP and UDP together, so it cannot serve
|
|
12
|
+
# both on Fly (https://docs.fly.io/networking/udp-and-tcp). Players get the WebSocket, which works everywhere.
|
|
13
|
+
app = "babylon-game-server"
|
|
14
|
+
primary_region = "iad"
|
|
15
|
+
# Longer than the 30 s drain, so running sessions finish before the machine is stopped.
|
|
16
|
+
kill_timeout = "45s"
|
|
17
|
+
|
|
18
|
+
[build]
|
|
19
|
+
dockerfile = "Dockerfile"
|
|
20
|
+
|
|
21
|
+
[env]
|
|
22
|
+
GAME_SERVER_PORT = "2567"
|
|
23
|
+
# Fly's proxy sends the player's address in x-forwarded-for.
|
|
24
|
+
GAME_SERVER_TRUST_PROXY = "true"
|
|
25
|
+
# Admin console data (accounts, bans, audit log) on the volume mounted below.
|
|
26
|
+
GAME_SERVER_ADMIN_DATA_DIR = "/data"
|
|
27
|
+
|
|
28
|
+
# The admin console's data volume (fly deploy creates it; one volume per machine, so with more than one machine set
|
|
29
|
+
# GAME_SERVER_REDIS_URL and the console keeps its data in Redis instead). Snapshot it with `fly volumes snapshots`.
|
|
30
|
+
[[mounts]]
|
|
31
|
+
source = "game_server_data"
|
|
32
|
+
destination = "/data"
|
|
33
|
+
|
|
34
|
+
[[services]]
|
|
35
|
+
internal_port = 2567
|
|
36
|
+
protocol = "tcp"
|
|
37
|
+
auto_stop_machines = "off"
|
|
38
|
+
auto_start_machines = true
|
|
39
|
+
min_machines_running = 1
|
|
40
|
+
|
|
41
|
+
[[services.ports]]
|
|
42
|
+
port = 443
|
|
43
|
+
handlers = ["tls", "http"]
|
|
44
|
+
|
|
45
|
+
[[services.ports]]
|
|
46
|
+
port = 80
|
|
47
|
+
handlers = ["http"]
|
|
48
|
+
force_https = true
|
|
49
|
+
|
|
50
|
+
[[services.http_checks]]
|
|
51
|
+
path = "/game-server/ready"
|
|
52
|
+
interval = "15s"
|
|
53
|
+
timeout = "5s"
|
|
54
|
+
grace_period = "20s"
|
|
55
|
+
method = "get"
|
|
56
|
+
protocol = "http"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# TLS: edge (the Heroku router terminates TLS for <app>.herokuapp.com and your custom domains)
|
|
2
|
+
# UDP: not supported on this host (the Heroku router carries HTTP and WebSocket only: https://devcenter.heroku.com/articles/http-routing)
|
|
3
|
+
# Auth: set GAME_SERVER_AUTH_* to enable (heroku config:set GAME_SERVER_AUTH_ENABLED=true ...)
|
|
4
|
+
#
|
|
5
|
+
# Babylon Game Server {{version}} on Heroku, WebSocket only, built from the Dockerfile in this folder:
|
|
6
|
+
# heroku create --stack container (or deploy with the button that app.json describes)
|
|
7
|
+
# git push heroku main
|
|
8
|
+
# Heroku sets PORT, which the server honours. Players use wss://<app>.herokuapp.com.
|
|
9
|
+
build:
|
|
10
|
+
docker:
|
|
11
|
+
web: Dockerfile
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# TLS: edge (your Ingress or load balancer terminates TLS), or server if you mount a certificate and set GAME_SERVER_TLS_*
|
|
2
|
+
# UDP: not supported on this host by default (it needs server TLS and a LoadBalancer Service that forwards UDP; see DEPLOY.md)
|
|
3
|
+
# Auth: set GAME_SERVER_AUTH_* to enable (from a Secret, with env valueFrom.secretKeyRef)
|
|
4
|
+
#
|
|
5
|
+
# Babylon Game Server {{version}} on Kubernetes:
|
|
6
|
+
# kubectl apply -f kubernetes/redis.yaml -f kubernetes/deployment.yaml -f kubernetes/service.yaml
|
|
7
|
+
# Each pod advertises its own address for seat reservations (GAME_SERVER_PUBLIC_ADDRESS from the pod IP), and all pods
|
|
8
|
+
# share one Redis, so a session's players always reach the pod that holds it. The pod IP must be reachable by players
|
|
9
|
+
# (flat or routable pod network); otherwise give each pod its own external address (see service.yaml).
|
|
10
|
+
# Admin console data (accounts, bans, audit log) lives in that shared Redis, which keeps it on the
|
|
11
|
+
# babylon-game-server-data volume (redis.yaml). Without Redis, run one replica and mount a PersistentVolumeClaim at /data.
|
|
12
|
+
apiVersion: apps/v1
|
|
13
|
+
kind: Deployment
|
|
14
|
+
metadata:
|
|
15
|
+
name: babylon-game-server
|
|
16
|
+
labels:
|
|
17
|
+
app: babylon-game-server
|
|
18
|
+
spec:
|
|
19
|
+
replicas: 1
|
|
20
|
+
selector:
|
|
21
|
+
matchLabels:
|
|
22
|
+
app: babylon-game-server
|
|
23
|
+
template:
|
|
24
|
+
metadata:
|
|
25
|
+
labels:
|
|
26
|
+
app: babylon-game-server
|
|
27
|
+
spec:
|
|
28
|
+
# Longer than the 30 s drain, so running sessions finish before the pod is killed.
|
|
29
|
+
terminationGracePeriodSeconds: 45
|
|
30
|
+
securityContext:
|
|
31
|
+
runAsNonRoot: true
|
|
32
|
+
# The image's "node" user.
|
|
33
|
+
runAsUser: 1000
|
|
34
|
+
containers:
|
|
35
|
+
- name: game-server
|
|
36
|
+
image: ghcr.io/mackeyk24/babylon-game-server:{{version}}
|
|
37
|
+
ports:
|
|
38
|
+
- name: game
|
|
39
|
+
containerPort: 2567
|
|
40
|
+
protocol: TCP
|
|
41
|
+
env:
|
|
42
|
+
- name: POD_IP
|
|
43
|
+
valueFrom:
|
|
44
|
+
fieldRef:
|
|
45
|
+
fieldPath: status.podIP
|
|
46
|
+
- name: GAME_SERVER_PUBLIC_ADDRESS
|
|
47
|
+
value: "$(POD_IP):2567"
|
|
48
|
+
- name: GAME_SERVER_REDIS_URL
|
|
49
|
+
value: redis://babylon-game-server-redis:6379
|
|
50
|
+
- name: GAME_SERVER_LOG_FORMAT
|
|
51
|
+
value: json
|
|
52
|
+
# Used only when GAME_SERVER_REDIS_URL is unset (the image's default; the pod's /data is not kept).
|
|
53
|
+
- name: GAME_SERVER_ADMIN_DATA_DIR
|
|
54
|
+
value: /data
|
|
55
|
+
livenessProbe:
|
|
56
|
+
httpGet:
|
|
57
|
+
path: /game-server/health
|
|
58
|
+
port: game
|
|
59
|
+
initialDelaySeconds: 10
|
|
60
|
+
periodSeconds: 15
|
|
61
|
+
readinessProbe:
|
|
62
|
+
httpGet:
|
|
63
|
+
path: /game-server/ready
|
|
64
|
+
port: game
|
|
65
|
+
periodSeconds: 5
|
|
66
|
+
resources:
|
|
67
|
+
requests:
|
|
68
|
+
cpu: 250m
|
|
69
|
+
memory: 512Mi
|
|
70
|
+
limits:
|
|
71
|
+
memory: 1Gi
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# TLS: edge (Redis is cluster-internal; it is never exposed to players)
|
|
2
|
+
# UDP: not supported on this host (Redis is TCP only and not player-facing)
|
|
3
|
+
# Auth: set GAME_SERVER_AUTH_* to enable (player auth is configured on the game server, not here)
|
|
4
|
+
#
|
|
5
|
+
# One Redis shared by every game server pod (session listing and seat reservations across pods). It is also the admin
|
|
6
|
+
# console's data store (accounts, bans, audit log), so it keeps an append-only file on the babylon-game-server-data
|
|
7
|
+
# PersistentVolumeClaim (the cluster's default storage class). Use a managed Redis with persistence instead by changing
|
|
8
|
+
# GAME_SERVER_REDIS_URL (then skip this file).
|
|
9
|
+
apiVersion: v1
|
|
10
|
+
kind: PersistentVolumeClaim
|
|
11
|
+
metadata:
|
|
12
|
+
name: babylon-game-server-data
|
|
13
|
+
labels:
|
|
14
|
+
app: babylon-game-server-redis
|
|
15
|
+
spec:
|
|
16
|
+
accessModes:
|
|
17
|
+
- ReadWriteOnce
|
|
18
|
+
resources:
|
|
19
|
+
requests:
|
|
20
|
+
storage: 1Gi
|
|
21
|
+
---
|
|
22
|
+
apiVersion: apps/v1
|
|
23
|
+
kind: Deployment
|
|
24
|
+
metadata:
|
|
25
|
+
name: babylon-game-server-redis
|
|
26
|
+
labels:
|
|
27
|
+
app: babylon-game-server-redis
|
|
28
|
+
spec:
|
|
29
|
+
replicas: 1
|
|
30
|
+
# One pod at a time owns the ReadWriteOnce volume.
|
|
31
|
+
strategy:
|
|
32
|
+
type: Recreate
|
|
33
|
+
selector:
|
|
34
|
+
matchLabels:
|
|
35
|
+
app: babylon-game-server-redis
|
|
36
|
+
template:
|
|
37
|
+
metadata:
|
|
38
|
+
labels:
|
|
39
|
+
app: babylon-game-server-redis
|
|
40
|
+
spec:
|
|
41
|
+
containers:
|
|
42
|
+
- name: redis
|
|
43
|
+
image: redis:7
|
|
44
|
+
args: ["--save", "", "--appendonly", "yes"]
|
|
45
|
+
ports:
|
|
46
|
+
- name: redis
|
|
47
|
+
containerPort: 6379
|
|
48
|
+
volumeMounts:
|
|
49
|
+
- name: data
|
|
50
|
+
mountPath: /data
|
|
51
|
+
resources:
|
|
52
|
+
requests:
|
|
53
|
+
cpu: 100m
|
|
54
|
+
memory: 128Mi
|
|
55
|
+
volumes:
|
|
56
|
+
- name: data
|
|
57
|
+
persistentVolumeClaim:
|
|
58
|
+
claimName: babylon-game-server-data
|
|
59
|
+
---
|
|
60
|
+
apiVersion: v1
|
|
61
|
+
kind: Service
|
|
62
|
+
metadata:
|
|
63
|
+
name: babylon-game-server-redis
|
|
64
|
+
labels:
|
|
65
|
+
app: babylon-game-server-redis
|
|
66
|
+
spec:
|
|
67
|
+
type: ClusterIP
|
|
68
|
+
selector:
|
|
69
|
+
app: babylon-game-server-redis
|
|
70
|
+
ports:
|
|
71
|
+
- name: redis
|
|
72
|
+
port: 6379
|
|
73
|
+
targetPort: redis
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# TLS: edge (put an Ingress with TLS in front of this Service for wss://)
|
|
2
|
+
# UDP: not supported on this host (a ClusterIP Service behind an HTTP Ingress carries TCP only)
|
|
3
|
+
# Auth: set GAME_SERVER_AUTH_* to enable
|
|
4
|
+
#
|
|
5
|
+
# The cluster-internal address of the game servers, for an Ingress (WebSocket) or other in-cluster clients.
|
|
6
|
+
# When scaled past one replica, this Service alone is not enough: Colyseus seat reservations send each player to the
|
|
7
|
+
# pod that holds the session, so every pod needs its own address players can reach (GAME_SERVER_PUBLIC_ADDRESS in
|
|
8
|
+
# deployment.yaml), such as a routable pod IP, hostNetwork, or one LoadBalancer Service per pod (a StatefulSet).
|
|
9
|
+
# A session never spans pods.
|
|
10
|
+
apiVersion: v1
|
|
11
|
+
kind: Service
|
|
12
|
+
metadata:
|
|
13
|
+
name: babylon-game-server
|
|
14
|
+
labels:
|
|
15
|
+
app: babylon-game-server
|
|
16
|
+
spec:
|
|
17
|
+
type: ClusterIP
|
|
18
|
+
selector:
|
|
19
|
+
app: babylon-game-server
|
|
20
|
+
ports:
|
|
21
|
+
- name: game
|
|
22
|
+
port: 2567
|
|
23
|
+
targetPort: game
|
|
24
|
+
protocol: TCP
|