📝

Terrariaのサーバーを新しいDocker Compose定義で立てたメモ

2023/04/24に公開

新しい定義のポイント

  • Composeでこれまで指定してたバージョン句がない
  • healthcheck 句が復活してる
  • depends_on 句に healthcheck 句の条件を渡してる
services:
  terraria:
    image: ryshe/terraria:tshock-1.4.4.9-1.5.3-2
    ports:
      - "7777:7777"
    volumes:
      - ./Worlds:/root/.local/share/Terraria/Worlds
      - ./logs:/tshock/logs
      - ./plugins:/plugins
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      WORLD_FILENAME: "terraria.wld"
    stdin_open: true
    tty: true
    restart: always
  mysql:
    image: mysql:8.0.33
    ports:
      - "3306"
    command:
      - "--skip-log-bin"
      - "--slow_query_log=1"
    volumes:
      - mysql:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
      - ./mysql/config:/etc/mysql/conf.d
    environment:
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: terraria
      MYSQL_RANDOM_ROOT_PASSWORD: true
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "user", "-ppassword"]
      timeout: 20s
      retries: 10
    restart: always
volumes:
  mysql:

Terraria serverで情報が少なくて困ったこと

ryshe/terraria は起動までの自動化はほどほどにやってくれるけどサーバー設定そのものの自動化についてはほとんど何もやってくれない。

https://github.com/ryansheehan/terraria にある通りまず自前で docker run してワールドの生成と、それに付随して設定の JSON を吐き出させてからいろいろ設定をする必要がある。

ワールドの基本的なデータはファイルで保存されるけど、管理関係のデータはデフォルトでは SQLite3 に保存されるので MySQL にしたい場合は切り替え時にDumpしてがんばるか、コマンドでいろいろする前に最初に MySQL にするのがよい。

バックアップは自動でリストアみたいな仕組みはなくて、リネームされた古いファイルを WORLD_FILENAME で指定するファイル名に置き換えるだけでよい。

全体的にゲームサーバーのCPU使用率が無駄に平均的に高め。プラグインとかは試してないのでやってない。

Discussion