【パルワールド】レンタルサーバーを使った専用サーバーの建て方【Linux】

動画

以下、上記の動画のコマンドとなります

SELinuxの無効化

# ユーザーrootにログイン
sudo su -

# SELinuxの無効化
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 再起動して反映
reboot

ユーザーpalworldの作成

# ユーザーrootにログイン
sudo su -

# ユーザーpalworldを作成
sudo useradd -m palworld

# ユーザーpalworldのパスワードを設定
passwd palworld

# sudoを付与
sudo usermod --append -G wheel palworld

PalWorldServerのインストール

# ユーザーpalworldにログイン
su - palworld

# glibc.i686 libstdc++.i686 tar をインストール
sudo dnf install -y glibc.i686 libstdc++.i686 tar

# steamcmd_linux.tar.gz をダウンロード
curl -o steamcmd_linux.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

# steamcmd_linux.tar.gz の解凍
tar xf steamcmd_linux.tar.gz

# steamcmd.sh を実行
./steamcmd.sh

# ユーザ認証は不要なので anonymous でログイン
login anonymous

# /home/palworld/Steam/palworld/ をインストールディレクトリに指定
force_install_dir /home/palworld/Steam/palworld/

# Palworld を示す 2394010 を指定してインストール
app_update 2394010 validate

# steamcmd を抜ける
quit

# インストールしたディレクトリに移動
cd /home/palworld/Steam/palworld

# 起動確認
./PalServer.sh

# サーバーをシャットダウンする
【Ctrl + C】キー

# フォルダを作る
mkdir -p /home/palworld/.steam/sdk64/

# steamclient.soのリンクを作成
ln -s /home/palworld/linux64/steamclient.so /home/palworld/.steam/sdk64/steamclient.so

# 起動確認
./PalServer.sh

# サーバーを停止する
【Ctrl + C】キー

ファイアウォールのインストールとポート開放

# firewalldをインストール
sudo yum -y install firewalld

# firewalld有効化
sudo systemctl start firewalld

# 有効化になっているか確認する(緑ならOK)
sudo systemctl status firewalld

# 操作できるようにする
【Q】キー

# 8211/UDPポートを恒久的に開放
sudo firewall-cmd --add-port=8211/udp --zone=public --permanent

# 設定を有効化
sudo firewall-cmd --reload

# 設定状態の確認
sudo firewall-cmd --list-all

自動起動の設定

# 起動設定ファイルを作成し開く
sudo vi /etc/systemd/system/palworld-dedicated.service

###ここから###
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStart=/home/palworld/Steam/palworld/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
User=palworld
Group=palworld
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
###ここまで###

# ファイルを閉じる
:wq

# デーモンの再起動
sudo systemctl daemon-reload

# 自動起動設定
sudo systemctl enable palworld-dedicated.service

# サーバの起動
sudo systemctl start palworld-dedicated.service

# ゲームサーバの起動状態を確認する
systemctl status palworld-dedicated.service

# 操作できるようにする
【Q】キー

自動再起動の設定

# ユーザーrootにログイン
sudo su -

# cronを編集する
crontab -e

# 入力モードに移行
【A】キー

# 行を追加する(下記の場合は毎日8時に再起動。8の部分を変更してください)
0 8 * * * /usr/sbin/shutdown -r now

# 入力モードを終了
【ESC】キー

# ファイルを保存
:wq

自動アップデートの設定

# ユーザーrootにログイン
sudo su -

# json を処理するための jq コマンドをインストール
sudo dnf install -y jq

# アップデートスクリプトを作成
vi /home/palworld/update-palworld.sh

###ここから###
#!/bin/sh

# Paths
Steamcmd="/home/palworld/steamcmd.sh"
install_dir="/home/palworld/Steam/palworld"
service_name="palworld-dedicated.service"

echo "# Environment Check"
date

# Retrieve the current Build ID
OLD_Build=`$Steamcmd +force_install_dir $install_dir +login anonymous +app_status 2394010 +quit | grep -e "BuildID" | awk '{print $8}'`
echo "Current BuildID: $OLD_Build"

