Ubuntu 20.04でPalworldのサーバーを建てる方法

# はじめに
今回はUbuntu 20.04を使ってPalworldのサーバーを建てる方法を記事にします。
レンタルサーバーの契約から記事にしようかと思いましたが、サーバー会社のUIなどが変わるとすぐに使えなくなってしまうので極力変更の入らないUbuntu側の記事だけにします。

筆者はWebAreana indigoを使って構築したので記事の一部WebAreana indigo特有の記載があります。
その辺は個々のサーバー環境に合わせてください。

# パルワールド公式ガイド
記事を書いた後に発見したので載せておきます！

https://tech.palworldgame.com/dedicated-server-guide#linux

# 前提条件
以下の方を対象に記事を作成しています。

・レンタルサーバーもしくは自鯖にUbuntu 20.04を導入済み
・Ubuntu 20.04の多少の知見あり
・windows 10 (Macは試したことありません)

# Palworld自鯖の推奨スペック

|説明|CPU|メモリ|
|:----|----|----|
|最低スペック|4コア以上|8GB|
|推奨スペック|4コア以上|16GB|

※後から人数が増えることがわかっている場合は推奨スペックで構築することをおすすめします。最低スペックは試していません(^o^)

# VPSに接続
WebAreana indigoでUbuntu 20.04を建てた場合は初期状態ではprivate_key.txtを
使ってログインしてください。コマンドプロンプトを起動して以下のコマンドを打ち込んでください。


※private_key.txtはWebAreanaでインスタンス作成時に使用したファイルです。

```
ssh -i private_key.txt ubuntu@サーバーのIPアドレス
```

問題なくログインができれば以降のコマンドを順番に打ち込んでください。

# root権限
```
sudo su -
```

# パッケージ更新
```
apt update && apt upgrade -y
```

# ファイヤーウォールの設定

```
# ファイヤーウォール有効化
ufw enable

#22番ポート開ける(SSH用)
ufw allow 22/tcp

#8211番ポート開ける(palworld用)
ufw allow 8211/udp

# 変更内容を適用するため設定の再読み込み
ufw reload

# 設定内容を確認
ufw status

# 結果は以下の通りになっていればOKです
22/tcp                     ALLOW       Anywhere
8211/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8211/udp (v6)              ALLOW       Anywhere (v6)

```

# Palworld用の設定
```
# ユーザーを作成(palworldという名前のホームディレクトリも作ります)
useradd -m palworld

# パスワードの入力を求められるので入力してください。

# アカウントのデフォルトログインシェルを /bin/bash に変更します
usermod -s /bin/bash palworld

# sudo権限付与
gpasswd -a palworld sudo

# rootユーザーからpalworldにユーザー切り替え
su - palworld

# SteamCMDインストールに必要なソフトを追加
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update

# SteamCMDインストール
sudo apt install steamcmd -y

# メッセージが表示されるのでOK,I AGREEと押してください。

# SteamCMDにログイン
steamcmd +login anonymous +app_update 2394010 validate +quit

# steamclient.soを/home/palworld/.steam/sdk64/にコピー
mkdir /home/palworld/.steam/sdk64/ && cp -r /home/palworld/.steam/SteamApps/common/PalServer/linux64/steamclient.so /home/palworld/.steam/sdk64/

```

# パルワールドシステムファイル作成

```
sudo vi /etc/systemd/system/palworld-server.service

# 以下の内容を書き込んで保存します。
#↓
[Unit]
Description=Palworld Dedicated Server
After=network-online.target

[Service]
Type=simple
LimitNOFILE=100000
User=palworld
Group=palworld

ExecStart=/home/palworld/.steam/SteamApps/common/PalServer/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
ExecStop=/bin/kill -s INT $MAINPID

Restart=on-failure
RestartSec=30
TimeoutSec=300

[Install]
WantedBy=multi-user.target
```

ファイルの保存が完了したら以下のコマンドを打ってください。

```
# systemdの再読み込み
sudo systemctl daemon-reload

# systemdの自動起動設定
sudo systemctl enable palworld-server.service
```

# Palworldサーバー起動
```
# パルワールドのサーバー起動
sudo systemctl start palworld-server

# パルワールドのサーバー起動状況確認
sudo systemctl status palworld-server
```

