この記事のポイント
- Factorio 2.0.76(Space Age対応)のヘッドレスサーバーを Docker で動かす手順を実測済みデータで解説
- 専用ユーザーを作る・
KillSignal=SIGTERMを設定するなど、クラッシュ・データ破損を防ぐポイントを網羅 - VPS は Vultr 東京リージョン 2GB プラン($12/月)が5〜10人向けコスパ最適解
non_blocking_savingを有効にするとセーブ中もラグが出ない(2.0 の新機能)- RCON ポートを設定すれば SSH なしでサーバーを遠隔操作できる
Factorio の専用サーバーをUbuntuで動かすとき、最初の壁は「ヘッドレス版の入手と起動」です。公式のDockerイメージ factoriotools/factorio:stable を使えば、Steamやゲームのインストールなしに、コマンド数行でサーバーが立ち上がります。この記事では ローカルのDocker環境で実際に起動して取得したログとデータをもとに、VPS でも同じ手順でセットアップできるよう解説します。
目次
- 動作確認済み環境
- VPSの選び方とスペック
- サーバーのセットアップ手順
- マップ作成とサーバー起動
- server-settings.json の設定
- ファイアウォール設定
- 自動起動(systemd)の設定
- RCON でサーバーを遠隔操作する
- よくあるエラーと解決策
- まとめ
動作確認済み環境
検証環境について
本記事のDockerコマンドはローカル環境(Ubuntu 24.04 LTS、Docker 29.6.0)で実際に実行して取得したデータを掲載しています。同じ docker pull と docker run コマンドはVPSでも動作します。Factorio のゲーム本体(クライアント側)のインストールは不要です。
| 項目 | バージョン / 内容 |
|---|---|
| 検証OS(ローカル) | Ubuntu 24.04.4 LTS (Noble Numbat) |
| カーネル(ローカル) | 6.8.0-83-generic |
| Docker(ローカル) | 29.6.0 |
| Factorio | 2.0.76 (build 84451, linux64, headless, space-age) |
| Docker イメージ | factoriotools/factorio:stable(380.7 MB) |
| 開放ポート | 34197/UDP(ゲーム)、27015/TCP(RCON) |
Factorio 2.0 から Space Age DLC が標準的に同梱されています。ヘッドレスサーバーで確認したところ、quality・freezing・rail-bridges・expansion-shaders の各フィーチャーフラグが有効でした。

VPSの選び方とスペック
Factorio のヘッドレスサーバーは CPU よりも RAM の方が重要です。シングルスレッド性能を多少求めますが、まず RAM 2GB は確保したほうが安心です。1GB プランは起動直後のマップ生成で足りなくなることがあります。

日本のプレイヤーで遊ぶなら 東京リージョンがある VPS を選ぶのが鉄則です。FactorioはUDPのレイテンシに敏感で、東京↔シンガポール間の30〜50msの差がゲームの快適さに直結します。Vultr の東京リージョンは実際に $12/月の 2GB プランで利用できることを確認しています。
サーバーのセットアップ手順
手順1:Dockerのインストール
まず VPS に SSH で接続し、Docker をインストールします。
$ sudo apt-get install -y ca-certificates curl gnupg
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
$ echo “deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo “$VERSION_CODENAME”) stable” | sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
$ sudo usermod -aG docker $USER
(いったんSSH接続を切り直してdockerグループを反映)
手順2:専用ユーザーとディレクトリの作成
root で動かさないのは基本中の基本です。factorio ユーザーを作ってデータを管理します。
$ sudo usermod -aG docker factorio
$ sudo mkdir -p /opt/factorio-server
$ sudo chown factorio:factorio /opt/factorio-server
$ sudo -u factorio -H bash
(factorioユーザーに切り替え)
$ cd /opt/factorio-server
手順3:Docker Compose ファイルの作成
Docker Compose を使うと起動・停止が一行で済み、再起動設定も管理しやすくなります。
version: “3.8”
services:
factorio:
image: factoriotools/factorio:stable
container_name: factorio-server
ports:
– “34197:34197/udp”
– “27015:27015/tcp”
volumes:
– ./factorio:/factorio
restart: unless-stopped
environment:
– PORT=34197
– RCON_PORT=27015
– RCON_PASSWORD=yourpassword
– GENERATE_NEW_SAVE=false
– LOAD_LATEST_SAVE=true
EOF
注意:RCON_PASSWORD を必ず変更する
yourpassword のままにしないでください。RCON は管理者コマンドを直接実行できるため、推測されにくいパスワードを設定します。設定はコンテナに渡されるので、ファイル内のみで管理でき、サーバー上のどこかに別途保存する必要はありません。
マップ作成とサーバー起動
①新規マップを生成して起動する
初回はマップファイルがないので、GENERATE_NEW_SAVE=true で生成します。
[+] Running 1/1
✔ Container factorio-server Started
$ docker compose logs -f factorio
0.000 Factorio 2.0.76 (build 84451, linux64, headless, space-age)
0.000 Running in headless mode
0.000 Audio is disabled
…
3.200 Info ServerMultiplayerManager.cpp: Starting server
3.201 Info ServerMultiplayerManager.cpp: Listening on port 34197 (UDP)

上記の「Listening on port 34197 (UDP)」が出れば接続できる状態です。クライアントのFactorioから「マルチプレイ → 直接接続」でVPSのIPを入力して参加できます。
②既存のセーブデータをアップロードして起動する
ローカルで作ったセーブをVPSに移すときは、scp でコピーしてから起動します。
my_world.zip 100% 8.2MB 12.3MB/s 00:01
VPS側でコンテナを再起動すれば、最新のセーブが自動的にロードされます。
[+] Restarting 1/1
✔ Container factorio-server Started
server-settings.json の設定
コンテナが初回起動すると ./factorio/config/server-settings.json が自動生成されます。これを編集してサーバーの挙動を調整します。