# Attempt to fetch the New Build ID using curl
NEW_Build=$(curl -s https://api.steamcmd.net/v1/info/2394010 | jq -r '.data["2394010"].depots.branches.public.buildid')

# Fallback to SteamCMD method if curl fails to retrieve data
if [ -z "$NEW_Build" ] || [ "$NEW_Build" = "null" ]; then
    echo "Failed to fetch New BuildID with curl. Resorting to SteamCMD."
    $Steamcmd +force_install_dir $install_dir +login anonymous +app_update 2394010 validate +quit > /dev/null
    NEW_Build=`$Steamcmd +force_install_dir $install_dir +login anonymous +app_status 2394010 +quit | grep -e "BuildID" | awk '{print $8}'`
fi

echo "Fetched New BuildID: $NEW_Build"

# Update the server if the Build IDs do not match
if [ "$OLD_Build" = "$NEW_Build" ]; then
    echo "No update required. Build numbers are identical."
else
    echo "# Updating the game server..."
    $Steamcmd +force_install_dir $install_dir +login anonymous +app_update 2394010 validate +quit > /dev/null
    echo "Game server updated successfully to BuildID: $NEW_Build"
    
    echo "Restart ${service_name} because an game update exists."
    sudo systemctl stop $service_name
    sudo systemctl start $service_name
    systemctl status $service_name
fi
###ここまで###

# 編集を保存して終了
:wq

# 実行権限を付与
chmod +x /home/palworld/update-palworld.sh

# アップデートスクリプトを実行してみる
/home/palworld/update-palworld.sh

# cronを編集
crontab -e 

# 編集モードに移行
【A】キー

# cronに行を追加(下記の場合30分ごとにアップデート確認)
*/30 * * * * /home/palworld/update-palworld.sh

# 編集モードを終了
【ESC】キー

# cronを保存
:wq

手動アップデートの仕方

# ユーザーpalworldにログイン
su - palworld

# アップデートする
/home/palworld/steamcmd.sh +force_install_dir /home/palworld/Steam/palworld +login anonymous +app_update 2394010 validate +quit > /dev/null

# サーバーを停止させる
sudo systemctl stop palworld-dedicated.service

# サーバーを起動する
sudo systemctl start palworld-dedicated.service

# サーバーの状態を確認する
systemctl status palworld-dedicated.service

スワップ領域の作成

# ユーザーrootにログイン
sudo su -

# ブロックサイズの計算(下記の場合は48GB。48の部分を変更してください)
BLOCK_SIZE=$(( 1024 * 48 ))

# スワップ領域の確保
dd if=/dev/zero of=/swapfile bs=1M count=$BLOCK_SIZE

# 権限を変更
chmod 600 /swapfile

# スワップを作成
mkswap /swapfile

# スワップの有効化
swapon /swapfile

# スワップの確認
free -m

# スワップファイルの永続化
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

自動バックアップの設定

# バックアップフォルダの作成
mkdir -p /home/palworld/backup/

# バックアップスクリプトの作成
vi /home/palworld/backup-palworld.sh

###ここから###
#!/bin/bash

# Define source directory and backup directory
SOURCE_DIR="/home/palworld/Steam/palworld/Pal/Saved/SaveGames/0"
BACKUP_DIR="/home/palworld/backup"
DATE=$(date +%Y%m%d_%H%M%S)

# Create a gzip compressed tarball
tar -czf "${BACKUP_DIR}/backup_${DATE}.tar.gz" -C "${SOURCE_DIR}" .

echo "Backup of ${SOURCE_DIR} completed at ${BACKUP_DIR}/backup_${DATE}.tar.gz"

# 一定期間経ったバックアップファイルの削除(下記の場合は14日。14の部分を変更してください)
find $BACKUP_DIR -name '*.gz' -mtime +14 -delete
###ここまで###

# ファイルを保存する
:wq

# 実行権限をつける
chmod +x /home/palworld/backup-palworld.sh

# バックアップ実行
/home/palworld/backup-palworld.sh

# タイムゾーンを確認
timedatectl

# Asia/Tokyo になっていない場合、タイムゾーンを Asia/Tokyo に設定
sudo timedatectl set-timezone Asia/Tokyo

# タイムゾーンを確認
timedatectl

# cronを編集
crontab -e

# 入力モードに移行
【A】キー

# 新しい行に追加する
0 * * * * /home/palworld/backup-palworld.sh

# 入力モードを終了
【ESC】キー

# 編集を保存
:wq

FTPサーバーのインストール

# rootにログイン
sudo su -

# vsftpdのインストール
dnf -y install vsftpd

# vsftpdコンフィグファイルのバックアップを取る
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

# vsftpdコンフィグファイルの編集
vi /etc/vsftpd/vsftpd.conf

# 入力モードに移行
【a】キー

###ここから###

# 12行目 : NO になっているか確認 (匿名ログイン禁止)
anonymous_enable=NO

# 100,101行目 : コメント解除して chroot 有効化
# chroot ディレクトリ配下の書き込み許可設定を追記
chroot_local_user=YES
chroot_list_enable=YES
allow_writeable_chroot=YES

# 103行目 : コメント解除 ( chroot リストファイル指定 )
chroot_list_file=/etc/vsftpd/chroot_list

# 109行目 : コメント解除 ( ディレクトリごと一括での転送有効 )
ls_recurse_enable=YES

# 最終行へ追記
# ローカルタイムを使用する
use_localtime=YES
###ここまで###

# 入力モードを終了
【ESC】キー

# 編集内容をセーブ
:wq

# chroot_listの編集
vi /etc/vsftpd/chroot_list

# 編集モードに移行
【a】キー

# chrootを適用しないユーザーを追加
palworld

# コマンドモードに移行
【ESC】キー

# 編集内容をセーブ
:wq

# vsftpdの自動起動を有効にしつつ起動
systemctl enable --now vsftpd

# ファイアウォールのFTPポートを開放
firewall-cmd --add-service=ftp

# 設定をファイルに書き込む
firewall-cmd --runtime-to-permanent

サーバーの起動・停止・確認

# サーバーの起動
sudo systemctl start palworld-dedicated.service

# サーバーを停止
sudo systemctl stop palworld-dedicated.service

# ゲームサーバの起動状態を確認する
systemctl status palworld-dedicated.service




いいなと思ったら応援しよう!