実は数日前にEasyAntiCheatの誤BAN騒動があったのですが、サポートに問い合わせたら謝罪とともにBAN解除されたのでRustを続けることにしました。

で、Rust Dedicated Serverを使って自分だけのRustサーバを作ることが出来るというのをどこかで見かけ、始めはWindows 10のローカルでRustDedicated.exeを起動して試していたのですが、段々と欲が出て結局VPSを借りて身内用に公開するに至ったのでその記録を書きます。

動機

  • Rust Dedicated ServerはLinux用もあり、既にDockerイメージを作っている人までいた。
  • 以前からVultr(VPS業者)の存在は知っていたものの利用したことはなかったのでちょっと試したかった。

主な動機はこの2点です。最初は自分でDockerイメージを作ったんですが、ちょっとした管理用インターフェイスまでつけたDockerイメージがあることを知ったのでそれ使えばいいや~ という流れです。

コンソールとログ
サーバのstats

Vultrは数ヶ月前まで初回の入金が2倍(最大$100)でチャージされるキャンペーンをやってたみたいなんですが、残念ながら私がアカウント作ったときには終わっていたようです。

VPSを借りる

Vultrは海外VPS業者ですが、東京リージョンがあるそうなのでping値が気になるゲーム用途にはいいんじゃないかと思い採用しました。同価格帯のスペックで見ても、ConoHaやさくらVPSとかより少しお安く、スペックのバランスも好印象。

今回はVultr Cloud Computeの$20プランを選択しました。CPUは「2 CPU」としか書かれていないのでだいぶ不安ですが、少人数でしか使わないのでまずは4GBメモリを基準にこのプランにしています。これで不足するなら次は$40プランになるので、支払いがきつくなりそうです。

支払いと言えば、Vultrは前金チャージ制なのでサービス利用をやめるときに無駄が多く発生しそうなのと、一気に入金すると安心してしまって次の入金を忘れてしまいそうになるのがネックです。今回は一気に$100入れたので、問題がなければ年内は運用できるはずです。

Docker関連の下準備

VPSはOSをUbuntu 16.04(64bit)にしました。Dockerホストに慣れればいいので他のOSでもいいんですが、まぁ慣れてる物がいいやってことで。

Ubuntuへのインストール方法は公式ドキュメントにあるので問題はないでしょう。Linux向け追加作業としては「Manage Docker as a non-root user」と「Use a different storage engineでストレージドライバをoverlayに変更」の2点、後はSwarm Modeを使うのでdocker swarm initでDockerのSwarm Modeに切り替えるといった作業をしました。

Rust Dedicated Serverを起動

先にも書きましたがRust Dedicated Serverに加えてRCONによる管理を行うためのWebインターフェイスも搭載しているDockerイメージが既にあるのでそれを使わせてもらっています。 →didstopia/rust-server

おまけにこのDockerイメージは、環境変数を1個追加するだけでOxideというMODを管理するMODが自動的にインストールされるようにもなっていたり、RUSTのアップデートも自動で行えるようにもなっていたりするようなので非常に便利そうです。

特に意味もなくDocker Swarm Modeを使っていることもあってほぼ需要はないと思いますが、こんな感じのDocker Compose File V3を用意して起動しています。

version: '3.2'
services:
  rustds:
    image: didstopia/rust-server
    ports:
      - 28015-28016:28015-28016
      - 28015:28015/udp
      - 8080:8080
    volumes:
      - rustds-data:/steamcmd/rust
    environment:
      TZ: Asia/Tokyo
      RUST_SERVER_STARTUP_ARGUMENTS: -batchmode -nographics -logfile /dev/stdout +decay.scale 0.3
      RUST_SERVER_IDENTITY: plusultra
      RUST_SERVER_SEED: 1234568
      RUST_SERVER_NAME: PlusUltra dedicated server
      RUST_SERVER_DESCRIPTION: A playroom for PlusUltra members.
      RUST_SERVER_URL: https://xxx.xxx.xxx/
      RUST_SERVER_BANNER_URL: http://xxx.xxx.xxx/banner.jpg
      RUST_RCON_PASSWORD: xxxxxxxxxxxxxxxx
      RUST_UPDATE_CHECKING: 1
      RUST_SERVER_WORLDSIZE: 3500
      RUST_SERVER_MAXPLAYERS: 15
      RUST_SERVER_SAVE_INTERVAL: 300
      RUST_OXIDE_ENABLED: 1
    deploy:
      replicas: 1
      restart_policy:
        condition: any
      update_config:
        parallelism: 1

