← 목록

팰월드 전용 서버 구축기 (도커, 메모리 관리)

#palworld#docker#homeserver

친구들이랑 팰월드를 하기로 했다. 처음엔 3명, 많으면 6명까지 늘어날 것 같은 상황.

팰월드 멀티는 두 가지 방식이 있다. 하나는 초대 코드 협동인데, 호스트가 자기 월드를 열고 친구를 부르는 방식이다. 서버 필요없고 간편하지만 최대 4인 제한에, 호스트가 접속 중일 때만 월드가 열린다. 6명 갈 수도 있다는 시점에서 이미 탈락임. 그래서 전용 서버로 갔다. 최대 32인에 서버가 항상 떠 있으니 각자 아무 때나 들어와서 한 월드를 키우는 방식이다.

띄우는 건 금방이다

전용 서버 프로그램은 스팀이 무료로 배포한다. 게임 라이선스도 필요없다. 리눅스 네이티브 지원이고, 사실상 표준이 된 도커 이미지(thijsvanloef/palworld-server-docker)가 있어서 compose 파일 하나면 끝난다. 첫 부팅 때 SteamCMD가 서버 파일 8GB쯤을 받아오는 시간이 전부였다.

설정에서 챙긴 것들.

  • 최대 8인(6명 + 여유), 서버 비밀번호 걸고, 공개 서버 목록에는 비노출
  • 포트는 게임용 UDP 8211 하나만 인터넷에 연다. 관리용 RCON이나 REST API는 밖에 낼 이유가 없음
  • UPDATE_ON_BOOT를 켜두면 컨테이너 재시작 때마다 게임 업데이트를 알아서 반영한다. 재시작이 곧 업데이트라 따로 챙길 게 없어진다
  • 백업은 이미지 내장 기능으로 2시간마다, 7일 보관

진짜 문제는 메모리다

이 서버에는 이미 마크 서버 두 대가 힙 8G씩 물고 돌아가고 있다. 총 RAM 30G에 가용이 10G쯤 남은 상태였음. 그런데 팰월드 전용 서버는 공식 권장이 16G인데다, 켜두면 메모리가 계속 불어나는 것으로 악명이 높다. 누수인지 캐시인지 모르겠지만 어쨌든 계속 자란다.

그래서 두 겹으로 눌렀다.

mem_limit: 11g                          # 여기까지만. 마크 밥그릇은 못 뺏는다
AUTO_REBOOT_CRON_EXPRESSION: "0 5 * * *" # 매일 새벽 5시 재시작
AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE: "false"

상한을 걸어두면 최악의 경우에도 팰월드만 죽지 마크 서버가 같이 밀리진 않는다. 그리고 새벽마다 재시작하면 불어난 메모리가 리셋됨. 접속자 있으면 재시작을 건너뛰니 새벽까지 겜하는 친구가 있어도 안전하다. 재시작이 곧 업데이트 반영이기도 하니 일석이조.

주소는 pal.moon-core.com

접속 주소는 서브도메인으로 팠다. 마크 때 만들어둔 구조 덕에 할 일이 별로 없었는데

  • 외부: Cloudflare에 pal CNAME을 apex로 걸었다. apex A레코드는 DDNS 크론이 자동 갱신하니까 IP가 바뀌어도 CNAME은 알아서 따라온다. 대시보드 들어갈 것도 없이 DDNS 스크립트가 쓰던 API 토큰으로 레코드 하나 추가하면 끝
  • 내부: 집 안에서는 AdGuard 리라이트로 도메인이 바로 내부 IP로 풀리게. NAT 헤어핀 회피용이다

그리고 공유기 포트포워딩에 UDP 8211을 추가하러 들어갔다가, 옛날에 열어놓고 잊어버린 DB 포트 포워딩 두 개를 발견했다. 확인해보니 지금은 아무것도 안 듣고 있는 죽은 포워드였지만 바로 닫았다. 포트는 여는 것보다 닫는 걸 잊는 게 무섭다.

마치며

게임 서버가 세 대가 됐다. 미니PC 하나가 고생이 많다.

← 목록으로
오늘 0·전체 0