【配布有】Discord & WEBでARKの専用サーバー管理してみた

ARKでマルチプレイをするときに自分でサーバーを建てると思いますが、管理者のあなたがいないときに、参加者が起動や停止ってできますか?
全員SSHでログインできるならまだしも、普通はできないですよね。
さて、本記事ではそれを解決すべく制作した、ゲームサーバー管理サーバー&DiscordをARKで使う方法を紹介します。
この記事は以下で紹介している管理ツールをARKで使う場合の紹介記事になります。


何ができる?

まず何ができるものなのか、簡単に紹介しましょう。
詳細は上で紹介したツールの記事をご確認ください。

  • サーバーの起動や停止を管理できる
    通常はシェルスクリプトから起動し、終了はゲームごとに異なるプロトコルからシグナルを送信すると思いますが、それをボタンひとつでできるようにします。

  • WEBとDiscordで操作できる
    メインシステムがWEBサーバーで、管理者はウェブページから起動や停止、シャットダウンなどのボタンを押して操作することができます。
    参加者側はDiscordのBOTに対して指示を送ることで、BOTがこのWebサーバーのcgiにアクセスして操作する仕組みです。

WEB操作画面
Discord 指示チャット

ARKでの適用方法

ここではツールに関する記事を読んでいただき、理解している前提でARKで使う方法を解説します
ARKのサーバーは以下のように操作することとします

  • 起動方法
    シェルスクリプト

  • 終了方法
    RCONに"DoExit"コマンドを投げる

さて、ARKのサーバー定義フォルダの中身は以下のようになっています。

start.sh

このスクリプトを実行することで、ARKサーバーが立ち上げるように中身を記述します。
前半は起動中とアップデート中のブロッキング処理なので他のサーバーと同様です。
ARKでのオリジナルは18行目以下になります。
ワールド名やパスワードなどを一旦変数に入力してから実行パスに渡していますが、この部分は実行コマンドに直接入力してもらっても構いません。

中身

実行の行が長すぎたので、ここだけ別途書いておきます。

./ShooterGameServer ${WORLD}?listen?SessionName=${ServerName}?ServerPassword=${PassWD}?ServerAdminPassword=${AdminPass}?OverrideStructurePlatformPrevention=true?RCONEnabled=True?RCONPort=65000?QueryPort=65001?Port=65002? -port=65003 -server -servergamelog -crossplay

この中で大事なのはRCONポートを指定しておくことです。
ARKはRCONを使って外部からコマンド入力を受け付けることができます。これを使用してシャットダウンを行いますので、必ず外部コマンドを受け付けられる状態で起動してください。

stop.sh

停止する際に実行されるスクリプトです。
今回はPythonで自作したRCON送信スクリプトを実行して、ゲームの保存とサーバーシャットダウンのコマンドを連投しています。

update.sh

サーバーのアップデートを行う際に実行されるスクリプトです。
SteamCMDからのゲームであれば、アプリケーションIDを変えるだけでどんなゲームでも共通です。

必要なファイルを作成し、ツールを再起動したら任意の方法で起動してみましょう。
心配であれば事前に知恵スクリプトをターミナルから実行し、サーバーが立ち上がることを確認しておいた方がいいでしょう。
今回はぶっつけ本番でしたが、問題なく起動したようですね。

そして、同じく停止のスクリプトも実行してみました。
ゲームに入った状態で停止したのが以下の画面です。きちんと停止していることが分かります。

まとめ

今回はサーバー管理ツールをARKで使ってみました。
シルスクリプトで起動&何らかの通信プロトコルで終了できるサーバーであれば、他にどんなゲームでも適用できます。
メモリが許す限り、複数のゲームのサーバーを同時並行で立ち上げることもできますね。

情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。