작년 얼리액세스 당시에 열심히 하다가 컨텐츠 다 깨고 접은 뒤에 정식 출시된 게임 코어키퍼

최대 8인 멀티까지 가능하고 스타듀밸리 + 마크를 섞은 게임이라 중독성 있다
멀티를 할 때 한 사람이 서버를 만들면 거기에 들어오는 방식인데
문제는 서버장이 계속 서버를 열어두고 있어야 서버에 들어갈 수 있어서 다소 귀찮다
이에 상설 서버를 GCP 같은 걸로 만들어둘 순 없을까 검색하다가 좋은 글을 발견했다
[GCP] GCP로 Core Keeper 24시간 Dedicated Server 열기 -1-
[GCP] GCP로 Core Keeper 24시간 Dedicated Server 열기 -1-
1편 - GCP에서 VM 인스턴스 만들기 가이드라인
salmon99.github.io
1편은 말 그대로 GCP에서 VM 인스턴스를 만드는 과정이라서 그대로 따라하면 된다
[GCP] GCP로 Core Keeper 24시간 Dedicated Server 열기 -2-
[GCP] GCP로 Core Keeper 24시간 Dedicated Server 열기 -2-
2편 - Ubuntu에서 Docker를 설치하고 이미지로 컨테이너 실행하는 가이드라인
salmon99.github.io
2편은 도커 컨테이너를 설정하는 부분이다. 마찬가지로 그대로 진행해주면 된다
다만 기존에 사용하던 맵과 진행사항을 가져오는 부분이나, 모드를 설정하는 부분이 설명되어 있지 않아서 추가로 찾아본 뒤 작성한다
모드 적용법
https://github.com/escapingnetwork/core-keeper-dedicated
GitHub - escapingnetwork/core-keeper-dedicated: Dockerfile for automated build of a Core Keeper Dedicated Server
Dockerfile for automated build of a Core Keeper Dedicated Server - escapingnetwork/core-keeper-dedicated
github.com
이 레포의 README를 읽으면 쉽게 적용할 수 있다.
난 그것도 모르고 직접 server files에 들어가서 모드 폴더를 하나하나 만들고, 압축 풀고, 귀찮은 짓을 했는데
사실 그렇게 해도 모드 하나만 달라도 서버 참가할 때 버전이 달라서 못 들어가는 참사가 생기기 때문에 그냥 얌전히 리드미 대로 하자.
1. API key 발급 받기
인게임 메뉴에서 모드를 적용할 때 mod.io 계정을 만들었을 것이다 (나는 스팀 계정으로 연동함)
Cross Platform Mod Support for Games
Support mods on PC, console and mobile with mod.io, a platform which makes it easy to grow, manage and integrate UGC in-game, using our API, SDK and plugins for Unity, Unreal Engine and more.
mod.io
mod.io에 들어가서 로그인 한 다음

화살표로 가리킨 프로필을 클릭하면 API Access 메뉴가 보인다
API Access로 이동하자
아니면
Cross Platform Mod Support for Games
Support mods on PC, console and mobile with mod.io, a platform which makes it easy to grow, manage and integrate UGC in-game, using our API, SDK and plugins for Unity, Unreal Engine and more.
mod.io
이렇게 직접 접근도 가능하다
페이지에 들어가보면 API Access 설정 화면이 나온다

