palworld(팔월드, 팰월드) 서버 여는법, 세팅법
목차
1. 요구사항
2. Windows - Steam
3. Windows - SteamCMD
4. Linux - SteamCMD
5. palworldsettings.ini 서버 세팅
6. 서버 명령어 (Server command)
7. 메모리 누수 해결하기
1. 요구사항
CPU | 4코어 이상 권장 |
RAM | 공식 사이트에는 16GB라고 적혀있다. 하지만 직접 서버를 켜보니 16GB로는 4명 서버(초대서버)만 버틸 것 같고 32기가는 되어야 4명이상을 버틸 수 있다. 현재 램 누수가 있어 램을 많이 먹는다. |
Network | UDP 8211포트의 포트포워딩 필요 (필자는 TCP를 포트포워딩하고 왜 안되지 애먹었다) |
2. Windows - Steam
게임서버를 만들어보지 않은사람에게 추천하는 방법. 가장 쉬운 서버 만들기 방법이다.
스팀 라이브러리에서 Palworld Dedicated Server를 찾는다.
위 옵션을 클릭 후 Play.
위와 같이 화면이 뜬다면 성공. 만약 연결이 안된다면, ip주소가 정확한건지 그리고 포트포워딩을 잘 했는지 그리고 윈도우 보안 세팅이 적절히 되었는지 확인한다.
3. Windows - SteamCMD
3.1. SteamCMD를 설정한다
- Windows용 SteamCMD를 다운한다 : [링크]
- zip폴더를 steamcmd폴더에 압축해제한다.
3.2. SteamCMD로그인, 앱다운, 서버실행
steamcmd를 켜서 실행할 것들:
login anonymous
app_update 2394010 validate
quit
다운로드가 다 되었다면, steamcmd경로\steamapps\common\PalServer\PalServer.exe로 서버를 실행시킨다.
※ 아직 서버 프로그램은 초기라서 메모리 누수가 많다. app_update 2394010 validate로 서버 프로그램을 최신으로 유지시키자.
4. Linux - SteamCMD
4.1. SteamCMD를 설정한다
SteamCMD를 안전하게 실행시킬 새로운 user account 이름 steam을 만들어, os와 격리시킨다.
경고: root유저로 steamcmd를 실행시키지 마라. 보안상 위험성이 있다.
- root유저로 steam user를 만든다:
sudo useradd -m steam
sudo passwd steam
- home folder로 간다:
sudo -u steam -s
cd ~
Ubuntu
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
Debian
sudo apt update; sudo apt install software-properties-common; sudo apt-add-repository non-free; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
Docker
docker run -it --name=steamcmd cm2network/steamcmd bash
4.2. SteamCMD로그인, 앱다운, 서버실행
steamcmd를 켜서 실행할 것들:
login anonymous
app_update 2394010 validate
quit
다운로드가 다 되었다면, Steam\steamapps\common\PalServer\PalServer.sh로 서버를 실행시킨다.
※ 아직 서버 프로그램은 초기라서 메모리 누수가 많다. app_update 2394010 validate로 서버 프로그램을 최신으로 유지시키자.
※ 서버가 업데이트됐다면 steam에 sudo권한을 주자. sudo vim /etc/sudoers에 steam ALL=(ALL:ALL) ALL을 잠시 추가해 steam이 steamcmd를 실행할 수 있게 하자.
.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
라는 오류가 뜬다면,
mkdir -p ~/.steam/sdk64/
steamcmd +login anonymous +app_update 1007 +quit
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/
로 해결할 수 있다.
다음과 같이 뜬다면 성공한것이다
$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/ubuntu/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
5. PalWorldSettings.ini 서버 세팅
세팅파일을 통해 설정하자.
서버설정법 | PalWorldSettings.ini 경로(path) |
Windows - Steam | 모름 |
Windows - SteamCMD | Pal/Saved/Config/WindowsServer/PalWorldSettings.ini |
Linux - SteamCMD | Pal/Saved/Config/LinuxServer/PalWorldSettings.ini |
내용은 다음과 같이 키-값 쌍으로 되어있다.
[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,...)
모든 세팅
매개변수 | 설명 |
Difficulty | 게임의 난이도 조정 (None, Casual, Normal, Hard) |
DayTimeSpeedRate | 낮에 지나는 시간 배율 설정 |
NightTimeSpeedRate | 밤에 지나는 시간 배율 설정 |
ExpRate | 플레이어와 창작물의 경험치를 얻는 비율을 바꾼다 |
PalCaptureRate | 팔 포획 확률 변경 |
PalSpawnNumRate | 팔 창작물의 스폰 비율 조절 |
PalDamageRateAttack | 팔 창작물의 데미지 조정 |
PalDamageRateDefense | 팔 창작물의 데미지 받기 조정 |
PlayerDamageRateAttack | 플레이어의 데미지 조정 |
PlayerDamageRateDefense | 플레이어의 데미지 받기 조정 |
PlayerStomachDecreaseRate | 플레이어 배고픔 닳는 비율 조정 |
PlayerStaminaDecreaseRate | 플레이어 스테미나 감소 비율 조정 |
PlayerAutoHPRegeneRate | 플레이어 hp자동으로 차는 비율 조정 |
PlayerAutoHpRegeneRateInSleep | 플레이어 잠잘 때 hp자동으로 차는 비율 조정 |
PalStomachDecreaseRate | 팔 배고픔 닳는 비율 조정 |
PalStaminaDecreaseRate | 팔 스테미나 감소 비율 조정 |
PalAutoHPRegeneRate | 팔 hp자동으로 차는 비율 조정 |
PalAutoHpRegeneRateInSleep | 팔 잠잘 때 hp자동으로 차는 비율 조정 |
BuildObjectDamageRate | 빌드 개체가 손상되는 비율 조정 |
BuildObjectDeteriorationDamageRate | 빌드 개체의 악화되는 비율 설정 |
CollectionDropRate | 수집된 항목의 드롭률 조정 |
CollectionObjectHpRate | 수집된 항목의 건강 조정 |
CollectionObjectRespawnSpeedRate | 수집된 항목의 리스폰 스피드 조정 |
EnemyDropItemRate | 패배시킨 적의 아이템 드롭 확률 조정 |
DeathPenalty | 플레이어 죽음 페널티 (ALL, ItemAndEquipment, Item, None) |
bEnablePlayerToPlayerDamage | |
bEnableFriendlyFire | |
bEnableInvaderEnemy | 적침입 이벤트를 가능하게 한다. (메모리 누수 때문에 False를 해야한다) |
bActiveUNKO | |
bEnableAimAssistPad | |
bEnableAimAssistKeyboard | |
DropItemMaxNum | 게임에서 드랍되는 아이템의 최대 개수 설정 |
DropItemMaxNum_UNKO | 게임에서 드랍되는 UNKO 아이템의 최대 개수 설정 |
BaseCampMaxNum | 베이스캠프를 지을 수 있는 최대 개수 설정 |
BaseCampWorkerMaxNum | 베이스캠프에서 일할 수 있는 최대 일꾼 수 설정 |
DropItemAliveMaxHours | 드랍된 아이템이 최대 얼마나 살아있을 수 있는지 설정 |
bAutoResetGuildNoOnlinePlayers | |
AutoResetGuildTimeNoOnlinePlayers | |
GuildPlayerMaxNum | 길드 최대인원수 설정 |
PalEggDefaultHatchingTime | 팔 알의 기본 부화시간 설정 |
WorkSpeedRate | 모든 작업시간 비율 조정 |
bIsMultiplay | |
bIsPvP | |
bCanPickupOtherGuildDeathPenaltyDrop | |
bEnableNonLoginPenalty | |
bEnableFastTravel | |
bIsStartLocationSelectByMap | |
bExistPlayerAfterLogout | |
bEnableDefenseOtherGuildPlayer | |
CoopPlayerMaxNum | 세션에서 협동하는 플레이어의 최대 수 설정 |
ServerPlayerMaxNum | 서버에서 최대 허용 가능 플레이어 수 설정 |
ServerName | 서버 이름 설정 |
ServerDescription | 서버 설명 제공 |
AdminPassword | 관리자 비밀번호 |
ServerPassword | |
PublicPort | |
PublicIP | |
RCONEnabled | RCON 사용 여부(True, False) |
RCONPort | RCON 포트 번호 |
Region | |
bUseAuth | |
BanListURL |
6. 서버 명령어 (Server command)
- 어떻게 명령을 실행시키는가
명령들은 게임안에서 또는 RCON을 통해 실행시켜야 한다.
- 명령들
다음 명령들을 실행시키고싶다면. 너는 AdminPassword를 설정 후 /AdminPassword 명령을 하여 관리자 권한을 얻어야 한다.
명령 | 설명 |
/Shutdown {Seconds} {MessageText} | 서버는 지정된 (숫자)초 뒤에 꺼진다. 메시지가 공지된다. |
/DoExit | 서버를 강제로 종료한다. |
/Broadcast {MessageText} | 서버의 모든 플레이어에게 메세지를 보낸다. |
/KickPlayer {SteamID} | 플레이어를 서버에서 추방한다. |
/BanPlayer {SteamID} | 플레이어를 서버에서 밴한다. |
/TeleportToPlayer {SteamID} | 대상 플레이어를 현재 위치로 텔레포트시킨다. |
/TeleportToMe {SteamID} | 대상 플레이어를 내 위치로 텔레포트시킨다. |
/ShowPlayers | 모든 접속중인 플레이어 정보를 보여준다. |
/Info | 서버 정보를 보여준다. |
/Save |
월드 정보를 저장한다. |
SteamID 얻는법 - 관리자 권한이 있다면 SteamID를 복사할 수 있다.
플레이어 리스트에서 우클릭 두번으로 복사한다.
플레이어 밴 푸는법 - Pal/Saved/SaveGames/banlist.txt에서 SteamID를 지우면 된다. 적용하는데 2분정도 걸린다.
7. 메모리 누수 해결하기
여러 이슈 깃허브 - https://gist.github.com/Toakan/3c78a577c21a21fcc5fa917f3021d70e
현재 팔월드 서버의 메모리 누수가 엄청나다. 필자는 우분투 쉘코드로 3분마다 메모리 잔여량을 확인해 잔여량이 부족할 경우 서버를 재부팅 하였다.
#!/usr/bin/bash
# serverPalShell.sh
function palBG {
./PalServer.sh &
}
function checkFreeMem {
freeMem=`free | grep Mem | awk '{print $4/$2*100}'`
# 잔여 메모리가 15퍼센트 미만이라면
if [ $(echo "$freeMem < 15" | bc) -eq 1 ]
then
rebootPalServer
fi
}
function rebootPalServer {
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast memory_is_full"
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_2_minute"
sleep 1m
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_1_minute"
sleep 30s
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_30_seconds"
sleep 20s
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_10_seconds"
sleep 5s
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Save"
./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Shutdown 5 server_will_reboot_after_5_seconds"
sleep 20s
palBG
}
# 실행
palBG
while true
do
sleep 3m
checkFreeMem
done
사용된 rcon 모듈: https://github.com/gorcon/rcon-cli
다른분은 crontab을 사용하여 해결하신 분도 있습니다: https://pokjuknam.tistory.com/6
참고:
https://tech.palworldgame.com/dedicated-server-guide
https://developer.valvesoftware.com/wiki/SteamCMD
https://help.dathost.net/article/150-palworld-how-to-edit-server-settings
https://tech.palworldgame.com/server-commands