majiXA を使って開発を行ったサーバ側の処理を実際に公開するためには、自前でサーバを用意する必要があります。
サーバを用意するいくつかの方法
- SSHでログインでき自由に環境を触れるレンタルサーバを利用する
- AWS や Google Cloud Platform などのクラウドサービスを利用する
- データセンターにサーバを用意してそれを利用する(オンプレ)
- 自宅にサーバを構築してそれを利用する
いくつか候補をあげてみましたが、最近ではクラウドを利用することがほとんどになるでしょう。
majiXA は Cent OS か Ubuntu であれば動作させることができます。
それでは実際に Linux サーバのコンテナがある前提でサーバのセットアップ説明を進めていきます。
docker のインストール
majiXA のサーバでは docker コンテナを利用してサーバを構築します。
yum コマンドを使って docker をインストールし起動します。
$> yum install docker
$> systemctl start docker
nginx-luajit-ws の構築
majiXA では nginx を利用して WebSocket 接続を受け付けています。
その部分を担うライブラリをダウンロードして nginx を構築します。
まずは github からファイルをダウンロードして任意の場所へ解凍します。
nginx-luajit-ws
https://github.com/sassembla/nginx-luajit-ws/archive/benchmark-with-netcore.zip
ダウンロードしたファイルを解凍してできたフォルダへ移動します。
$> cd nginx-luajit-ws-benchmark-with-netcore
DockerResources/nginx.conf ファイルの 62 行目、63 行目の sample_disque_client を disque_client に書き換えます。
(sample_ を削除する)
DockerResources/lua/sample_disque_client.lua のファイル名を disque_client.lua に変更します。
nginx-luajit-ws-benchmark-with-netcore/c_rebuild.sh を実行します。
docker のプロセスリストを確認して nginx_luajit が起動していれば成功です。
$> docker ps | grep nginx
dotnet のインストール
majiXA のサーバソースは Unity 上で開発していることもあり C# で書かれています。
それを Linux サーバ上でコンパイル&実行させるために dotnet をインストールします。
.NET Core SDK をインストールする
https://docs.microsoft.com/ja-jp/dotnet/core/install/sdk?pivots=os-linux
dotnet のインストールが完了したら、Unity 上で開発したサーバソースを配置しコンパイルします。
majiXA 内のサーバソースは以下のフォルダにまとめられているため、フォルダ単位で配置します。
- Assets/majiXA/ClientAndServer/
- Assets/majiXA/Configs/Editor/
- Assets/majiXA/Server/Editor/
上記フォルダ以外にも以下のファイルを配置する必要があります。
- Program.cs
- majixa.csproj
- 上記フォルダ内から参照されている各種ソース
ソース配置の TIPS
サーバ用のソースを FTP などを利用して転送してもいいのですが、git などのバージョン管理を利用している場合、サーバ上でプロジェクト一式をプルしてきてから不要なファイル群を削除すると比較的簡単に構築することが可能です。
設定
majiXA 設定ファイルの編集をいくつか行います。
- Assets/majiXA/ClientAndServer/Commands.cs
namespace majiXA
{
public enum eCommand : int
{
RoomJoin,
RoomLeave,
}
}
eCommand
通信の種類を表す各種コマンドを設定します。
- Assets/majiXA/Configs/Config.cs
namespace majiXA.Config
{
public class Common
{
public static string BUNDLE_IDENTIFIER = "com.Company.ProductName";
public const string ProcessingNameSpace = "";
public const string SetupClassName = "";
}
}
BUNDLE_IDENTIFIER
アプリケーション固有の識別子を設定します。
ドメインを逆さまにしたものを指定しておくと良いでしょう。
ProcessingNameSpace
サーバ側の処理(IProcessing を継承したクラス)で namespace を使用する際はその namespace を記述します。
例)majiXA.Server.
SetupClassName
サーバ起動時の初期化処理を行うクラスの名前を指定します。
例)majiXA.Server.Setup
- Assets/majiXA/Configs/Editor/Server.cs
namespace MajiXA.Config
{
public class Server
{
public const string MAINTENANCE_USER = "000-Backdoor_For_Maintenanceuser-000";
#if UNITY_EDITOR
// UnityEditorでContextを動かす時の設定
public static string LOG_PATH = UnityEngine.Application.dataPath + "/../server.log";
public const string DISQUE_HOST_IP = "203.137.165.35";
public const int DISQUE_PORT = 7711;
#else
// (Linux)サーバでContextを動かす時の設定
public static string LOG_PATH = "/var/log/server.log";
public const string DISQUE_HOST_IP = "127.0.0.1";
public const int DISQUE_PORT = 7711;
#endif
}
}
LOG_PATH
サーバで出力するログのパスを指定します。
DISQUE_HOST_IP
Disqueを起動しているサーバのホスト名またはIPアドレスを指定します。
DISQUE_PORT
Disqueのポート番号を指定します。
初期値)7711
サーバソースのコンパイル
プログラムの配置が完了したら dotnet コマンドでソースをコンパイルします。
$> dotnet build
正常にコンパイルが完了したら以下のコマンドで実行します。
$> dotnet run