NGINXを介した接続やSSL化に少々手こずったので備忘録も兼ね書き残す事にしました。(2022年2月時点)
実証環境&バージョン
一部バージョンに依存して動かない事もあるそうなので今回実際に使用したものを書き残しておきます。
今回動作を確認した環境
- windows10
- unity 2020.3.26f
- Visual Studio 2022
- docker v20.10.12
- nginx v1.21.6
バージョン
サーバーサイド
- .Net Core 5
- MagicOnion 4.4.0
- MagicOnion.MSBuild.Tasks 4.4.0
- MagicOnion.Shared 4.4.0
- MessagePack.MSBuild.Tasks 2.3.85
- MessagePack.UnityShims 2.3.85
クライアントサイド
- MagicOnion.Client.Unity.unitypackage 4.4.0
- grpc_unity_package.2.40.0
ManicOnionのダウンロードとインストール
まずは公式githubのreadmeやコチラのサイトなどを参考にすればwebサーバー(NGINX等)を通さない単純なHTTP接続ならすぐ出来るでしょう。
dockerでNGINXを立ち上げる
docker-composeで下記のようにdocker-compose.ymlファイルを作りdocker-compose up -dで起動する
起動されたらconf.d配下に下記のconfファイルを作る。一見長いように見えるけどほぼこちらのコピペです。若干追記してます。
confファイルの追加と後述の証明書ファイルの作成が済んだらnginx -s reloadで再起動する。
upstream内のhost.docker.internal:5000はNGINXがdockerコンテナ内にある場合の記述です。dockerコンテナ内のnginxからはlocalhost:5000```では繋がりません。
オレオレ証明書の作成
こちらのサイトを参考にlocalhost宛ての証明書を作成し、/ssl/ディレクトリに保存しました。nginxコンテナ内のconfファイルと、volumeを介してホスト側のunityクライアントでも参照出来るようにしました。
接続テスト
ここまでの作業でManicOnion-ServerとNGINX、サーバーのSSL化が完了しました。最後に残るのはunity側のSSL対応です。これは公式githubのasyncsumを呼び出すサンプルプログラムを下記のように書き変える。
最初にまずAssets配下のディレクトリに、
- ルート証明書(localCA.crt)
- サーバー証明書(localhost.crt)
- サーバー鍵(localhost.key)
この3つのファイルをコピーしておく。そしてそれらのファイルを元にキーペアを作りchannel = GrpcChannel.ForAddress("https://localhost:5001");となっている部分をchannel = new Channel(host, port, new SslCredentials(cacert, keyCertificatePair));と書き換える。
SumAsyncメソッドの中身は公式サンプルのままです。MagicOnionサーバー、webサーバー(NGINX)を立ち上げてからunity上で実行してみると、実行結果の123が表示されるはずです。
さいごに
onDestroy対応はきちんとしておきましょう。オレオレ証明書はあくまでもお試し用です。




