NAS에 마인크래프트 서버를 같이 돌리면 좋을 것 같아 서버를 설치해보았다.
필자의 환경은 CentOS Stream 9이며 설치할 마인크래프트 버전은 1.21.1(lastest on 24.08.22.)이다.
마인크래프트 서버 구현체는 다양하나 PaperMC가 가장 잘 사용되는 것으로 보인다.
필자도 예전엔 Spigot을 사용했으나 라이선스 문제가 해결되지 않아 결국 PaperMC로 방향을 틀었다.
서버 구축 방법은 간단하다.
JRE(JDK) -> 서버 구현체(필자의 경우 PaperMC) -> 서버 실행의 세 단계이다.
만약 Spigot같은 구현체를 사용하는 경우 직접 구현체 빌드를 해야 하기 때문에 따로 Buildtools같은 빌더를 다운로드받아야 한다.
PaperMC의 경우 그런거 없이 다운받아 실행만 하면 되니 훨씬 편하다.
만약 버전 업그레이드를 하고싶다면 PaperMC만 새로 받아 실행해주면 된다.
백업은 그냥 World 정보를 복붙하면 된다.
JRE 설치
JRE 설치를 위해 JRE 패키지를 확인한다. (JDK는 JRE를 포함한다)
참고로 마인크래프트 1.21.1 버전은 자바 21 이상에서 동작한다.
Ubuntu의 경우 아래처럼 설치하면 된다.
$ sudo yum install openjdk-21-jre-headless
CentOS의 경우 아래처럼 설치하면 된다. (뒤에 -devel을 붙이면 JDK가 설치된다)
$ yum install java-latest-openjdk
만약 여러 개의 java가 설치되어 버전 충돌이 나는 경우 java 링크를 바꾸어주면 된다.
어려운 일 아니니 구글에 검색해보면 금방 나온다. [참고]
PaperMC
마인크래프트 버전에 맞는 PaperMC를 내려받는다. [홈페이지]
홈페이지에서 링크를 확인하고 다운로드받자.
$ wget https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/40/downloads/paper-1.21.1-40.jar
서버 실행
백그라운드에서 서버를 실행한다.
java 옵션 중 xms와 xmx는 각각 최소 할당 메모리와 최대 할당 메모리를 의미한다.
필자의 NAS는 메모리가 적어 1GB만을 할당해주었다.
$ nohup java -Xms1024M -Xmx1024M -jar paper-latest.jar &
참고로 실행된 서버는 PID를 찾아 kill하거나 pkill java로 죽일 수 있다.
과정이 여러모로 조잡하기 때문에 필자는 service를 만들어 사용한다.
마지막 절을 참고하면 된다.
서버를 처음 실행했을 땐 eula.txt 파일에서 false를 true로 바꿔 라이선스에 동의하여야 서버가 정상 구동된다.
서버 백업
위의 단계에서 생긴 모든 파일을 백업하면 된다.
이후에는 위의 단계를 모두 거치되, 백업해둔 파일을 덮어씌우면 서버가 복원된다.
복원 대상 파일은 대략 다음과 같다.
- logs
- work
- <worldname>
- <worldname>-nether
- <worldname>-the-end
- plugins
- server.properties
- ops.json
- banned_ips.json
- banned_players.json
- whitelist.json
버전 업그레이드
별거 없다.
위의 PaperMC만 버전에 맞게 받아서 java로 실행해주면 된다.
간혹 PaperMC 버전이 높아지며 더 높은 JRE 버전을 요구하는 경우가 있다.
위의 JRE 설치방법에 맞추어 JRE를 업그레이드해주면 된다.
Service 등록
*리눅스에 익숙하지 않다면 여기서부터는 굳이 하지 않아도 좋다.
리눅스 관련 설명은 글의 범위를 벗어나기에 최소한으로 작성하였다.
운영 편의를 위해서는 service 등록이 필수적이다.
필자는 마인크래프트 디렉터리를 /opt/minecraft에 집어넣고 관리한다.
그 후, 최신버전의 PaperMC jar 파일에 소프트 링크를 걸어 service와 연결하였다.
$ ln -s /opt/minecraft/paper-1.21.1.jar /opt/minecraft/paper-latest.jar
service 파일은 다음처럼 작성했다. (minecraft.service)
중요한 부분은 ExecStart이다.
ExecStart에는 절대경로만을 사용해야하기 때문에 java(소프트링크) 대신 java 바이너리(/usr/bin/java)를 사용해야 한다.
java 바이너리 위치는 which java를 통해 찾을 수 있다.
[Unit] Description=Minecraft After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/java -Xms1024M -Xmx1024M -jar /opt/minecraft/paper-latest.jar Restart=always RestartSec=60 User=root WorkingDirectory=/opt/minecraft [Install] WantedBy=multi-user.target
그 이후 service 파일을 배포, 실행한다.
$ sudo ln -s /opt/minecraft/minecraft.service /etc/systemd/system/minecraft.service $ sudo systemctl daemon-reload $ sudo systemctl enable minecraft $ sudo systemctl start minecraft
이제 service를 통해 마인크래프트 서버를 운용할 수 있다.
리소스팩 적용
리소스팩 적용을 위해서는 리소스팩 다운로드 URL이 필요하다.
먼저, 원하는 리소스팩을 찾아 다운로드 URL을 복사한다.
그 후, server.properties의 resource-pack=에 내용을 넣어주면 된다.
만약 사용자에게 리소스팩 사용을 강제하고 싶다면 require-resource-pack을 true로 바꾸어주면 된다.
# server.properties ... resource-pack=https://www.curseforge.com/minecraft/texture-packs/clarity/download/3549593/file ...
한편, 필자는 위의 방법에 더하여 SHA-1로 암호화한 URL을 사용한다.
반드시 필요한 것은 아니나 위의 링크에 대한 무결성 검사를 위한 부분이다.
SHA1 변환 사이트같은 곳을 활용하여 위의 다운로드 URL을 SHA1로 만든 후 resource-pack-sha1에 같이 넣어주면 된다.
만약 다운로드 URL로부터 계산된 SHA-1 해시값이 필자가 입력한 해시값과 다르다면 경고가 출력된다. (무결성 검증)
# server.properties ... resource-pack-sha1=ca6689bb7b616c02206d862b035d32ee9bd7a245 ...