れいんず/リインのブログページ

【旧】パルワールドのサーバー構築手順のメモ書き

2024-02-02

最近流行りのパルワールドのサーバーを自宅のサーバー上に構築することになったのでやり方をメモしておくことにしました。

〇はじめに

調べてみるとサーバーを構築するやり方がいくつかあるようですね。個人的に調べた感じだと以下の3つに分類される???

  1. WindowsSteam
  2. WindowsSteamCMD
  3. LinuxSteamCMD

サーバーやLinuxに詳しくない人は1や2の方法を選択することになると思いますが、普段サーバーにはLinuxを使っている人なので自然と3の方法で構築することにしました。

以下のサイトが公式の手順?っぽいなぁと思いつつ、正式な手順がどれになるのか未だによくわかっていない感じです。

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

〇docker composeを使ったパワーワードのサーバー構築

※ 以下の手順を実施する前にdockerをインストールしておく必要があるので注意です

・事前調査

何が一番簡単な手順になるかなぁと思って調べていると以下のページに辿り着きました。以下の手順を説明しているページの中で紹介されていましたが、dockerですぐに立ち上げることが出来るイメージと設定ファイルが既に有志によって作られているみたいです。

https://qiita.com/naoya-i/items/e907a6b949e5da36d532

一から設定ファイルを作ってもよかったんですが、すぐに遊べる環境を立ち上げたい気持ちもあったので、有志のdockerイメージと設定ファイルを使わせていただくことにしました。時間がある時に手動で立ち上げるやり方も試してみようかなと思います。

・構築作業

https://github.com/jammsen/docker-palworld-dedicated-server

上記のgithubのページの設定方法を確認しつつ、サーバーを立ち上げていきたいと思います。dockerイメージとdocker composeを使った設定方法が既に用意されているので、それに従って設定していきます。

まずはdocker-composeのymlファイルを作成します。githubのページの記載をそのまま使えばよいと思いますが、サーバーのパスワードや外部に公開されるサーバーにするかどうかなど、細かい設定をする必要があるので実際に運用を始める時は内容をある程度確認した方が良いと思います。