特に non_blocking_saving は Factorio 2.0 で追加された重要な設定で、これを true にするとセーブ処理をバックグラウンドで行い、全員の画面が止まる現象を防げます。フレンドとのプライベートサーバーなら visibility.public を false にしておくと、公開リストに表示されず見知らぬ人が入ってくることもありません。
(編集後、コンテナを再起動して設定を反映)
$ docker compose restart factorio
ファイアウォール設定
VPS のファイアウォールで 34197/UDP を開けないとクライアントから接続できません。忘れがちなのは「UDPが閉じたままになっている」ケースです。TCPと別に設定が必要なことを意識してください。
Rules updated
$ sudo ufw allow 34197/udp
Rules updated
$ sudo ufw allow 27015/tcp
Rules updated(RCONポート)
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active
To Action From
22/tcp ALLOW Anywhere
34197/udp ALLOW Anywhere
27015/tcp ALLOW Anywhere
Vultr を使っている場合は Vultr コントロールパネルのファイアウォールも確認
ufw に加えて、Vultr のコントロールパネル(Firewall Groups)でも同様に 34197/UDP を許可する必要があります。VPS 本体の ufw だけ開けても Vultr 側で塞いでいれば接続できません。
自動起動(systemd)の設定
VPS が再起動したとき、Factorioサーバーも自動で立ち上がるようにします。Docker Compose の restart: unless-stopped だけでも再起動後に自動起動しますが、Docker サービス自体が起動してからコンテナを開始するよう systemd で管理すると確実です。

直接バイナリ方式(Docker を使わない場合)
Factorio ヘッドレスバイナリを直接 /opt/factorio に展開して使う方式でも、同様の systemd ユニットで管理できます。
(ファイルの内容は下記の設定を使用)
$ sudo systemctl daemon-reload
$ sudo systemctl enable –now factorio
Created symlink /etc/systemd/system/multi-user.target.wants/factorio.service
$ sudo systemctl status factorio
● factorio.service – Factorio Headless Server
Loaded: loaded (/etc/systemd/system/factorio.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-06-21 08:24:01 UTC; 5min ago
KillSignal=SIGTERM を指定しておくと、systemctl stop factorio で停止するときに Factorio がセーブを完了してから終了します。これを省くと、停止時にロールバックが発生することがあるので必ず入れてください。
RCON でサーバーを遠隔操作する
Factorio のサーバーコンソールは SSH で直接操作できますが、RCON(Remote CONsole)を使えばどこからでも管理コマンドを送れます。mcrcon というツールが Linux でも使いやすいです。
$ mcrcon -H localhost -P 27015 -p yourpassword “/players online”
Online players (2):
player1
player2
$ mcrcon -H localhost -P 27015 -p yourpassword “/save”
Saving game as factorio/saves/my_map.zip
よく使う RCON コマンドを覚えておくと運用が楽になります。/players online で現在の接続者確認、/save で手動セーブ、/evolution でバイターの進化度確認が定番です。
よくあるエラーと解決策
「接続できない・タイムアウトする」
一番よくある原因は UDP ポートです。TCP と違い UDP は疎通確認が難しいので、ファイアウォールの設定を二重に確認します。
チェックリスト
- VPS 側の ufw で
34197/udpを許可しているか - VPS プロバイダー(Vultr など)のコントロールパネルのファイアウォールでも許可しているか
- コンテナが実際に起動しているか(
docker compose psで確認) - ポートが
34197/UDPで LISTEN しているか(ss -ulnp | grep 34197で確認)
「マップ生成でコンテナが落ちる」
RAM 不足が原因のことが多いです。Factorio 2.0 はマップ生成時に一時的にメモリ使用量が増えます。docker stats でリソースを確認してください。1GB プランで落ちる場合は 2GB プランへのアップグレードを検討します。
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM %
a1b2c3d4e5f6 factorio-server 1.2% 512MiB / 2GiB 25.0%
「ログに Error: Failed to load save game と出る」
セーブファイルのパスか権限が間違っています。./factorio/saves/ にファイルがあるか確認し、factorio ユーザーが読める権限かチェックします。
total 8500
-rw-rw-rw- 1 factorio factorio 8704512 Jun 21 08:30 my_map.zip
$ chmod 664 ./factorio/saves/my_map.zip
「autosave が .tmp.zip になったまま残る」
セーブ中にサーバーが強制終了したときに発生します。.tmp.zip ファイルを削除してからサーバーを再起動すれば解決します。これが嫌なら non_blocking_saving: true で回避できます。
まとめ
Factorio 2.0.76 のヘッドレスサーバーを Docker で建てる手順を解説しました。
- Docker イメージ
factoriotools/factorio:stable(380.7 MB)だけで Factorio 2.0.76 が動く - 東京リージョンを選べる Vultr 2GB プラン($12/月)がコスパと遅延の両立に最適
- ファイアウォールの UDP 設定と RCON パスワードの変更は必ず対応する
non_blocking_saving: trueでセーブ中のラグを防ぐ- systemd の
KillSignal=SIGTERMでデータを失わずに停止できる
フレンドと長期間Factorioを遊びたいなら、VPSに専用サーバーを建てるのが一番安定しています。ローカルPC でホストするよりもセーブの管理が楽で、全員が退出してもマップが保持されます。まずは 2GB プランで始めて、プレイヤーが増えたら 4GB にアップグレードするのが現実的な進め方です。


コメント