UnityWebGLのビルドをrsyncでサーバーにデプロイする

UnityのWebGLビルドを自鯖にデプロイできるか試したので、手順を書き残しておきます。

サーバーに置いたチクタクバンバン風のスライディングパズルゲーム。

https://smartphone-games.net/rails-webgl/

大雑把な手順

  • UnityのWebGLビルド
    • Canvasサイズを設定
    • Compression FormatをDisableに設定
  • ビルドフォルダの権限設定
    • chmod -R 755
  • sshを使ったrsyncでサーバーに送信
  • nginxでapplication/wasm設定

Unity

UnityのプラットフォームをWebGLに設定します。
設定後に、ProjectSettingsのResolution and Presentationのキャンバスサイズを1920x1080などに設定します。
Compression FormatをDisableで無効に設定します。
GZIPなどの圧縮を選ぶと、そのままだとブラウザで開くとエラーになります。自前で回答処理が必要で面倒なので無効にしています。

ビルドで出力された各フォルダやファイルに権限設定を行います。
ビルドの成果物が含まれてる親フォルダで以下を実行して権限を付与します。 セキュリティ的に不安がある場合は、より制限した権限設定を行いますが、ここではざっくり権限付与になっています。

chmod -R 755 [ビルドのルートフォルダ]

rsync

ビルドの成果物をサーバーに送信するのにrsyncを使いました。 サーバーにsshログインできることを前提にして、rsync+sshで送信しています。 username@hostはsshのconfigに記載したホストとユーザー名を使います。 繰り返し使うと思うので、権限設定とrsyncでの送信を含めてshellやmakefileでスクリプト化します。

rsync -avz --delete -e ssh [ローカルのビルド成果物フォルダのパス] [username@host:サーバーの配置パス]

sshのconfig

Host [rsyncで使うホスト]
    ...
    User [rsyncで使うユーザー名]
    ...

nginx

rsyncでサーバーに置いたWebGLゲームを/var/www/public_htmlにリンクを使って配置するなど外部に公開できるようにします。

/etc/nginx/mime.types にwasmの設定がないと警告が表示されます。
application/wasmをmime.typesに追加して、nginxを再起動します。

mime.types

application/wasm                      wasm;

nginx再起動

sudo nginx -s reload

これでWebGLを公開できるはずです。 https://smartphone-games.net/rails-webgl/