doka-lobby
Web UI for Dota 2 joinable custom lobbies from the game coordinator.
The app keeps the latest lobby snapshot in memory, refreshes it every 3 minutes, and streams updates to the browser. There is no database. Steam account credentials and the refresh token can be persisted on a PVC.
Local run
npm install
$env:AUTH_ADMIN_PASSWORD = "admin-password"
npm start
Open:
http://localhost:3000
Use /admin to enter the admin password, save Steam credentials, and submit a Steam Guard code when Steam asks for it.
Kubernetes configuration
Mount a PVC to /data and set:
env:
- name: AUTH_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: doka-lobby-admin
key: password
- name: STEAM_AUTH_FILE
value: /data/.steam-auth.json
- name: STEAM_CREDENTIALS_FILE
value: /data/.steam-credentials.json
- name: PORT
value: "3000"
volumeMounts:
- name: data
mountPath: /data
Run one replica only. A single Steam account should not be used by multiple pods at once.
Auth files
.steam-credentials.jsonstores the Steam account name and password saved from/admin..steam-auth.jsonstores the Steam refresh token emitted bysteam-user.- Both files are ignored by git and Docker build context.
If the refresh token is still valid, restarts use it. If it is missing or expired, the app falls back to the saved Steam account/password and may ask for Steam Guard again.
Docker image CI
GitHub Actions builds and pushes:
ultradesu/doka2-lobby-list
Configure repository secrets:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
The workflow publishes latest on the default branch, branch/tag refs, and sha-* tags.
Options
node index.js --port 3001
node index.js --region 3
node index.js --game-id 123456789
node index.js --refresh-ms 180000
One-shot console mode:
node index.js --once --map "ffa"