This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
構成・バックエンドの準備
対象: 02fdbe31。以下のシェル例はLinux/macOS/WSL用です。WindowsでNodeのコマンドを直接実行する場合は必要に応じて npm.cmd / npx.cmd を使います。
動く場所
参加者のWindows PC
Arena.exe / game.dll
↕ ローカルHTTP・XMPP・TCP互換サービス
Pythonランチャー / Companion
├─ Epic EOS: 本人確認
├─ HTTPS: Cloudflare Worker → D1 / KV / R2
└─ WebSocket: BattleRelay Durable Object
開発用Git: Forgejo(現在GCP、後でVPSへ移行可能)→ Git LFSはR2
ゲーム制御部分はWorkersとDurable Objectsで動きます。Forgejo用VPSにWindowsゲームを置いて起動する構成ではありません。ゲームのローカル互換サービスをインターネットへ直接公開する必要もありません。Workersはexe/dllを実行する場所ではありません。
DB はアカウント・編成・戦績、CONTROL はメンテナンス等、PATCHES は署名済み更新情報と配布データです。ROOMS / SOCIAL / MATCHMAKER / BATTLE_RELAY はそれぞれRoom / Social / Matchmaker / BattleRelayクラスへ接続します。構成の原資料
1. コードを取得する
Git、Git LFS、Node.js 24系を用意します。バックエンドのビルドだけなら本体のダウンロードは後回しにできます。
GIT_LFS_SKIP_SMUDGE=1 git clone https://git.darask.me/revival-forge/twa-revival.git
cd twa-revival
git lfs install --local
git config lfs.concurrenttransfers 2
# このWikiと同じ版を調べる場合
git switch --detach 02fdbe312789e6d925b94c4679e4ab48e195c0d2
# 本体が必要になった時だけ実行
git lfs pull --include="game/**" --exclude=""
2. 独立した配備用コピーを組み立てる
候補backendには package-lock.json と scripts/ がなく、admin.mjs は直下に置かれています。候補のDB移行番号は従来版と異なるため、従来版のmigrationsを候補へ重ねないでください。以下は新しい作業フォルダを作り、必要な補助物だけを補います。リポジトリ直下で実行します。
mkdir ../twa-selfhost
cp -R candidate/backend ../twa-selfhost/backend
cp -R candidate/catalog ../twa-selfhost/catalog
cp -R source/private-server/scripts ../twa-selfhost/backend/scripts
cp source/private-server/package-lock.json ../twa-selfhost/backend/package-lock.json
cp candidate/backend/admin.mjs ../twa-selfhost/backend/scripts/admin.mjs
cd ../twa-selfhost/backend
npm ci --ignore-scripts
npm run typecheck
npm run build
build は配備前のdry-runです。上記配置と固定依存物で型検査・dry-runを確認しました。catalog/ を省くと balance_catalog.json / native_battle_maps.json のimportで失敗します。
エントリーポイントは設定どおり src/index.ts を使います。直下の entry.ts はQA wrapperで、公開コピーにない downloads.generated.mjs を参照します。これを一般配備の入口へ変更しないでください。
3. ローカルで確認する
npm run db:local
npx wrangler kv key put maintenance '{"enabled":true,"message":"Local setup"}' --binding CONTROL --local
npx wrangler kv key put min_client_version 0.0.0 --binding CONTROL --local
npx wrangler kv key put min_launcher_version 0.0.0 --binding CONTROL --local
npm run dev
# 別端末から
curl http://127.0.0.1:8787/health
db:local はローカルD1、dev は127.0.0.1:8787を使います。Epic設定が未設定でもhealthの確認と、実ログイン・対戦の確認は分けて扱います。秘密値を試す場合は配備コピーの .dev.vars に保存し、Gitへ追加しません。
CONTROLの3値がない新規環境では /health は503 startup_configuration_unavailable になります。上記の 0.0.0 はローカル疎通確認専用です。実配布では検証済みゲーム版・ランチャー版の最低値を設定します。メンテナンス中でもhealthは応答します。8787が使用中なら、既存サービスを止めず npx wrangler dev --ip 127.0.0.1 --port 18787 --local と対応するhealth URLで確認できます。
NixOSでは汎用Linux版workerdのELFローダーが見つからず EPIPE になる場合があります。依存物を更新する前にworkerd単体の起動とNixOSの実行環境を確認します。ポートの EPERM は実行環境のネットワーク制限も確認してください。
4. 自分のCloudflare資源を用意する
以下は自分のアカウントへ新規作成する場合の例です。my-twa-* は運営ごとの名前に変更し、既存環境では先に一覧を確認して重複作成を避けます。
npx wrangler login
npx wrangler whoami
npx wrangler d1 create my-twa-users
npx wrangler kv namespace create CONTROL
npx wrangler r2 bucket create my-twa-patches
wrangler.jsonc を次のように編集します。元ファイルのDurable Objects、rate limits、compatibility dateを保持します。
| 設定 | 自分の環境で指定する内容 |
|---|---|
name |
自分のWorker名(例 my-twa-control) |
d1_databases[0] |
bindingはDBのまま。作成したDB名とdatabase_id |
kv_namespaces[0].id |
作成したCONTROLのID |
r2_buckets[0].bucket_name |
作成したバケット名 |
routes |
例 [{ "pattern": "control.example.com", "custom_domain": true }]。管理するCloudflareゾーン内のホスト |
define |
__TWA_INTERNAL_PVP_TEST_BUILD__: "false" と __TWA_NATIVE_RELEASE_BUILD__: "true" |
vars |
DEPLOYMENT_ENVIRONMENT: "staging"、NATIVE_PVP_TEST_ENABLED: "false"、NATIVE_PUBLIC_PROTOCOL: "twa-relay-v1" |
vars.PLAYER_REGISTRATION |
初期準備中は closed。受入後にinvitation/openを選ぶ |
vars.EOS_* |
Epic設定の自分の製品・環境 |
workers_dev は元設定でfalseです。独自ドメインを設定せずに配備しても、プレイヤー用URLの準備は完了しません。DOのmigrationは既存タグを保存し、将来の変更は新しいタグへ追加します。Cloudflareのクラス変更・migration説明
5. DB・秘密値・Workerを反映する
新規の空DBを対象にします。既存DBのアップグレードは運用の退避と差分確認を先に行ってください。
npx wrangler d1 migrations apply DB --remote
npx wrangler kv key put maintenance '{"enabled":true,"message":"Initial setup"}' --binding CONTROL --remote
npx wrangler kv key put min_client_version "${TWA_MIN_GAME_VERSION:?検証済みのゲーム最低版を設定}" --binding CONTROL --remote
npx wrangler kv key put min_launcher_version "${TWA_MIN_LAUNCHER_VERSION:?検証済みのランチャー最低版を設定}" --binding CONTROL --remote
npx wrangler secret put ADMIN_TOKEN
npx wrangler secret put RELAY_TICKET_SECRET
npm run typecheck
npm run build
npx wrangler deploy
curl https://control.example.com/health
事前にシェル変数 TWA_MIN_GAME_VERSION と TWA_MIN_LAUNCHER_VERSION に、自分が検証した配布版のsemverを設定してください。2つのsecretには別々の32文字以上のランダム値を入力し、安全な場所へ保存します。管理トークンは運営者だけ、リレーチケット秘密値はWorkerだけで扱います。/health の nativeBattles: true と nativeProtocol: twa-relay-v1 は機能宣言です。実Epicログイン・本体起動・2台の対戦・結果保存の受入は別に行います。
このWiki整備で既存のゲームAPIへの新配備・登録開放は行っていません。自分の環境への配備後はクライアント準備へ進んでください。CLIの現行引数はWrangler公式コマンドと、固定版の npx wrangler <command> --help で確認できます。