Terraria のサーバをDockerで建てる

Terraria Journey's End最＆高すぎだけどなんかMacだといろいろインストールしないとサーバーを建てられないみたいなので、Dockerで建てました。

## 環境
- ubuntu-server 20.04 LTS (ホスト)
- docker version 19.03.9
- docker-compose version 1.25.0

※Dockerとdocker-composeの導入はここでは載せません。

## 今回建てるTerrariaサーバ
- Terraria ver1.4.0.4
- TSHOCK ver 4.3.26

## T-SHOCKとは
Terrariaサーバの大体はT-SHOCKとSteamフレンド経由で建てられているといっても過言ではない（主観）普通に建てるよりも軽いらしい、非常に細かい設定が出来る。ユーザーログイン、荒らし対策やアイテム持ち込み禁止などが設定でき、プラグインにも対応している。

## 作成
### 1. フォルダの作成
適当なフォルダ（今回はubuntu-serverという名前）を作成しその下に"docker-compose.yml"を作成。

```
ubuntu-server
└── docker-compose.yml
```

最終的にこうなる予定

```
ubuntu-server
├── docker-compose.yml
└── terraria/
    ├── Worlds（ワールドデータ）
    ├── logs（ログ）
    └── plugins（プラグイン）

```

### 2. docker-composeファイルの編集 & サーバ立ち上げ
今回はT-shockの[Dockerfile](https://hub.docker.com/r/ryshe/terraria)があるのでそれを利用する。
viやnano等のテキストエディタで"docker-compose.yml"を作成する。

```
version: "3"
services:

  terraria:
      image: ryshe/terraria:latest
      ports:
        - "7777:7777"
      # ボリュームマウントして永続化している
      volumes:
        - ./terraria/Worlds:/root/.local/share/Terraria/Worlds
        - ./terraria/logs:/tshock/logs
        - ./terraria/plugins:/plugins
```

Terrariaのサーバーを立ち上げる

```
docker-compose up -d
```

### 3. ワールドデータを作成する
Terrariaのサーバを立ち上げているコンテナに入る

```
docker-compose exec terraria /bin/bash
```

"/tshock"に入れるのでshでbootstrap.shを実行

```
sh /bootstrap.sh
```

質問に答えてワールドを生成していく

※ワールド名は後に使用するので控えておいて下さい。

```
[Server API] Info Plugin TShock v4.4.0.0 (by The TShock Team) initiated.
Terraria Server v1.4.0.4

n               New World (新規作成)
d <number>      Delete World

Choose World: n (新規作成のnを入力しEnter)

####################
####################

Terraria Server v1.4.0.4

1       Small
2       Medium
3       Large

Choose size: 3 （ワールドのサイズはラージの3で）

####################
####################

Terraria Server v1.4.0.4

1       Classic
2       Expert
3       Master
4       Journey

Choose difficulty: 3（新規追加されたMasterの難易度を選ぶ）

####################
####################

Terraria Server v1.4.0.4

1       Random （ランダム）
2       Corrupt （不浄の地）
3       Crimson （クリムゾン）

Choose world evil: 1（不浄かクリムゾンもしくはランダムを選ぶ今回はランダム）

####################
####################

Terraria Server v1.4.0.4

Enter world name: test-world (ワールド名 ※半角英数字 ※控えておく)

####################
####################

Terraria Server v1.4.0.4

Enter Seed (Leave Blank For Random): (シード値 今回は空)

####################
####################

生成される（省略）

####################
####################

最初のワールド選択に戻ると思うので、Ctrl+Cで抜ける
```

生成が完了したらコンテナを抜けましょう

```
exit
```

### 4. docker-composeの再編集

コンテナを一旦ダウンさせます

```
docker-compose down
```


viやnano等のテキストエディタで再び"docker-compose.yml"を編集する。

```
version: "3"
services:

  terraria:
      image: ryshe/terraria:latest
      ports:
        - "7777:7777"
      # ボリュームマウントして永続化している
      volumes:
        - ./terraria/Worlds:/root/.local/share/Terraria/Worlds
        - ./terraria/logs:/tshock/logs
        - ./terraria/plugins:/plugins
      # 追加ポイント
      # 先ほどの "ワールド名 + .wld"
      environment:
       WORLD_FILENAME: "test-world.wld"

```

編集が完了したら再びコンテナを立ち上げる

```
docker-compose up -d
```


これで立ち上げ完了

これでDockerでサーバが立ち上げることが出来ました。良いTerrariaライフを！！

### 6. あとがき
深夜テンションの殴り書きで書いたので不備があるかもしれません、なにか問題があればコメントでお願いします。