緑色の丸が表示されていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532264/b150be4e-7fd5-5f7c-7330-69f102071db5.png)

# Palworldを起動する

1. PCからPalworldを起動してください。
2. マルチプレイに参加する（専用サーバー）を選択してください。
3. サーバー一覧の下部にIPアドレスを入力する欄があるので、ここにIPアドレスとポート番号を入力してください。
4. Palworldが起動すれば完了です。

# セキュリティ設定
コマンドプロンプトを新しく立ち上げてから以下のコマンドを入力してください。

```
# VPSにログイン
ssh -i private_key.txt ubuntu@サーバーのIPアドレス

#  SSHサーバーの設定ファイルを編集
sudo vi /etc/ssh/sshd_config
```
viを使ってsshd_configを編集します。
viの使い方を知らない人は最低限以下の内容だけ覚えてください。

・i - 挿入モードに入る: カーソル位置から編集を始めます。カーソルがある文字の前に新しいテキストを挿入します。
・:q! - 編集を破棄して終了
・:wq - 編集を保存して終了

sshd_configの以下の項目が記載されている部分を書き換えてください。
```
PermitRootLogin no
PasswordAuthentication no
Port 54545   # 例としてポート54545に変更(番号は任意に変えてください)
```

保存した後は再起動してください。
```
#sshd_configを変更した場合は再起動させる
sudo systemctl restart sshd

# 54545番ポートを開ける
ufw allow 54545/tcp

# 22番ポートを閉じる
ufw deny 22/tcp

#変更を適用
ufw reload
```

※この時点では念のためコマンドプロンプトを閉じないで新しいコマンドプロンプトをログインできるか確認してみてください。ポート番号などを間違えてしまうとログイン出来なくなり、最初からやり直す羽目になります。

```
# サーバーにログイン(先程変更したポート番号を忘れずに)
ssh -p 54545 -i private_key.txt ubuntu@サーバーのIPアドレス
```

# 最後に
Palworldは1人でプレイする分にはサーバーを建てたりする必要はありません。
マルチプレイに参加する場合でも公式が用意してくれているサーバーがあるのでそちらに参加すれば本記事のような面倒な手順は必要ありません。
また、4人までなら招待コードを使えばマルチプレイが可能ですが、ホストが起動している間に限るので時間を合わせてインする必要が出てきます。（実際知り合いに誘われてPalworld始めたんですが、その人がいなくなったらゲームが強制的に終了させられました）

時間を合わせることが難しい場合は自分でサーバーを建てて管理するほうが良いと思いますが、費用もそれなりに掛かります。お財布と相談して建てるか検討してください。（私は勉強のために建てました。）

この記事が誰かの役に立てばと思います！

# メモ
クライアントPCとサーバーのパルワールドのバージョンが一致しないとサーバーに参加できないことがあります。その場合はSteamでクライアントPC側のアプリをアップデート、サーバーにログインしてサーバー側のアプリをアップデートすれば解決します。

```
# サーバー側はSteamCMDにログインにすれば自動でアップデートされる
steamcmd +login anonymous +app_update 2394010 validate +quit

# パルワールドサーバー停止
sudo systemctl stop palworld-server

# パルワールドサーバー起動
sudo systemctl start palworld-server

# パルワールドのサーバー起動状況を確認
sudo systemctl status palworld-server

```

# 設定ファイルの変更
パルワールドをプレイする中で襲撃によって拠点を何度も破壊されるのがかなり鬱陶しかったので設定ファイルをいじることで襲撃をなくすことにしました。拠点防衛は苦手です。
```
# サーバー停止
sudo systemctl stop palworld-server

# デフォルト設定ファイルのパスまで移動
cd /home/palworld/.steam/SteamApps/common/PalServer/

# DefaultPalWorldSettings.iniをコピー
cp DefaultPalWorldSettings.ini /home/palworld/.steam/SteamApps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

# 設定ファイル編集
vi /home/palworld/.steam/SteamApps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

# Falseにすると襲撃なし
bEnableInvaderEnemy=True

# サーバー起動
sudo systemctl start palworld-server
```