팰월드 서버에 플레이어가 있는지 확인하여 없으면 서버를 정지 상태로 변경하여 시간이 흐르지 않도록 하는 기능입니다. 이후 플레이어가 접속하면 서버를 자동으로 재시작합니다. 디스코드와의 연동하여 디스코드로 서버를 실행, 정지, 상태확인이 가능합니다.
플레이어 없을 때 서버 정지
팰월드에서는 플레이어가 없을 때도 실시간으로 팰들이 서로 상호 작용하고, 적들이 습격해옵니다. 24시간 서버에서도 마찬가지인데, 사람이 24시간 동안 게임할 수 있는 것도 아니고 플레이어가 적으면 빈 시간이 생기기 마련입니다. 이때 서버를 정지하여 시간이 흐르지 않게 함과 동시에 게임의 메모리 누수를 막을 수 있습니다.
이 방법은 예전 팰월드 서버 플레이어 없을 때 서버 리셋 후 일시 정지 하는 법이라는 글을 통해 소개해드린 적이 있습니다만, 새로 소개해드리는 방법은 Discord로 서버를 여닫는 기능도 존재하고, 현재 서버가 열려있는지 닫혀있는지 확인도 가능합니다.
Palworld-watcher로 서버 감시하기
Docker를 통해 작동하는 이 기능은 처음 docker-compose.yml로 만들 때 함께 구성해서 설치할 수 있습니다. docker-compose.yml를 열어서 내용을 추가하세요.
---
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
restart: unless-stopped
container_name: palworld-server
network_mode: service:watcher # This is important!
environment:
PUID: 1000
PGID: 1000
PORT: 8211 # Optional but recommended
PLAYERS: 16 # Optional but recommended
SERVER_PASSWORD: "" # Optional but recommended
MULTITHREADING: true
DISABLE_GENERATE_SETTINGS : true
RCON_ENABLED: true
RCON_PORT: 25575
TZ: "UTC"
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: "NAME SERVER"
SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef"
ALLOW_CONNECT_PLATFORM: "Steam" # Defaults to "Steam" if not set, set this to "Xbox" if you want to host a server for Xbox players. CROSSPLAY BETWEEN XBOX-STEAM IS NOT YET SUPPORTED
volumes:
- ./palworld:/palworld/
watcher:
image: dnwjn/palworld-server-watcher:latest
container_name: palworld-watcher
environment:
- CONTAINER_NAME=palworld-server # The name of the server container
- GAME_PORT=8211 # The same value as `PORT` in the server container
- QUERY_PORT=27015 # The same value as `QUERY_PORT` in the server container
- LOOP_SLEEP_SECONDS=30 # How often to check the server status
- CONNECT_GRACE_SECONDS=60 # After starting the server, how long to wait before continuing the loop
- SHUTDOWN_DELAY_SECONDS=300 # How long to wait after the last player leaves to shutdown the server
ports:
- 8211:8211/udp # The same value as `GAME_PORT`
# - 27015:27015/udp # Enable to show up in the server list
volumes:
- /var/run/docker.sock:/var/run/docker.sock # This could be different depending on the operating system
어렵게 생각하지 마세요. 기존 항목에 network_mode: service:watcher
를 추가하고, port
항목과 stop_grace_period
를 제거한 뒤 watcher: 이하를 전부 복사해서 붙여넣으면 됩니다. 아니면 위 코드를 전부 복사하여 붙여넣은 뒤 일부만 변경하셔도 됩니다.
SHUTDOWN_DELAY_SECONDS는 마지막 플레이어가 나가고 몇분 뒤에 서버를 종료할 지 설정하는 기능입니다. 0으로 하면 즉시 서버를 종료해버립니다. 서버 목록에서 보이고 싶다면 # - 27015:27015/udp에서 #을 제거하시길 바랍니다.
설치 방법
팰월드 멀티 서버 24시간 서버 만드는 법으로 설치했다는 가정하에 설명하겠습니다.
sudo chmod +x /usr/local/bin/docker-compose
sudo chmod 666 /var/run/docker.sock
export COMPOSE_FILE=/home/serverfile/docker-compose.yml
sudo docker stop 서버명
모바엑스텀의 콘솔에 위 코드를 입력하여 docker에 권한을 부여하고 docker-compose.yml 위치 설정을 하고 서버를 정지시킵니다.
서버가 정지되었으면 /home/serverfile/docker-compose.yml를 수정하거나 수정한 파일로 교체합니다.
docker-compose up -d
위 코드를 입력하면 palworld-server와 palworld-watcher가 실행되면서 플레이어 존재여부를 확인하여 서버를 여닫게 됩니다.
Discord로 관리하기
만약 디스코드로 관리하고 싶다면 아래의 방법을 이용합니다.
먼저 https://discord.com/developers/applications로 이동하여 New Application을 만듭니다.
- Bot에서 MESSAGE CONTENT INTENT 활성화 후 Apply.
- OAuth2에서 bot, applications.commands를 체크하고 새로 나타난 항목에서 Send Messages까지 체크한 뒤 Generated URL을 복사하여 빈 주소창에 붙여넣습니다.
- 봇을 상주시킬 서버를 선택합니다.
Docker-Compose.yml 수정
watcher:의 environments 항목에 아래를 추가합니다. 우측 란은 Discord 개발자 항목에서 확인하여 채워넣읍시다.
- DISCORD_TOKEN=OAuth2에서 Client ID 복사.
- DISCORD_CLIENT_ID=Bot에서 Reset Token 선택 후 재생성된 토큰 복사.
- DISCORD_GUILD_ID=디스코드에서 봇이 상주한 서버 우클릭 후 ID 복사. (없으면 사용자 설정→고급→개발자 모드 ON)
설치하기
서버가 켜져있다면 서버를 종료한 뒤 docker-compose up -d를 눌러 설치하면 됩니다. 이후 디스코드 서버에 봇이 상주하게 되고, /start, /stop, /status로 현재 서버 상태를 확인하고 여닫을 수 있습니다.