Skip to content

Simutrans-ExtendedのマルチプレイサーバーをDockerを使って簡単に構築できるようにするための設定ファイル群です。

License

Notifications You must be signed in to change notification settings

soukouki/simutrans-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dockerを使ったSimutrans-Extendedサーバーのセットアップ

この記事(?)はSimutrans Advent Calendar 2025 - Adventarの18日目の記事です。

作ったもの

Simutrans-ExtendedのマルチプレイサーバーをDockerを使って簡単に構築できるようにするための設定ファイル群です。

  • command-line-server-build(GUI無し)バージョンのSimutrans-Extendedに対応
  • オートセーブ・毎時/毎日セーブに対応
    • 毎時セーブは直近24時間分、毎日セーブは無制限に保存されます

(あくまでSimutrans-Extended向けに作成していますが、修正を加えればStandard版やOTRP版でも動作すると思います)

この設定ファイル群はななさば1期で使用していた設定をベースにしています。

0. 事前にインストールが必要なもの

以下のソフトウェアがインストールされている必要があります。OSはLinuxを想定しています。WindowsやMacで動くかは未確認です。

  1. Docker
  2. Docker Compose

1. 実行ファイルの用意

  1. このリポジトリをクローンするか、緑の「Code」ボタンを押してDownload ZIPでダウンロードし、解凍して下さい。
  2. このフォルダを使ってサーバーを立てるので、適当に良さそうな場所に配置して下さい。フォルダ名は変更しても構いません。
  3. このフォルダにvolume-binフォルダとvolume-nettoolフォルダを作成して下さい。
  4. https://bridgewater-brunel.me.uk/downloads/nightly/packages/ からSimutrans-Extended-Complete.zipをダウンロードして解凍し、volume-binフォルダに配置して下さい。
    • この最新版の本体をベースに参加者向けの配布用クライアントを作成します。
    • 使用しないpaksetなどの不要なファイルを削除しても構いません。
  5. https://bridgewater-brunel.me.uk/downloads/nightly/linux-x64/ からnettoolをダウンロードしてvolume-nettoolフォルダに配置して下さい。
  6. volume-nettool/nettoolに実行権限を付与して下さい。コマンドラインでchmod u+x volume-nettool/nettoolを実行してください。
  7. 正しく配置できているかチェックして下さい。
    • README.mdがあるフォルダにvolume-binフォルダがあり、その中にsimutrans-extendedという実行ファイルがあればOKです。
    • README.mdがあるフォルダにvolume-nettoolフォルダがあり、その中にnettoolという実行ファイルがあればOKです。
  8. simuconf.tabの設定のsingleuser_installが0になっていることを確認して下さい。
    • ダウンロードしてそのままの場合は0になっていますが、他の場所からコピーしてきた場合は1になっている可能性があります。0に変更して下さい。

最新のNightlyバージョンではなく、事前に用意した特定のバージョンを使いたい場合は適宜4.の手順を変更して下さい。なお、nettoolはどのバージョンでもほとんど変わらないので、最新版を使っても問題ありません。

Simutrans-Extendedには安定版が存在しません。そのため、Nightlyビルドを頻繁に更新することは避けた方が良いでしょう。大きな変更が取り込まれてしばらくの間はNightlyビルドが不安定になることがあります。

2. セーブデータの配置

セーブデータをあらかじめ生成しておく必要があります。同じ本体を使ってセーブデータを生成した場合は2.aを、異なるバージョンの本体を使ってセーブデータを生成した場合は2.bを参照して下さい。

ちなみに、サーバーに接続したときのクライアント側のマップ位置は、セーブデータを生成したときのセーブ位置になります。

2.a まったく同じバージョンのデータを持ってくる場合

  1. このフォルダにvolume-saveフォルダとvolume-save/saveフォルダを作成して下さい。
    • mkdir -p volume-save/saveで一気に作成できます。
  2. 事前に作成したセーブデータをvolume-save/server13353-network.sveというファイル名でコピーして下さい。

