惰性Log

技術系の話題を中心に書いています

DockerでFactorioサーバーを建てるメモ

結論

sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
  -p 34197:34197/udp \
  -p 27015:27015/tcp \
  -v /opt/factorio:/factorio \
  --name factorio \
  --restart=always \
  factoriotools/factorio

何故わざわざDockerで?

Factorioサーバーを建てるためには、公式サイトからHeadless Serverをダウンロードして起動する必要がある。
Factorioサーバー起動時にはglibc2.18が必要となるが、CentOS7では標準でglib2.17が使用されている。
glibcとはGNUC言語実装ライブラリであるが、安易にglibcを導入するとカーネルが起動しなくなる恐れがある(なった)。
そのため、次の手段としてdockerを使用することにした。

サーバー構築

以下で紹介するのはCentOS7での方法である。

ポート開放

Dockerを入れる前に、ポートの開放とファイアウォールを通す必要がある。Factorioで使用するポートは34197(UDP)だ。

# firewall-cmd --add-port=34197/udp --zone=public --permanent  

Dockerの導入

# yum -y install docker
# systemctl start docker

Factorioイメージの導入

今回は一番メンテナンスがされているfactoriotoolsのコンテナを使用する。

https://hub.docker.com/r/factoriotools/factorio/

公式のガイドに沿って進めれば基本的に問題ない。

sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
  -p 34197:34197/udp \
  -p 27015:27015/tcp \
  -v /opt/factorio:/factorio \
  --name factorio \
  --restart=always \
  factoriotools/factorio

ただし、気をつけるべき点は上記のままでは最新版になってしまう。安定版では無いということで、すなわち公式サイトのExperimentsを含む最新のバージョンのことである。
例えば執筆時点のFactorioの最新バージョンは1.1.21だが、Experiments版は1.1.25だ。もし1.1.21のサーバーを建てるには、

sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
  -p 34197:34197/udp \
  -p 27015:27015/tcp \
  -v /opt/factorio:/factorio \
  --name factorio \
  --restart=always \
  factoriotools/factorio:1.1.25

のように末尾に「:」とバージョンを書けば良い。

実行

ドキュメントの通り、

# docker start factorio

停止

# docker stop factorio

動作確認(log)

# docker logs factorio

独自の問題?

私の環境だけの問題かもしれないが、初回実行時にPermission deniedが出た。ディレクトリの権限を変えたりなど色々試したが駄目だったので、一時的にセキュリティを外した。
一時的に外すためには、

# setenforce 0

とする。
ただしこれは最後の手段であるのでおすすめしない。
サーバーを建て終わったら、

# setenforce 1

SELinuxを再度有効化しておく。