Factorioサーバーの構築
Table of Contents
Factorioサーバーの構築
概要
Factorio Version 2と追加modのSpace Ageが2024年10月21日についにリリースされた。1 すでにシングルでプレイされている工場長もいるだろうが、 本稿ではマルチプレイで楽しみたい工場長のために、 私の環境でのFactorioサーバーの構築手順を共有する。
紹介するサーバーの構成は次のようになっている。
%%{init:{'theme':'dark'}}%% graph LR; client --- internet((internet)) internet --- DNS[(cloudflare DNS)] internet ===|PPPoE|router@{shape: cross-circ,label="a"} internet ---|IPv6 IPoE|router2@{shape: cross-circ} subgraph home[自宅] router === switch((switch)) router2 --- switch switch ===nic((nic)) subgraph host[ホスト] nic===|macvlan|container subgraph container[コンテナ] factorio end end end
Tip
- ホスト・コンテナともに
Ubuntu 24.04 LTS
を利用している。 - コンテナのマネージャーには
lxd
を利用している。- 筆者の好みです。記事として一般受けを狙うには
docker
を使うべきでしょう。
- 筆者の好みです。記事として一般受けを狙うには
- PPPoEによる経路は現状ではfactorio専用の経路になっている。
- この経路はルーターの設定よりDHCPを無効化してdefault routeの配信を止めています。
- 私のメイン回線はMAP-Eによる
IPv6 IPoE
を利用しているため、 任意のポートを開けることができないELECOMの無線ルーターでMAP-E
環境下で開放可能なポートを用いて port fowardingを試みたが何故か動作しなかったため、 以前使っていたルーターを用いてデュアルルーター構成になっている
Warning
DHCPがなにかわからない人は同じネットワーク内にルーターを2台以上設置しないでください。 ネットワークが動かなくなる恐れがあります。
LXD,DNS,factorioの順で説明します。
lxd
lxdは、Linuxカーネルのコンテナ機能を利用するマネージャツールで 類似のものにdockerがあります。
セットアップ
セットアップ方法はlxd-jaを参照してください。なお、ストレージのバックエンドはbtrfsでフォーマットしたパーティションを用意することをおすすめします。
最初にマシンの立ち上げには次のようにコマンドを叩きます。
lxd launch ubuntu:24.04 factorio # factorioと銘打ったコンテナを立ち上げる
次にホストのブリッジとは別系統のインターフェイスを作成します。
まず、ホストでmacvlanの親となるインターフェイスの名称を調べます。
ip a # 親にするインターフェイス名を調べる
lxc config device add factorio eth1 nic nictype=macvlan parent=インターフェイス名
そして、IPと経路情報を割り当てます。
lxc shell factorio # rootとしてログインする
ip a # 一応現状のネットワーク構成を確認しておく
vi /etc/netplan/50-cloud-init.yaml
netplan apply # エラーが出ないこと
ip a # eth1にアドレスが割り当てられていること
ip r # デフォルトルートが変更されていること
network:
version: 2
ethernets:
eth0:
dhcp4: true # ホストのブリッジのネットワークはDHCPを使う
eth1:
dhcp4: false
addresses:
- 192.168.0.80/24 # 静的に割り当てるアドレス
routes:
- to: default
via: 192.168.0.2 #ポート開放できるルータをデフォルトにする
nameservers:
addresses:
- 192.168.0.2
- 192.168.0.1
続けてfactorioを動かすためのアカウントを作成しておきます。
adduser factorio
cloudflare DNS
自宅サーバーのIPアドレスを名前解決するためにcloudflareのDNSを用いて DDNSを設定した。すでに自宅サーバーを名前解決できる人やcloudflare以外の サービスでドメインを登録する予定の人は読み飛ばしてもらってください。
Info
お金をかけたくない人はルーターの製造元と提携しているDDNSサービスや 無料で使えるduckdnsを利用するといいかもしれません。
理由付け
まず、cloudflareのDNSを用いた理由としては、
このブログで利用しているドメインterurin.work
はcloudflareで管理しており
別途ドメインを取得・管理するコストを抑えたかったためであり、
terurin.work
のサブドメインからIPアドレスを引けるように設定している。
なお、今回のケースではfactorioサーバーが配置される場所は 一般家庭向けの回線であることから周知の通りIPアドレスが変化する恐れがある。 そこでIPアドレスの変化を通知するDDNSへの対応が必要となる。
手順
今回、DDNSの設定にはcloudflareの記事2で進められていたddclient3を 利用した。
セットアップ手順としては、最初にcloudflareのDNSレコードにドメイン名から IPv4を引けるAレコードを追加します。 この際、プロキシステータスを必ず無効にしてください。
Info
プロキシステータスが有効にして名前解決を試みると、 自宅サーバーではなくcloudflareのサーバーのアドレスが引かれるようになります。
次にcloudflareのtokenを取得します。tokenは、次の場所から得られます。
- ユーザーアイコン
- マイプロフィール
- APIトークン
- グローバル API キー
そして、ddclientをセットアップします。
lxc shell factorio
apt update && apt upgrade -y
apt install ddclinet -y # プロンプトにてcloudflareのユーザー名やtokenが聞かれる
vi /etc/ddclient.conf # サブドメインや更新頻度を設定する。
ddclient -query #動作確認
- /etc/ddclient.conf
daemon=300 \
syslog=yes \
pid=/var/run/ddclient.pid \
protocol=cloudflare \
use=web, web=ipify-ipv4 \
zone=terurin.work, \
[email protected] \
password='xxxxxxxxxxxxxxxxxxxxxxxxxx' \
factorio.terurin.work
最後にサービスとして登録します。
systemctl start ddclient
systemctl enable ddclient
factorio
まず、factorioのheadless serverは factorio公式サイトからダウンロードして 適当な場所に展開します。
mkdir -p /opt/factorio # インストール先を作成しておく
wget https://www.factorio.com/get-download/2.0.32/headless/linux64 #バージョンは変化しているはず
tar -xf factorio-headless_linux_2.0.32.tar.xz
mv factorio-headless_linux_2.0.32/* /opt/factorio
chown -R factorio /opt/factorio #所有権をfactorio用のユーザーにしておく
次にfactorio用のユーザーで起動スクリプトと設定ファイルを作成します。
sudo -iu factorio
mkdir factorio
vi launch.sh
chmod +x launch.sh
cp /opt/factorio/data/server-settings.example.json server-settings.json
vi server-settings.json
./launch.sh #起動実験すること
- launch.sh
#!/bin/bash
dir=$(cd $(dirname $0); pwd)
/opt/factorio/bin/x64/factorio --start-server ${dir}/space.zip \
--server-settings ${dir}/server-settings.json
- server-settings.json
- クローズな環境を作成するなら
game_password
は設定しておくこと
- クローズな環境を作成するなら
そして自動起動できるように管理者に戻り、systemdを設定します。
vi /etc/systemd/system/factorio.service
systemctl start factorio # エラーが出ないこと
systemctl enable factorio
- factorio.service
[Unit]
Descriptionm = factorio daemon
[Service]
ExecStart = /home/factorio/factorio/launch.sh
Restart = always
Type= simple
User=factorio
Group=factorio
[Install]
WantedBy = multi-user.target
最後にfactorioの更新に備えて更新ツールを入れます。
sudo -iu factorio
cd factorio
wget https://raw.githubusercontent.com/narc0tiq/factorio-updater/refs/heads/master/update_factorio.py
chmod +x update_factorio.py
次のように更新します。
./update_factorio.py --apply-to /opt/factorio/bin/x64/factorio
では楽しい工場長ライフを!!