팰월드 전용 서버 구축기 (도커, 메모리 관리)
친구들이랑 팰월드를 하기로 했다. 처음엔 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에
palCNAME을 apex로 걸었다. apex A레코드는 DDNS 크론이 자동 갱신하니까 IP가 바뀌어도 CNAME은 알아서 따라온다. 대시보드 들어갈 것도 없이 DDNS 스크립트가 쓰던 API 토큰으로 레코드 하나 추가하면 끝 - 내부 -> 집 안에서는 AdGuard 리라이트로 도메인이 바로 내부 IP로 풀리게 했다. NAT 헤어핀 회피용
그리고 공유기 포트포워딩에 UDP 8211 추가하러 들어갔다가 옛날에 열어놓고 잊어버린 DB 포트 포워딩 두 개를 발견햇다. 확인해보니 지금은 아무것도 안 듣고 있는 죽은 포워드였는데 그래도 바로 닫았다. 여는건 기억하는데 닫는건 까먹는다...
마치며
게임 서버가 세 대가 됐다. 미니PC 하나가 고생이 많다.