◾️ Palworld
2024년 1월 18일에 스팀에서 출시한 팰월드(Palworld)란 게임이며, 현재 동접자 200만을 넘길 정도로 초대박을 치고 있는 아주 재미있는 게임이다.
현재 인게임내 초대 코드로 방을 만들면 최대 4인까지 같이 플레이가 가능하다.
더 많은 인원끼리 플레이 하고싶다면 데디케이트 서버를 구축하여 최대 32명까지 동시에 플레이가 가능하다.
하지만 서버 사양에 따라 게임 플레이에 지장이 갈 수 있으니 최대한 좋은 사양으로 서버를 구축해야 할 것이다.
◾️ 설치 환경
- OS: Ubuntu 22.04
- CPU: AMD Ryzen 5 5600x 6-Core
- Memory: 32GB
- Disk: 1TB
◾️ 디렉토리 구조
tree -L 2 .
◾️ 사전 준비
팰월드 게임 서버를 구축하는 방법들은 여러가지가 존재한다.
- 클라우드 플랫폼 (GCP,NCP,AWS ..)
- 로컬 PC
- VMware
- ...
그 외에 여러 방법이 있을 수 있겠지만 나는 집에 있는 미니 데스크탑에 Proxmox를 네이티브로 설치하고
Ubuntu 22.04 이미지를 가상 머신으로 실행하여 팰 월드 게임 서버를 구축해 볼 것이다.
그러기 위해서는 아래와 같은 사전지식 및 파일이 필요하다.
- 16GB 이상의 USB && Proxmox 공식 이미지
- Ubuntu 22.04.iso
- Docker & Docker Compose 설치
- Linux commands
- 👉
cd
,ls
,rm
,find
.. 등의 간단한 리눅스 명령어 숙지 요망
- 👉
◾️ 서버 구축
- Proxmox 네이티브 설치 및 VM 설치 과정은 생략
▪️ VM 생성
▪️ 도커 설치
아래 게시글을 참고하여 도커를 설치
👉 도커 쉽게 설치하기! - WTT Devlog
▪️ 볼륨 디렉토리 생성
Palworld 및 게임 데이터를 위한 디렉토리 생성
mkdir ~/palworld
게임 데이터 동기화를 위한 볼륨 폴더 생성
mkdir ~/palworld/game
# 권한 설정 (모든 권한 허용)
chmod 777 ~/palworld/game
chown -R 1000:1000 ~/palworld/game
💥 참고사항
서버 세이브 경로 : ~/palworld/game/Pal/Saved/SaveGames/O/
서버 설장 파일 경로 : ~/palworld/game/Pal/Saved/Config/LinuxServer/
서버 세이브 파일 교체 시 GameUserSettings.ini 파일에서
DedicatedServerName의 값을 기존 세이브 폴더명으로 수정하고 기존 세이브를 세이브 경로에 복사해야함.작업 완료 후, 반드시 game 폴더 하위까지 파일 권한 변경
(다음 명령어 실행 👉chmod -R 777~/palworld/game && chown -R 1000:1000 ~/palworld/game
)
▪️ Docker Compose
- Docker 설치 방법은 매번 달라질 수 있으니, 설치하기 전에 아래 깃허브 주소를 참고하도록 하자.
- Palworld Github
~/palworld/docker-compose.yaml
version: "3.9"
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
restart: always
container_name: palworld-server
stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop
ports:
- 8211:8211/udp
- 27015:27015/udp
environment:
- PUID=1000
- PGID=1000
- PORT=8211 # Optional but recommended
- PLAYERS=10 # Optional but recommended
- SERVER_PASSWORD="" # Optional but recommended
- MULTITHREADING=true
- RCON_ENABLED=true
- RCON_PORT=25575
- TZ=Asia/Seoul
- ADMIN_PASSWORD="adminPasswordHere"
- COMMUNITY=false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
- SERVER_NAME="Pal World"
- SERVER_DESCRIPTION=""
volumes:
- ./game:/palworld/
• 컨테이너 실행
컨테이너 실행
docker-compose up -d --build
컨테이너 상태 체크
docker-compose ps
• rcon commands
RCON is enabled by default for the palworld-server-docker image. Opening the RCON CLI is quite easy:
docker exec -it palworld-server rcon-cli
# Brodcast
docker exec -it palworld-server rcon-cli "Broadcast Hello everyone!"
List of server commands
Command | Info |
---|---|
Shutdown {Seconds} {MessageText} | The server is shut down after the number of Seconds |
DoExit | Force stop the server. |
Broadcast | Send message to all player in the server |
KickPlayer {SteamID} | Kick player from the server.. |
BanPlayer {SteamID} | BAN player from the server. |
TeleportToPlayer {SteamID} | Teleport to current location of target player. |
TeleportToMe {SteamID} | Target player teleport to your current location |
ShowPlayers | Show information on all connected players. |
Info | Show server information. |
Save | Save the world data. |
▪️ 방화벽 설정
포트 | 설명 |
---|---|
8211/udp | 팰월드 접속 포트 |
25575/tcp | RCON 접속 포트 |
15636/tcp | 팰월드 서버<->스팀API 포트 |
15636/udp | 팰월드 서버<->스팀API 포트 |
15637/tcp | 팰월드 서버<->스팀API 포트 |
15637/udp | 팰월드 서버<->스팀API 포트 |
방화벽 포트 허용
(firewall 기준)
sudo firewall-cmd --permanent --zone=public --add-port=8211/udp
sudo firewall-cmd --permanent --zone=public --add-port=15636/tcp
sudo firewall-cmd --permanent --zone=public --add-port=15636/udp
sudo firewall-cmd --permanent --zone=public --add-port=15637/tcp
sudo firewall-cmd --permanent --zone=public --add-port=15637/udp
sudo firewall-cmd --permanent --zone=public --add-port=25575/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-port
▪️ 공유기 설정
게이트웨이 확인
# 리눅스의 경우
sudo netstat -nr | grep "^0.0.0.0"
브라우저에 공유기 게이트웨이 주소 입력
👉 (http://게이트웨이주소)
포트포워딩에 아래 포트들 추가
8211 udp
25575 tcp
15636-15637 tcp/udp
◾️ 서버 접속 테스트
A. IP주소:8211
로 접속 테스트
B. 게임 플레이
◾️ 백업 스크립트
▪️ 유저 데이터 찾기
게임 서버 운영을 하다보면 이상한 사람들이 많아서
쾌적한 서버 운영을 위해 게임 분위기를 흐리는 사람들(핵)을 주기적으로 밴 시켜주어야 한다.
그렇게 되면 밴 당한 유저의 세이브데이터도 지워줘야 하는데 플레이어의 세이브 데이터 파일 이름이 16진수로 변환되어 있어서 처음 보면 이 파일이 어떤 유저의 데이터인지 분간이 안간다.
잘못해서 다른 선량한 유저의 세이브 데이터라도 지우는 날에는 대참사가 일어나는 것이다.
먼저, 유저들의 세이브 데이터는 어떤 파일인지 살펴볼까?
ls -lh game/Pal/Saved/SaveGames/0/4D308CFCDF584AFCAB7E66F8BB5A881D/Players/
누구의 데이터인지 알아보기 힘들게 되어있지만, 우리는 저 박스친 부분만 체크하고 있으면 된다.
자, rcon 컨테이너에 아래 명령어를 치면 현재 내 서버에 접속 중인 유저들의 playeruid를 아래처럼 볼 수가 있다.
저 값을 16진수로 변환한 결과가 해당 유저의 세이브 데이터 파일이름이 된다.
예시로 'MUSIN' 이라는 유저의 playeruid는 '1951978129' 이다.
저 값을 16진수로 변환하면 어떻게 될까?
아래 페이지에 들어가 '1951978129' 이 값을 Convert 해보자.
https://www.binaryhexconverter.com/decimal-to-hex-converter
'7458D291' 라는 16진수 값으로 변환되었다.
눈치를 챘겠지만 '7458D291' 라는 파일 이름은 위에 플레이어들의 세이브 데이터 파일들 중에 하나였다.
이런식으로 밴 당한 유저의 세이브 데이터를 찾아보면 될 것 같다!
✏️ 배율표
설정 | 기본값 | 내용 | 가변값 | 기타 |
---|---|---|---|---|
Difficulty | None | 팔월드 난이도 | None Casual Normal Hard |
|
DayTimeSpeedRate | 1 | 낮 경과 속도 | 0.1 ~ 5 | |
NightTimeSpeedRate | 1 | 밤 경과 속도 | 0.1 ~ 5 | |
ExpRate | 1 | 경험치 획득 배율 | 0.1 ~ 20 | |
PalCaptureRate | 1 | PAL 포획 확률 배율 | 0.5 ~ 2 | |
PalSpawnNumRate | 1 | PAL 출현 배율 | 0.5 ~ 3 | 게임 성능에 영향 끼침 |
PalDamageRateAttack | 1 | PAL이 주는 피해 배율 | 0.1 ~ 5 | |
PalDamageRateDefense | 1 | PAL이 받는 피해 배율 | 0.1 ~ 5 | |
PalStomachDecreaceRate | 1 | PAL 포만도 감소 배율 | 0.1 ~ 5 | |
PalStaminaDecreaceRate | 1 | PAL 기력 감소 배율 | 0.1 ~ 5 | |
PalAutoHPRegeneRate | 1 | PAL HP 자연 회복 배율 | 0.1 ~ 5 | |
PalAutoHPRegeneRateInSleep | 1 | PAL 수면 시 HP 회복 배율 | 0.1 ~ 5 | 상자 내 HP 회복 배율 |
PlayerDamageRateAttack | 1 | 플레이어가 주는 피해 배율 | 0.1 ~ 5 | |
PlayerDamageRateDefense | 1 | 플레이어가 받는 피해 배율 | 0.1 ~ 5 | |
PlayerStomachDecreaceRate | 1 | 플레이어 포만도 감소 배율 | 0.1 ~ 5 | |
PlayerStaminaDecreaceRate | 1 | 플레이어 기력 감소 배율 | 0.1 ~ 5 | |
PlayerAutoHPRegeneRate | 1 | 플레이어 HP 자연 회복 배율 | 0.1 ~ 5 | |
PlayerAutoHPRegeneRateInSleep | 1 | 플레이어 수면 시 HP 회복 배율 | 0.1 ~ 5 | |
BuildObjectDamageRate | 1 | 건축물 상대 피해 배율 | 0.1 ~ 3 | |
BuildObjectDeteriorationDamageRate | 1 | 건축물의 노화 속도 배율 | 0 ~ 10 | |
DropItemMaxNum | 3000 | 월드 내의 드롭 아이템 최대 수 | 0 ~ 5000 | |
CollectionDropRate | 1 | 채집 아이템 획득량 배율 | 0.5 ~ 3 | |
CollectionObjectHpRate | 1 | 채집 오브젝트 HP 배율 | 0.5 ~ 3 | |
CollectionObjectRespawnSpeedRate | 1 | 채집 오브젝트 생성 간격 | 0.5 ~ 3 | |
EnemyDropItemRate | 1 | 드롭 아이템 양 배율 | 0.5 ~ 3 | |
PalEggDefaultHatchingTime | 72 | 거대알 부화에 걸리는 시간(h) | 0 ~ 240 | 다른 알도 상응하여 부화 시간 변경됨 |
bEnableInvaderEnemy | True | 습격 이벤트 발생 여부 | True False |
|
DeathPenalty | All | 사망 패널티 None: 사망 패널티 없음 Item: 장비 이외의 아이템 드랍 ItemAndEquipment: 모든 아이템 드랍 All: 모든 Pal과 모든 아이템 드랍 |
None Item ItemAndEquipment All |
|
GuildPlayerMaxNum | 20 | 길드 내 최대 인원 수 | 1 ~ 100 | |
bEnablePlayerToPlayerDamange | False | 플레이어간 데미지 여부 | True False |
|
bEnableFriendlyFire | False | 아군간 데미지 여부 | True False |
|
BaseCampWorkerMaxNum | 15 | 거점 작업 팰 최대 수 | 1~20 | |
BaseCampMaxNum | 128 | 거점 최대 수량 | ||
WorkSpeedRate | 1 | 작업 속도 배율 | ||
blsPvP | False | PvP 활성화 여부 | True False |
|
CoopPlayerMaxNum | 4 | 협동던전 최대인원 | ||
ServerPlayerMaxNum | 32 | 서버 최대 인원 | ||
ServerName | 서버명 | |||
ServerDescription | 서버 설명 | |||
PublicPort | 8211 | 공용 포트 | ||
PublicIP | 공용 IP |