この記事は2017年07月04日にqiitaに投稿した内容です。
環境
Unity5.6.2f1 Windows10 Home
概要
GoogleComputeEngine(AWSのEC2のようなの)上で、Linuxサーバのインスタンスを作成し、UNETのサーバプログラムを動かし、マルチ対戦します
GoogleComputeEngineの常時無料枠
以下のUrlに記載されています https://cloud.google.com/free/docs/always-free-usage-limits https://cloud.google.com/compute/pricing USリージョンの「f1-micro」インスタンスが1つ無料とあるようです(バージニア州北部を除く)
インスタンスの作成
以下のページで詳しく解説されています あぱーブログ 「Compute Engine インスタンスの作成」まで進める コンソールで「外部IP 」を確認しておく。(例:104.198.168.72)
GoogleCloudSDKのインストール
https://cloud.google.com/sdk/downloads?hl=ja 「対話型インストーラ」の記述に沿ってインストールします
ログイン
すでにSDKをインストールしていて別のアカウントで使用していた場合、ログインが必要です ・「gcloud auth login」と入力 ・アカウントを選択する
サーバのポート開放
・「コマンドプロンプト」を開く ・「gcloud compute firewall-rules create VVV --allow tcp:0-10000,udp:0-10000」と打ち込みリターン VVVはルール名(例:unet) 何番を開放すればよかったのかわからないので0から10000まで解放している コンソールの「VPCネットワーク」>「ファイヤーウォールルール」で確認できる https://console.cloud.google.com/networking/firewalls/list?project=heroic-passkey-178708&tab=INGRESS
UNETプログラムの用意
ここにテスト用のUNETプログラムを用意しました ・「Download」を押してzipをダウンロード ・zip内に含まれる「Linux」内のものがサーバにアップするプログラム ・「WinApp」内のものはサーバと接続するクライアントプログラム、またはローカル確認用のサーバプログラムを兼ねる
サーバにデプロイ(コピー)
・ダウンロードしたzipを展開する ・「コマンドプロンプト」を開き、「Linux」フォルダ内に移動する ・「gcloud compute copy-files *. XXX@YYY:」と打ち込みリターン XXXはユーザー名 YYYはインスタンス名 (例:gcloud compute copy-files *. fukaken5050@test-instance:)
sshでサーバに接続
・「コマンドプロンプト」を開き、「Linux」フォルダ内に移動する ・「gcloud compute --project "AAA" ssh --zone "BBB" "XXX@YYY"」と打ち込みリターン AAAはプロジェクト名 BBBはインスタンスのリージョン XXXはユーザー名 YYYはVMインスタンス名 (例:gcloud compute --project "testcomputeengine-171603" ssh --zone "us-central1-a" "fukaken5050@test-instance") 内部で「putty」が実行されてサーバのコマンドラインが入力できるようになる
実行権限の付与
・「putty」上で「chmod u+x EEE」と打ち込みリターン EEEはプログラム名(例:chmod u+x server.x86_64)
サーバプログラムの実行
・「putty」上で「nohup ./EEE -logFile server.log &」と打ち込みリターン EEEはプログラム名(例:nohup ./server.x86_64 -server -logFile server.log &) -serverはUNETプログラム内部で使用している独自のパラメータ ・「Ctrl+C」でプロンプトに戻る
テスト用クライアントプログラムの実行
・ダウンロードしたzipを展開する ・「WinApp」>「test.exe」を実行する ・「接続先」に外部IPを入力する(例:104.198.168.72) ・「設定」を押す ・「クライアント」を押す サーバに接続される ・もう一つ「test.exe」を実行し、「クライアント」を押す ・片方は「募集」、もう一つは「参加」で対戦する
プロセスの停止
・「putty」上で「ps x」と入力 実行されているプロセス一覧が表示される ・「Kill XXX」と入力 XXXはプロセスID
プロセスを監視して再実行
サーバプログラムが落ちてしまった場合に、自動で再実行します
execServer.sh ・「nohup ./execServer.sh &」と入力
#!/bin/bash
while true
do
isAlive=`ps -ef | grep "server.x86_64" | grep -v grep | wc -l`
if [ $isAlive = 0 ]; then
echo "serverを実行します"
nohup ./server.x86_64 -server -logFile server.log &
fi
sleep 10
done