SkyWay版の設定項目
トークン発行サーバー(PHP版・Vercel版・Cloudflare版)の設定を説明します。PHP版は.envというテキストファイルから、Vercel版はVercelのプロジェクトの環境変数から、Cloudflare版はWorkerの変数とシークレットから、同じ名前の設定を読みます。
項目
| 名前 | 必須 | 既定値 | PHP版 | Vercel版 | Cloudflare版 | 内容 |
|---|---|---|---|---|---|---|
SKYWAY_APP_ID | ○ | — | ○ | ○ | ○ | SkyWayのアプリケーションID |
SKYWAY_SECRET | ○ | — | ○ | ○ | ○ | SkyWayのシークレットキー。トークンの署名に使う |
ACCESS_CONTROL_ALLOW_ORIGIN | ○ | — | ○ | ○ | ○ | トークンの発行を受けるAxeのOrigin。カンマ区切りで複数書ける |
SKYWAY_UDONARIUM_LOBBY_SIZE | 3 | ○ | ○ | ○ | ロビーの数(1以上の整数) | |
SKYWAY_TOKEN_TTL_SECONDS | 86400 | ○ | ○ | 発行するトークンの有効期間(秒)。60(1分)〜604800(7日) |
PHP版のトークンの有効期間は、24時間で変えられません。
ACCESS_CONTROL_ALLOW_ORIGIN
Axeを配信しているページのOriginを書きます(→ 設置の準備)。
https://axe.example.com
https://axe.example.com,https://www.axe.example.com- スキーム(
https://)・ホスト名・ポートがすべて一致したときだけ通します。 - 空にすると、どのOriginからのトークンの発行も断ります。
*と書くと、すべてのOriginを許可します。試すときだけにしてください。ほかのサイトに置かれたAxeからも、あなたのSkyWayのアプリケーションが使えてしまい、その利用量はあなたのFreeプランに数えられます。- PHP版では、末尾に
/を付けないでください。PHP版は、ここに書いた文字列をそのままブラウザに返すので、/が付いているとブラウザが「Originが違う」と判断して通信を止めます。Vercel版は、パスや末尾の/の違いを見ません。
SKYWAY_UDONARIUM_LOBBY_SIZE
ロビー(部屋の一覧を見るためのチャンネル)の数です。同時にロビーにいる人が数百人を超えるときに増やします。同じSkyWayのアプリケーションを使うトークン発行サーバーどうしでは、同じ値にそろえてください(→ ロビーの数)。
SKYWAY_TOKEN_TTL_SECONDS(Vercel版とCloudflare版)
トークンの有効期間です。Axeは部屋に入るときにトークンを受け取り、そのあいだSkyWayにつながり続けます。既定の24時間で困ることは、ほとんどありません。短くすると、漏れたトークンが使える時間を縮められます。範囲の外の値や、数字でない値を入れると、すべてのリクエストにCONFIG_INVALIDを返します。
PHP版の.env
書きかた
.envには、名前=値を1行に1つ書きます。#で始まる行は、説明(コメント)です。
# SkyWayのアプリケーションID
SKYWAY_APP_ID="..."値は"(ダブルクォート)で囲んでください。囲まない値に;が入っていると、;から後ろが切り捨てられます。囲んでおけば、;も#もそのまま読みます。
探す順番
PHP版は、次の順に.envを探し、最初に見つかったものを読みます。
- 環境変数
ENV_PATHに書かれた場所(.htaccessにSetEnv ENV_PATH /home/user/secret/.envのように書く) index.phpと同じフォルダの.envindex.phpの1つ上のフォルダの.env
どこにも無いときや、必須の値が欠けているときは、すべてのリクエストに500を返します。原因は、PHPのエラーログに出ます。
3番目は、index.phpをドキュメントルートの直下に置いたときのためのものです。サブディレクトリやサブドメインに置いたときは、index.phpの1つ上のフォルダは公開フォルダの中なので、そこに.envを置かないでください(→ もっと安全にしたいとき)。
.htaccessが断るもの
付属の.htaccessは、次のものへのWebからのアクセスを断ります。.htaccessを書き換えるときは、これらが見えるようにならないよう気をつけてください。
- 名前が
.で始まるファイルとフォルダ(.env、.gitなど)。ただし、SSLの証明書の発行に使う.well-known/は通す composer.json、phpunit.xml、Dockerfileなど、開発用のファイルvendor/、tests/、bin/、docs/などのフォルダ
Cloudflare版の変数とシークレット
SKYWAY_APP_IDとSKYWAY_SECRETは、Workerのシークレットとしてnpx wrangler secret putで入れます。ACCESS_CONTROL_ALLOW_ORIGINは、デプロイのときに--varで入れます(→ Cloudflareに置く)。SKYWAY_UDONARIUM_LOBBY_SIZEとSKYWAY_TOKEN_TTL_SECONDSも、シークレットか--varで入れられます。
同じWorkerにログインの3つも入れると、部屋のサーバーも受け持ちます(→ サーバー版の設定項目)。SkyWayの2つを入れずに部屋のサーバーだけを使うと、SkyWayの経路(/v1/status、/v1/skyway/*、/v1/skyway2023/*)はCONFIG_INVALIDを返します。
Vercel版の環境変数
環境変数は、VercelのプロジェクトのEnvironment Variablesで足したり変えたりします。変えたあとは、デプロイし直すまで反映されません(→ Vercelに置く)。
部屋のサーバーも同じプロジェクトで動かすときは、サーバー版の設定項目の項目も入れます。SkyWayの項目を入れずに部屋のサーバーだけを使うと、SkyWayの経路(/v1/status、/v1/skyway/*、/v1/skyway2023/*)はCONFIG_INVALIDを返します。
手元で動かす
cd apps/vercel
npm ci
npm run env # vercel env pull で .env.local を作る
npm start # vercel dev(http://localhost:3000)npm run envは、Vercelのプロジェクトに入れた環境変数を取ってきます。種類をSecretにした値は取ってこられないことがあるので、そのときは.env.localに手で書きます。.envと.env.localは、Gitに入らないようにしてあります。