version: '3.9'
services:
  palworld-dedicated-server:
    #build: .
    container_name: palworld-dedicated-server
    image: jammsen/palworld-dedicated-server:latest
    restart: unless-stopped
    ports:
      - target: 8211 # Gamerserver port inside of the container
        published: 8211 # Gamerserver port on your host
        protocol: udp
        mode: host
      - target: 25575 # RCON port inside of the container
        published: 25575 # RCON port on your host
        protocol: tcp
        mode: host
    environment:
      - TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables" 
      - ALWAYS_UPDATE_ON_START=true
      - MULTITHREAD_ENABLED=true
      - COMMUNITY_SERVER=false         ← これをtrueにしているとゲーム内のサーバー一覧に表示されてしまうので、知り合いに公開するだけであればfalseで良いと思う
      - BACKUP_ENABLED=true            ← バックアップの設定
      - BACKUP_CRON_EXPRESSION=0 * * * *   ← バックアップする時間の設定
      - STEAMCMD_VALIDATE_FILES=true
      - SERVER_SETTINGS_MODE=auto # Change this to manual if you want to edit the config yourself
      - NETSERVERMAXTICKRATE=120
      - DIFFICULTY=None
      - DAYTIME_SPEEDRATE=1.000000
      - NIGHTTIME_SPEEDRATE=1.000000
      - EXP_RATE=1.000000
      - PAL_CAPTURE_RATE=1.000000
      - PAL_SPAWN_NUM_RATE=1.000000
      - PAL_DAMAGE_RATE_ATTACK=1.000000
      - PAL_DAMAGE_RATE_DEFENSE=1.000000
      - PLAYER_DAMAGE_RATE_ATTACK=1.000000
      - PLAYER_DAMAGE_RATE_DEFENSE=1.000000
      - PLAYER_STOMACH_DECREASE_RATE=1.000000
      - PLAYER_STAMINA_DECREACE_RATE=1.000000
      - PLAYER_AUTO_HP_REGENE_RATE=1.000000
      - PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
      - PAL_STOMACH_DECREACE_RATE=1.000000
      - PAL_STAMINA_DECREACE_RATE=1.000000
      - PAL_AUTO_HP_REGENE_RATE=1.000000
      - PAL_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
      - BUILD_OBJECT_DAMAGE_RATE=1.000000
      - BUILD_OBJECT_DETERIORATION_DAMAGE_RATE=1.000000
      - COLLECTION_DROP_RATE=1.000000
      - COLLECTION_OBJECT_HP_RATE=1.000000
      - COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000
      - ENEMY_DROP_ITEM_RATE=1.000000
      - DEATH_PENALTY=All
      - ENABLE_PLAYER_TO_PLAYER_DAMAGE=false
      - ENABLE_FRIENDLY_FIRE=false
      - ENABLE_INVADER_ENEMY=true
      - ACTIVE_UNKO=false
      - ENABLE_AIM_ASSIST_PAD=true
      - ENABLE_AIM_ASSIST_KEYBOARD=false
      - DROP_ITEM_MAX_NUM=3000
      - DROP_ITEM_MAX_NUM_UNKO=100
      - BASE_CAMP_MAX_NUM=128
      - BASE_CAMP_WORKER_MAXNUM=15
      - DROP_ITEM_ALIVE_MAX_HOURS=1.000000 
      - AUTO_RESET_GUILD_NO_ONLINE_PLAYERS=false
      - AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS=72.000000
      - GUILD_PLAYER_MAX_NUM=20
      - PAL_EGG_DEFAULT_HATCHING_TIME=72.000000
      - WORK_SPEED_RATE=1.000000 
      - IS_MULTIPLAY=false
      - IS_PVP=false
      - CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP=false
      - ENABLE_NON_LOGIN_PENALTY=true
      - ENABLE_FAST_TRAVEL=true
      - IS_START_LOCATION_SELECT_BY_MAP=true
      - EXIST_PLAYER_AFTER_LOGOUT=false
      - ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false
      - COOP_PLAYER_MAX_NUM=4
      - MAX_PLAYERS=32
      - SERVER_NAME=jammsen-docker-generated-###RANDOM###                          ← サーバーの名前の設定(任意で記載)
      - SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen   ← サーバーの説明(任意で記載)
      - ADMIN_PASSWORD=adminPasswordHere                                           ← Adminのパスワードの設定
      - SERVER_PASSWORD=serverPasswordHere                                         ← サーバーへのログインのためのパスワード
      - PUBLIC_PORT=8211
      - PUBLIC_IP=
      - RCON_ENABLED=false
      - RCON_PORT=25575
      - REGION=
      - USEAUTH=true
      - BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt
    volumes:
      - ./game:/palworld     ← ゲームデータの保存場所。データがこの設定のフォルダの中に保持されるので注意する。

上記の設定ファイルを作成したしたら設定ファイルを配置している任意のディレクトリで以下のコマンドを実行します。やっていることはコンテナ内で生成されるデータをローカルに保存するためのフォルダを作っています。

mkdir game
chmod 777 game
chown -R 1000:1000 game/.

gameフォルダを作成したらdocker composeでdockerコンテナを立ち上げます。

sudo docker compose pull
sudo docker compose up -d

サーバーを停止したい時は以下のコマンドで停止します。

sudo docker compose down

・パルワールドのサーバーの公開

上記の手順を実行するとパルワールドのサーバーの立ち上げは完了しております。このサーバーを外部から公開可能な状態にする必要があります。自宅のポート開放などを行っていくのが一般的なサーバーの公開手順となりますが、セキュリティを考慮する必要があって面倒くさいので以下の方法のどれかの方法で公開することを考えました。

  1. tailscale
  2. Cloudflare Zero Trust
  3. NetBird

3つのやり方を考えましたが、友人内で遊ぶためのサーバーであれば外部に公開する必要はないな、と思ったので1の方法を選択することにしました。また、使ったことはないので机上で調べた情報を基にした発言となりますが、3のNetBirdもtailscaleと似たようなことが出来ると思われます。

tailscaleの設定は以下の手順となります。

  1. tailscaleのアカウントを作成
  2. VPNで接続する端末にtailscaleのソフトウェアをインストール
  3. 各種設定(※)

※ ここはサーバーの公開する人の手順なので接続する人には不要な手順となります

サーバーの公開する際、tailscaleのソフトウェアをインストールしたサーバーがtailscaleの管理画面から見ることが出来ると思います。該当のサーバーの「・・・」からshareを選択します。

shareを押すと以下の共有リンクを作成する画面が表示されるのでVPNを接続したいユーザに共有することで、tailscaleをインストールした別ユーザの端末と接続することが可能となります。