2.b 他バージョンのデータを持ってくる場合

  1. このフォルダにvolume-saveフォルダとvolume-save/saveフォルダを作成して下さい。
    • mkdir -p volume-save/saveで一気に作成できます。
  2. 事前に作成したセーブデータをvolume-save/save/first.sveというファイル名でコピーして下さい。
  3. sudo docker compose up firstを実行して、ログが止まるまで待ちます。このとき、実行を中断しないで下さい。
  4. 同じバージョンの本体を手元の端末で起動し、サーバーに接続して下さい。
  5. ロードが終わり、ゲーム内時間が進み始めたら、セーブデータが変換され、適切な位置に保存されました。自身の端末の本体を閉じ、sudo docker compose up firstで動かしたコンテナをCtrl+Cで停止して下さい。
  6. 後始末として、sudo docker compose down firstを実行してコンテナを削除して下さい。

3. サーバー構築

GUIのない軽量な本体でサーバーを構築する場合(おすすめ)は3.aを、GUI付きの本体でサーバーを構築する場合は3.bを、VNCを使ってサーバー自体を操作する場合は3.cを参照して下さい。

3.a command-line-server-build(GUI無し版)で構築する場合

  1. https://bridgewater-brunel.me.uk/downloads/nightly/linux-x64/command-line-server-build/ からGUI無し版のsimutrans-extendedをダウンロードし、volume-binフォルダにheadless-serverという名前で配置して下さい。
  2. volume-bin/headless-serverに実行権限を付与して下さい。コマンドラインでchmod u+x volume-bin/headless-serverを実行してください。
  3. .envファイルを開き、nettool用のパスワードを設定して下さい。
  4. sudo docker compose up -d server-headless backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。

3.b GUIあり版で構築する場合

  1. .envファイルを開き、nettool用のパスワードを設定して下さい。
  2. sudo docker compose up -d server-general backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。

3.c GUIあり版にVNC接続できるようにして構築する場合

  1. .envファイルを開き、nettool用のパスワードを設定して下さい。
  2. sudo docker compose up -d server-vnc backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。
  3. VNCクライアントを使ってサーバーに接続して下さい。サーバーと同じマシンであれば、localhost(ポートはデフォルトと同じ5900番)に接続すれば良いです。別のマシンから接続する場合は、サーバーのホスト名またはIPアドレスを指定して下さい。

Tips

最新のセーブデータの場所

  • volume-save/server13353-network.sveに最新のセーブデータがあります。

GUI無し版でサーバーを立てると、クライアントを置いてけぼりにする問題

GUI無し版でサーバーを立てると、クライアントの処理が置いてけぼりになることがあります。GUI無しの本体では、描画処理が存在しない分サーバーの処理が高速になります。その結果、クライアント側の処理が追いつかず、ユーザーの操作が反映されるまでに数十秒かかりプレイ不可能になることがあります(なりました)。

この問題を解決するために、server-headlessの設定ではCPU使用率を70%に制限しています。これにより、クライアント側の処理が追いつきやすくなります。ただし、サーバーの処理が遅くなるため、サーバー側での時間進行が遅くなります。

この値は弊鯖での経験に基づいて設定していますが、環境によっては調整が必要かもしれません。docker-compose.ymlserver-headlessセクションのcpusの値を変更して試してみて下さい。

サーバーのログを見る

  • sudo docker compose logs -fn 100で最新100行のログをリアルタイムで確認できます。

サーバーの停止

  1. 手元の端末でSimmutrans-Extendedのクライアントを立ち上げ、サーバーに接続して下さい。この接続時の操作でセーブが行われます。
  2. sudo docker compose downですべてのコンテナを停止します。再度立ち上げる際にはbackupコンテナも一緒に立ち上げて下さい。

Rootless Dockerで動かしたい

backup/backup-hourly.shhost.docker.internalを使っている部分を使用するサービス名に変更し、docker-compose.ymlbackupセクションのextra_hostsを削除して下さい。

libminiupnpc.17について

# libminiupnpc.17が必要なので、誤魔化す
RUN ln -s /usr/lib/x86_64-linux-gnu/libminiupnpc.so.18 /usr/lib/x86_64-linux-gnu/libminiupnpc.so.17 && \
    ldconfig

動いてるからヨシッ!

参考資料

謝辞

本日の11時に、私を一番近くで育ててくれた祖母が長い眠りにつきました。祖母に感謝を込めてこの記事を捧げます。

About

Simutrans-ExtendedのマルチプレイサーバーをDockerを使って簡単に構築できるようにするための設定ファイル群です。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published