Open3

ConoHaでFactorioのサーバーを建てる

ねちょねちょ

初期設定で建てる

サーバー追加

ConoHa for GameならイメージタイプでFactorioを選択してサーバーを追加するだけで即接続可能なサーバーが起動する。

Factorioサーバーに接続する

Factorioを起動し、マルチプレイ>アドレスに接続を選択。
追加したサーバーのIPアドレスを入力して接続をクリックすると接続できる。

ねちょねちょ

サーバーの設定をする

SSH接続の準備

teratermやWinSCP等、ConoHaのコンソール以外からサーバーの操作を行う場合、セキュリティグループでポート22の通信を許可する必要がある。
IPv4v6-SSHという名前のセキュリティグループが最初からあるのでそれを設定すれば良い。

server-settings.jsonを配置する

Factorioのサーバー設定はjsonファイルで行うが、初期状態ではその設定ファイルは存在していない。
/opt/factorio/factorio/dataserver-settings.example.jsonがあるのでそれをserver-settings.jsonという名前で同じディレクトリにコピーする。

server-settings.jsonを編集する

server-settings.jsonに各パラメータの説明があるので必要そうなものを設定する。
特にname, game_password, オートセーブは設定しておくと良い。

server-settings.jsonを有効にする

/etc/systemd/system/factorio.serviceのExecStartを以下の通り変更する。

修正前
ExecStart=/bin/sh -c '/usr/bin/screen -DmS factorio /opt/factorio/factorio/bin/x64/factorio --start-server /opt/factorio/savedata/factorio_save'

修正後
ExecStart=/bin/sh -c '/usr/bin/screen -DmS factorio /opt/factorio/factorio/bin/x64/factorio --start-server /opt/factorio/savedata/factorio_save --server-settings /opt/factorio/factorio/data/server-settings.json'

以下のコマンドを実行しFactorioサーバーを再起動する。
再起動するとserver-settings.jsonが有効になる。

systemctl daemon-reload
systemctl restart factorio.service

設定が有効であることを確かめる

Factorioからサーバーに接続して設定が変わったことを確かめる。
もしサーバーへの接続が失敗したり設定が変わっていなかったりしたらログを確認する。
エラーが発生した場合 /opt/factorio/factorio/factorio-current.logに出力されているはず。

ねちょねちょ

rconを使う

ユーザーがサーバーを建てるゲームにはrconという機能が備わっていることがあり、factorioでも有効にすることが出来る。
rconを使うとサーバーの外部からコマンドを実行することが出来る。

rconを有効にして起動する

/etc/systemd/system/factorio.serviceのExecStartを以下の通り変更する。

修正前
ExecStart=/bin/sh -c '/usr/bin/screen -DmS factorio /opt/factorio/factorio/bin/x64/factorio --start-server /opt/factorio/savedata/factorio_save --server-settings /opt/factorio/factorio/data/server-settings.json'

修正後
ExecStart=/bin/sh -c '/usr/bin/screen -DmS factorio /opt/factorio/factorio/bin/x64/factorio --start-server /opt/factorio/savedata/factorio_save --server-settings /opt/factorio/factorio/data/server-settings.json --rcon-port 34197 --rcon-password パスワード'

以下のコマンドを実行しFactorioサーバーを再起動する。

systemctl daemon-reload
systemctl restart factorio.service

外部から接続可能にする

セキュリティグループの設定

rcon用のセキュリティグループは用意されていないので作成する。
ConoHaのコントロールパネルからセキュリティグループを開き、以下の設定で追加する。

通信方向 イーサタイプ プロトコル ポート範囲 IP/CIDR
In IPv4 TCP 34197 0.0.0.0/0
In IPv6 TCP 34197 ::/0

作成したセキュリティグループをサーバーに設定する。

ufwの設定

サーバー上で以下のコマンドを実行しポート34197の通信を許可する。

ufw allow 34197/tcp

接続テスト

適当なrconクライアントで適当なコマンドを実行してみる。
以下はpythonの例。

import factorio_rcon

client = factorio_rcon.RCONClient(IPアドレス, 34197, パスワード)
response = client.send_command("/time")
print(response)