GoogleComputeEngine上にサーバを立ててUNETを動かす

この記事は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