나는 키를 발급 받은 상태라 이렇게 나온다
키가 없으면 API Key를 받을 수 있는 request 버튼이 나올텐데 눌러서 받아주자
request 보내면 바로 key와 path를 알 수 있다
key는 오른쪽 눈 모양 아이콘을 누르면 보이니 복사하면 되고
path는 API path:의 오른쪽에 나온다 (예시: https://u-*.modapi.io/v1)
두 가지 값을 복사해두면 된다
2. .env 파일 수정
.env 파일 아래에 아래 내용을 추가해주자
MODS_ENABLED=true # 모드를 사용할 것인지 여부 (true로 하자)
MODIO_API_KEY=your_api_key # 아까 복사해둔 key 붙여넣기
MODIO_API_URL=your_api_url # 아까 복사해둔 path 붙여넣기
MODS=mod1,mod2,mod3 # 아래에 추가 설명
이걸 yml 파일에 추가해주면 되는데 MODS는 추가할 모드의 이름을 넣어주면 된다
추가할 모드의 이름을 아는 방법은 다음과 같다
Better Text Input 모드를 추가하려 한다고 가정하자.
mod.io 사이트에서 해당 모드를 검색한 뒤 페이지에 들어가보면 상단에 링크가 보인다
https://mod.io/g/corekeeper/m/better-text-input#description
우리는 여기서 m/ 다음의 글자에 집중하면 된다
better-text-input이 우리가 적용할 모드의 이름인 것이다 (#description 같은 건 무시해도 됨)
그리고 잡몹 체력바도 보여주는 Enemy Health Bars 모드는
https://mod.io/g/corekeeper/m/healthbars
healthbars가 모드의 이름인 거다
내가 이 두 개의 모드를 적용하고 싶으면
MODS=core-lib,healthbars,better-text-input
이렇게 적용해주면 된다. (core-lib는 모드를 적용할 때 꼭 필요한 선행 모드라서 임의로 집어넣었다)
2개가 아니라 3개 4개의 모드를 적용하는 것도 마찬가지다
링크에서 이름을 알아낸 뒤 뒤에 적어주면 된다
버전도 지정해줄 수 있는데 그건 github에 들어가서 알아서 읽어서 합시다
SERVER_PORT=27015
MODS_ENABLED=true
MODIO_API_KEY=your_key
MODIO_API_URL=your_url
MODS=healthbars,corelibrewiredextension,coreliblocalization,corelibcommands,better-text-input,core-lib
이렇게 작성해주면(내 로컬 환경과 정확히 맞추기 위해 MODS를 수정함), 도커 container가 시작할 때 모드들이 최신 버전으로 업데이트해서 적용된다...
는데 나는 여기서 문제가 생겼다!!!
3. override.env 파일 생성
분명 모드 관련 내용을 적어뒀는데 컨테이너를 실행시키면
MODS_ENABLED=false라고 읽어버려서 모드 설치를 생략하고 서버를 열어버리니까
이미 모드를 적용한 내 컴퓨터와 환경이 안 맞아서 게임에 참가가 안 됐다...
아직도 원인은 모르겠는데, 일단 해결법은 찾았다.
docker-compose.yml, .env, server-data 등이 있는 디렉토리에 override.env를 생성해준다
vim override.env
그 다음
MODS_ENABLED=true
MODIO_API_KEY=your_key
MODIO_API_URL=your_api
MODS=healthbars,corelibrewiredextension,coreliblocalization,corelibcommands,better-text-input,core-lib
아까 .env에 추가했던 내용을 작성해주었다.
SERVER_PORT를 생략한 이유는.. 새벽에 오류를 해결 하다가 없어도 될 것 같아서 빼버렸다.
자세하게는 기억 안 나는데 어차피 게임 ID로 접속할 거라 저 특정 포트가 필요 없어서? 였던 것 같다
README의 Network Mode를 정독해보고 알아서 판단해서 넣을지 말지 결정하면 된다
이렇게 한 뒤
sudo docker compose down && sudo docker compose up -d
서버를 재실행하고
sudo docker logs -f core-keeper-dedicated
로그를 확인해보니 드디어 모드를 설치하는 로그가 떴다!!
Installing mods...
...
Installed CoreLib (core-lib) 3.4.1
이제 아래 명령어로 GameID를 확인하고 접속하면 원만히 잘 실행된다.
모드 설치는 됐는데 버전이 안 맞는다고 접속이 안되면 서버에 적용한 모드랑 내 PC에 적용한 모드가 완벽히 일치하는지 확인해보자
sudo docker exec -it core-keeper-dedicated cat /home/steam/core-keeper-dedicated/GameID.txt
맵 진행사항 적용
모드도 적용했으니 이제 맵 진행 사항을 옮겨보자. 맵 진행을 옮기는 건 간단하다!
1. 새로 만든 서버의 월드 파일 삭제
sudo rm /root/server-data/worlds/*
충돌이 생길 수도 있으니 새로 만든 서버의 worlds 정보를 지운다
2. 기존 월드 파일 복사
내 PC -> 코어키퍼 설치한 드라이브 -> 사용자 -> 내 프로필에 들어간 다음 AppData에 들어간다
(AppData가 안 보이면 숨김 폴더 보기 설정을 키면 된다)
그 다음 LocalLow\Pugstorm\Core Keeper\Steam\STEAM_ID\worlds로 들어간다

worlds 폴더에는 위와 같이 0.world.gzip, 1.world.gzip 파일들이 쭉 있을 것이다

world 앞의 숫자들은 게임 시작을 누르고 서버를 고를 때 나오는 그 순서다.
내가 세계 1을 옮기고 싶으면 0.world.gzip으로 덮어씌우면 되고
세계 3을 옮기고 싶으면 2.world.gzip으로 덮어씌우면 된다
내 경우 세계 4를 옮기고 싶어서 3.world.gzip과 3.world.gzip.pugbackup을 옮길 것이다
backup 파일은 굳이 옮겨야 하나 싶긴 한데 혹시 몰라서 같이 복사해서 백업 폴더에 옮겨두었다.
3. 파일 업로드
/root/server-data/worlds/
다음 경로로 아까 복사해둔 두 파일을 옮겨주자.
(SSH에 파일을 업로드하고 옮기는 과정은 이 글에서 설명하면 너무 복잡해지니 생략한다)
그 다음 ls로 worlds 폴더에 저장된 world를 보면
3.world.gzip과 3.world.gzip.pugbackup이 있을 것이다.
각각 0.world.gzip, 0.world.gzip.pugbackup으로 이름을 변경해주면 된다.
이제 다시 도커 컨테이너를 실행해주면 기존에 사용하던 월드의 정보가 그대로 적용될 것이다.
지도가 적용되지 않았을 경우 지도 테이블을 한 번씩 봐주면 해결된다.
https://steamcommunity.com/app/1621690/discussions/0/4754200750489016394/
Guide for Transferring Worlds :: Core Keeper General Discussions
How to transfer hosting of a Core Keeper world from one PC to another. I use Windows but hopefully some of this will translate well to other OS users. You can copy the files across from one PC to another but be mindful that the corresponding number on the
steamcommunity.com
해당 게시글을 참고했는데, worldgenparams, worldinfos, worlds를 다 복사할 필요는 없고
간단히 worlds의 (번호).world.gzip만 옮겨주면 내 월드를 잘 옮겨줄 수 있다!
GCP로 Dedicated Server를 여는 데 도움을 주신 남현정님과 도커 파일을 배포해주신 분들께 감사드립니다.
끝.
질문 있으면 댓글로 남겨주세여 시간날 때 확인함