結論
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とはGNUのC言語実装ライブラリであるが、安易に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を再度有効化しておく。