実は数日前にEasyAntiCheatの誤BAN騒動があったのですが、サポートに問い合わせたら謝罪とともにBAN解除されたのでRustを続けることにしました。
で、Rust Dedicated Serverを使って自分だけのRustサーバを作ることが出来るというのをどこかで見かけ、始めはWindows 10のローカルでRustDedicated.exeを起動して試していたのですが、段々と欲が出て結局VPSを借りて身内用に公開するに至ったのでその記録を書きます。
動機
- Rust Dedicated ServerはLinux用もあり、既にDockerイメージを作っている人までいた。
- 以前からVultr(VPS業者)の存在は知っていたものの利用したことはなかったのでちょっと試したかった。
主な動機はこの2点です。最初は自分でDockerイメージを作ったんですが、ちょっとした管理用インターフェイスまでつけたDockerイメージがあることを知ったのでそれ使えばいいや~ という流れです。
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チャンネルにお越しください。