RustのマルチサーバーをVPSのテンプレート等使わず構築する方法を説明します。
OSはUbuntuを想定しています。
前提条件
本記事では以下の環境で構築することを前提としています。
- OSはUbuntu 22.04 であること
- 「rust」の名前で一般権限ユーザ作成済みであること
「rust」以外の名前でも問題ありませんが、本記事はrustユーザの前提なので変える場合は適宜読み替えてください。
本記事の操作は全てrustユーザで行います。
SteamCMDインストール
1.rustユーザでホームディレクトリに移動します。
$ su -u rust -s
$ cd /home/rust
2.aptでSteamCMDをインストールします。
$ sudo add-apt-repository multiverse
$ sudo apt install software-properties-common
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt install lib32gcc-s1 steamcmd
$ sudo ln -s /usr/games/steamcmd /home/rust/steamcmd
Rustサーバーモジュールインストール
1.サーバーモジュールを配置するディレクトリを作成します。
$ sudo mkdir /opt/rust_server
$ sudo chmod 766 /opt/rust_server
$ sudo chown rust:rust /opt/rust_server
2.SteamCMD経由でサーバーモジュールをダウンロード
$ /usr/games/steamcmd +force_install_dir /opt/rust_server +login anonymous +app_update 258550 validate +quit
$ ll /opt/rust_server
⇒ファイルやディレクトリが作成されていれば成功
起動スクリプト作成
起動オプション等を記載したスクリプトファイルを作成します。
1.スクリプトファイルを配置するディレクトリを作成します。
$ mkdir /opt/rust_server/bin
2.スクリプトファイルを作成
$ vi /opt/rust_server/bin/start_rust.sh
3.中身を記載
#!/bin/sh
exec /opt/rust_server/RustDedicated \
-batchmode \
-server.ip 0.0.0.0 \
-server.port 28015 \
-server.queryport 28016 \
-rcon.ip 0.0.0.0 \
-rcon.port 28016 \
-rcon.password "fawf" \
-server.maxplayers 100 \
-server.hostname "[JP]DoraSaba.jp Battlefield/Loot+/1000x/Minicopter" \
-server.identity "RustServer" \
-server.level "Procedural Map" \
-server.seed 2102973004 \
-server.worldsize 3500 \
-server.saveinterval 600 \
-server.description "Welcome to DoraSaba!!\nDiscord: https://discord.gg/ujfavZsqQr \nCommands\n/mymini Spawn Minicopter.\n/nomini Call the Minicopter you have.\n/fmini Delete the Minicopter you have." \
-server.url "https://discord.gg/ujfavZsqQr" \
-server.tags "weekly,training,EA"
主なパラメータには以下のものがあります。
パラメータ | 説明 |
---|---|
-batchmode | GUIなしで起動する サーバーはGUIで起動する必要はないので、基本指定します。 |
server.ip | サーバーに接続する際のIPアドレス 特殊なネットワーク構成にしていなければ「0.0.0.0」で自動的に設定されます。 |
server.port | サーバーに接続する際のポート番号 特別な理由がなければ「28015」で大丈夫です。 |
server.queryport | クエリポート 役割はわかりませんが、2023年2月から設定が必須になりました。 server.portの番号とは被らせないでください。 後述のrcon.portとは被っても問題ありません。 |
rcon.ip | rconのIPアドレス 特殊なネットワーク構成にしていなければ「0.0.0.0」で自動的に設定されます。 |
rcon.port | rconを受け付けるポート番号 特別な理由がなければ「28016」で大丈夫です。 |
rcon.password | rcon接続時のパスワード 簡単なパスワードにすると管理を乗っ取られてしまうので複雑なものにしてください。 |
server.maxplayers | 最大参加人数 |
server.hostname | サーバー名 サーバー一覧に表示する際のサーバー名です。 |
server.description | サーバーの説明文 サーバー選択時に表示するサーバーの説明文です。 「\n」で改行できます。 |
server.url | サーバー選択時に「WEBサイトを表示」をクリックした際にアクセスするURL ホームページやDiscordの招待URLを設定できます。 |
server.tags | サーバーのタグ サーバー一覧に表示する際のタグを設定します。 |
server.identity | サーバー識別名 マップファイル等を配置するディレクトリの名前で使われます。 本記事の設定なら/opt/rust_server/serverの下に作成されるディレクトリ名です。 |
server.level | マップ種別 いろいろ設定できるようですが、基本「Procedural Map」です。 |
server.seed | シード値 マップを生成する際のシード値です。 シード値毎に生成されるマップはRustMapで確認できます。 ※マップサイズとセットで生成内容が変わります。 |
server.worldsize | マップサイズ マップを生成する際のサイズです。 でかすぎるとサーバーが重くなるので適度に調整してください。 |
server.saveinterval | セーブ間隔(単位:秒) マップやプレイヤー情報をセーブする間隔を秒単位で指定します。 セーブ処理はかなり重く、セーブ時にラグが発生することがあるため、間隔があまりに短いと常にラグくなります。 600(10分)がちょうどいいくらいです。 |
server.globalchat | グローバルチャット使用可否 true:使用可、false:使用不可 |
パラメータ | 説明 |
Oxideインストール
uModなどで配布されているプラグインを動作させるためにOxide環境を準備します。
1.unzipコマンド、wgetコマンドのインストール
$ sudo apt install unzip
$ sudo apt install wget
2.Oxideの配置ディレクトリへの移動とダウンロード
$ cd /opt/rust_server
$ wget https://umod.org/games/rust/download/develop -O oxide.zip
3.oxide.zipを展開
$ unzip -o oxide.zip
Systemdファイルを作成
先に作成したスクリプトファイルを実行するとコンソールに出力されてそこから離れられなくなり不便なので、Rustの起動や停止をSystemdで管理できるよう必要なファイルを作成します。
1.ファイルを作成
$ sudo vi /etc/systemd/system/rust-server.service
2.内容を記載
[Unit]
Description=Rust Server
After=network-online.target
[Service]
Type=simple
User=rust
Group=rust
WorkingDirectory=/opt/rust_server
ProtectSystem=full
ExecStartPre=/usr/games/steamcmd +@sSteamCmdForcePlatformType linux +force_install_dir /opt/rust_server +login anonymous +app_update 258550 validate +quit
ExecStartPre=wget https://umod.org/games/rust/download/develop -O oxide.zip
ExecStartPre=unzip -o oxide.zip
ExecStartPre=+/usr/bin/chown -R rust:rust /opt/rust_server/
ExecStart=/opt/rust_server/bin/start_rust.sh
KillMode=process
KillSignal=SIGINT
Restart=always
[Install]
WantedBy=multi-user.target
サーバー起動
Systemd経由でRustサーバーを起動します。
1.起動コマンド実行
$ sudo systemctl start rust-server.service
2.起動確認
$ sudo systemctl status rust-server.service
3.停止コマンド実行
$ sudo systemctl stop rust-server.service
ポート穴開け
ubuntuは初期状態だとファイアウォールが有効ではないので、自宅内からであればそのまま接続できます。
VPSなどで建てた場合はファイアウォールが有効な可能性があるので、適宜ポートの穴あけをしてください。
参考サイト
間違いや質問などありましたらコメントをお願いします。
コメント