Dockerでパルワールドサーバーをサクッと構築

## はじめに
対象読者（Windows・Mac）／除外：Linux
Linuxでも可能ですが、今回はWindows・Macにフォーカスをあてて記述します。

## 前提条件
・DockerDesktopがインストールされている
→未インストール場合はこの記事を先に(https://qiita.com/zembutsu/items/a98f6f25ef47c04893b3)

・CPU≥4コア・RAM≥16GB・ストレージ≥8GB

## 望ましい
・VsCodeがインストールされている

## 全体の流れ
1.任意の場所にサーバー用ディレクトリ作成
2.docker-compose.ymlの定義
3.サーバー構築
4.ポートの開放
5.接続
6.ワールド設定と変更

## 1.任意の場所にパルワールド用のディレクトリ作成
場所は任意ですが今回はhomeディレクトリに作成します
```powershell
# Windowsの人
cd %USERPROFILE%
mkdir palworld-server
```
```zsh
# Macの人
cd ~
mkdir palworld-server
```

データ用ディレクトリの作成
```powershell
# 共通
cd palworld-server
mkdir palworld
```
## 2.docker-compose.ymlの定義
VsCodeで開く
```powershell
code .
```
docker-compose.ymlの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/9bccdea6-df54-4de4-9065-91089326fe9c.png)

ファイルを開いて以下を貼り付け
```yaml
version: "3.8"
services:
   palworld:
      image: thijsvanloef/palworld-server-docker:latest
      restart: unless-stopped
      container_name: palworld-server
      stop_grace_period: 30s 
      ports:
        - 8211:8211/udp
        - 27015:27015/udp
      environment:
         PUID: 1000
         PGID: 1000
         PORT: 8211 
         PLAYERS: 3 
         SERVER_PASSWORD: "※※※サーバーのパスワード設定※※※" 
         MULTITHREADING: true
         RCON_ENABLED: true
         RCON_PORT: 25575
         TZ: "Asia/Tokyo" 
         ADMIN_PASSWORD: "※※※管理者パスワード設定※※※"
         COMMUNITY: false  
         SERVER_NAME: "※※※好きなサーバー名設定※※※"
         SERVER_DESCRIPTION: "サーバーの説明"
      volumes:
         - ./palworld:/palworld/
```
※がついている値は自分で設定してください
パスワードは強力なものをお勧めします

## 3.サーバー構築
起動 & 構築
```powershell
docker compose up -d
```
停止(厳密には削除だがバインドしてるのでok)
```powershell
docker compose down
```
## 4.ポートの開放
### サーバー用PCのプライベートipを確認
```powershell
# Windowsの人
ipconfig
```
```zsh
# Macの人
ipconfig getifaddr en0
```
こういうのが出てくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/bc8f6e5e-f525-4a79-8d59-51c643f87408.png)

### ルーター設定でポート変換
**※設定手順は自分の使用しているルーターに依存します**
今回は**BUFFALO**を例に出します。
以下の設定画面に遷移します、**BUFFALO設定**などで検索するとこのリンクが出てきます。
1.http://192.168.11.1/
2.ログインします、ルーター機器本体の裏にログイン用パスワードが記載されています
3.詳細設定→LAN→DHCPリソース
4.サーバーPCのプライベートIPアドレスを手動割り当てにして固定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/9e061c80-6c9f-49f1-a35c-1c32db82242c.png)
5.詳細設定→セキュリティ→ポート変換
6.画像のように設定
その1![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/c49fae1a-fd66-4beb-9981-2d94999c5a03.png)

その2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/423006a8-1d09-41d0-9035-4a55129be666.png)

LAN側のIPアドレスというのはプライベートipの事です

## 5.接続
パルワールドを起動して以下に接続情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/87ba2f1b-c008-48df-b1a0-4785cea97093.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844553/17b58d14-2b1e-4929-bd7a-56444484b0a4.png)


## 接続は主に2パターンあります
### 内部ネットワーク内から接続
噛み砕くと、同じWiFiを使用している機器から接続する場合
`サーバー用PCのプライベートip:8211`を入力

### 外部ネットワークから接続
噛み砕くと、お友達がオンラインで参加したい場合
`パブリックip:8211`を入力
パブリックipはここで確認できます
https://www.cman.jp/network/support/go_access.cgi

※固定するようなプランに入っていない限りパブリックipは変動するので、DDNSの設定をお勧めします。この設定をしない場合毎回自分のパブリックIPアドレスを調べて友達に教える手間が増えます。

※セキュリティ対策としてファイアウォールの設定も別途お勧めします。

## 6.ワールド設定と変更
1.起動中なら停止
```powershell
docker compose down
```
2.`docker-compose.yml`の`environment`に環境変数を追加します。
3.再構築
```powershell
docker compose up -d
```


ここではよく使う値だけ紹介します。詳しくは記事の最後に添付しているgithubから
| 変数名                              | 説明                                                         |
|-------------------------------------|--------------------------------------------------------------|
| **DIFFICULTY**                      | ゲーム全体の難易度（0=Easy, 1=Normal, 2=Hard）              |
| **EXP_RATE**                        | 経験値取得倍率（例: `2.0` で経験値2倍）                     |
| **DAYTIME_SPEEDRATE**               | 昼間の時間経過速度倍率（例: `1.0` が標準速度）              |
| **NIGHTTIME_SPEEDRATE**             | 夜間の時間経過速度倍率                                       |
| **PAL_CAPTURE_RATE**                | 捕獲成功率倍率（例: `0.5` なら半分の成功率）           |
| **PAL_SPAWN_NUM_RATE**              | フィールド上のパル出現数倍率                                 |
| **ENABLE_FAST_TRAVEL**              | ファストトラベル解禁 (`true`/`false`)                        |
| **IS_START_LOCATION_SELECT_BY_MAP** | マップ上で開始地点を選択可能にする (`true`/`false`)           |
| **IS_MULTIPLAY**                    | マルチプレイモードを有効化 (`true`/`false`)                  |
| **IS_PVP**                          | PvP（プレイヤー同士の戦闘）を有効化 (`true`/`false`)          |



# 使用しているDockerImage

https://hub.docker.com/r/thijsvanloef/palworld-server-docker

### github

https://github.com/thijsvanloef/palworld-server-docker

## 以上
気が向いたら既存ワールドのデータ移行方法も追記します