LightsailのUbuntu18.04に7 Days to Die鯖を構築する
月5,000円以下で運用したい、VPSでサクッと建てたい!と思ったのでLightsailでやることにしました。
マルチ鯖だと余裕で夜通しプレイするやつがいるので、基本的に24時間動かすことを前提にしています。
スペックは以下です。24時間稼働し続けても1ヶ月$40です。
さて、とりあえずコンソールでLightsailのインスタンスを作成して、SSHキーペアもアップロードして、静的IPも割り当てておきます。全部Webコンソールからポチポチでできます。
とりあえず環境構築
CentOSならWikiに手順が載っています。今回はUbuntu18.04を入れた前提なので64bitとして進めます。
まずは必要な依存パッケージとツールを導入していきます。dpkgでi386アーキテクチャを追加しておきます。
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install lib32gcc1
$ sudo apt-get install screen wget
次にSteam関連のツールとアップデートを行います。シェルスクリプトファイルを実行してプロンプトがSteam>になればOKです。Steamプロンプトはquitで抜けられると書いてあります。
$ mkdir ~/steamcmd
$ cd ~/steamcmd
$ wget http://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
$ tar zxvf steamcmd_linux.tar.gz
$ bash ./steamcmd.sh
...省略
Steam>
では早速コンソールからSteamプロンプトでログインしてみます。login {USER_NAME}するとパスワードを求められるので入力します。Steam Guardによって登録されているメールアドレスに認証コードが飛ぶので、それも併せて入力します。
Steam> login {YOUR_USER_NAME}
password: xxxxxxxxxx
This computer has not been authenticated for your account using Steam Guard.
Please check your email for the message from Steam, and enter the Steam Guard
code from that message.
You can also enter this code at any time using 'set_steam_guard_code'
at the console.
Steam Guard code:XXXXX
Logged in OK
Waiting for user info...OK
7 Daysのサーバーファイル一式をダウンロードします。294429というのは7 DaysのゲームIDのようです。7daysのゲームファイル一式を7dtd_serverディレクトリにダウンロードするというコマンドのようです。ダウンロードが終わるまで時間がかかるので気長に待ちましょう。
Steam> force_install_dir 7dtd_server
Steam> app_update 294420
...省略
Success! App '294420' fully installed.
Steam> quit
ダウンロードが完了したら、quitでSteamプロンプトを抜けてください。プロンプトを実行したカレントディレクトリに7dtd_serverというディレクトリが新しく作成されているはずです。
ここまでできたら次に7 Daysのサーバー設定を変更していきます。詳細な設定項目が知りたければコチラを参照ください。
$ cd 7dtd_server
$ vim serverconfig.xml
XML編集は人類にはまだ早いですが頑張りましょう。
サーバー設定の編集が終わったらいよいよ起動してみます。起動には時間がかかるので気長に待ちましょう。
$ screen -S 7dtd
$ ./7DaysToDieServer.x86_64 -logfile output.log -configfile=$HOME/steamcmd/7dtd_server/serverconfig.xml -dedicated
ゲームのプロセスを落とさずにセッションを離れたい場合は、Ctrl-A => Ctrl-Dでデタッチする事ができます。
再度アタッチしたい場合は、以下のコマンドを実行します。
$ screen -r 7dtd
サーバーのログファイルはoutput.logに出力されます。screen -rしてるとCtrl-Cなどしてしまった場合にサーバーが落ちてしまうので、ログを確認したい場合は以下のようにします。
$ tail -F output.log
or
$ view output.log
このままだとゲームクライアントからはまだ接続ができないので、最後にポートを開放してあげます。WikiによるとTCPの26900、UDPの26900-26903までを開放すると良いらしいです。
$ sudo iptables -I INPUT -p tcp -m tcp --dport 26900 -j ACCEPT
$ sudo iptables -I INPUT -p udp -m udp --dport 26900 -j ACCEPT
$ sudo iptables -I INPUT -p udp -m udp --dport 26901 -j ACCEPT
$ sudo iptables -I INPUT -p udp -m udp --dport 26902 -j ACCEPT
$ sudo iptables -I INPUT -p udp -m udp --dport 26903 -j ACCEPT
$ sudo iptables -L
chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:26903
ACCEPT udp -- anywhere anywhere udp dpt:26902
ACCEPT udp -- anywhere anywhere udp dpt:26901
ACCEPT udp -- anywhere anywhere udp dpt:26900
ACCEPT tcp -- anywhere anywhere tcp dpt:26900
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# このままだとUbuntuでは再起動時にiptablesが消えてしまうので、
# 再起動後にiptablesを復元してくれるやつをインストールします
$ sudo apt-get install iptables-persistent
サーバー起動時に以下のようなエラーが出ていますが、無視して大丈夫みたいです。ゲームクライアントからの接続時にoutput.logに何も出ない場合は、ネットワーク周りを疑いましょう。
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
良い7 Daysライフを