【パルワールド】レンタルサーバーを使った専用サーバーの建て方【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