volumes:
  rustds-data:
    driver_opts:
      type: none
      device: /var/rust/rustds
      o: bind

Docker ComposeファイルではありますがSwarm Modeで使うのでdocker-composeはインストールしていませんしこのファイルの名前もdocker-compose.ymlではなくstack.ymlにしています。

SteamCMDやRustDedicatedといった更新頻度が高いものはvolumeを使ってコンテナ外のディレクトリに置くようにしていることと、RustDedicatedは28015/UDPポートも使うのでportsにUDPも指定する、あたりが特徴的かと思います。これを書いてしまえば後はコマンド1回でサービスが起動します。

$ docker stack deploy -c stack.yml rustds

起動したDockerコンテナのログを眺め、RCONのWebインターフェイスを見て、実際にRUSTを起動してサーバにJOINまでできれば成功です。

設定変更

今回使用しているDockerイメージではRustDedicated起動時の主要なオプションはRUST_xxxxxxxという環境変数に値をセットする形式でコンテナ起動時に値を設定できるようになっています。これで設定できるものは優先的に使用し、そうでないもの(例: +decay.scale 0.3)はRUST_SERVER_STARTUP_ARGUMENTSに追加していくのがよいかと思います。

MOD関連はOxideが有効になっていれば、コンテナ内の/steamcmd/rust/oxide/pluginsディレクトリにプラグイン名.csファイルを置き、RCONのコンソールでoxide.load プラグイン名を実行するかコンテナを再起動すれば有効になります。上記のディレクトリはホストOS上では/var/rust/rustds/oxide/pluginsが相当するので、ホストOS上で同ディレクトリにプラグインファイルを置く方がより簡単です。

プラグインが正常に読み込まれたらoxide/configディレクトリにあるプラグイン名.jsonファイルを編集したり、oxide/lang/enディレクトリにある言語別メッセージjsonファイルをoxide/lang/jaディレクトリにコピーして和訳するなどしてからRCONのコンソールでoxide.reload プラグイン名を実行して設定を更新します。コンテナ(ゲーム自体)の再起動は不要なので大変スバラシイ仕組みですね。

稼働させてみた感想

やっぱり先駆者のDockerイメージがあると楽ですね~

数日稼働させて、だいたい1日1回くらい設定変更などによるコンテナ再起動、同時ログインは最大で6くらいだと思いますが、サーバのfpsはおおよそ160~200くらいで推移しています。

リソース使用率グラフ

リソース使用率グラフで見るとCPUは常時何かの仕事をしていて上下動は激しいのですが、定常的なもののようなのでおそらくこれは問題ないように思います。ディスクはSSDということもあって、5分ごとに発生しているデータの保存時にもあまりゲームがカクつくといった影響を及ぼすことはないようです。

データ転送量

月額料金の不安定要素にデータ転送料金がありますが、転送量のグラフを見る限りではVPSからインターネットへの送信の方が若干多く、1日3GBにも満たないので$20プランの3,000GB枠で充分賄えそうです。

というわけでサーバの稼働は大きな問題もなく続けていけそうに思いますが、時々ちゃんと稼働しているかを確かめるためという名目でついついRustを起動してしまうのがいただけないですね (;´▽`)

お知らせ

ということでRustのメンバー限定サーバを稼働しています。PvEにしてはいませんが、ほとんどPvPは起こっておらず、建築にいそしんだりマップを探検したりしています。

DiscordのPlusUltraでログイン方法などをお知らせしていますので、ご興味がありましたらDiscord - PlusUltraのsteamチャンネルにお越しください。