마인크래프트 bedrock 서버를 서비스로 등록하는 방법

어린아이부터 성인까지 DIY의 레벨에 따라 즐길 수 있는 마인크래프트는 전세계 인이 사랑하는 게임입니다. 물론 저자가 속한 대한민국의 경우, 성인 유저는 많지 않지만, 아무래도 민족성에서 차이가 나는 것이 아닐까 합니다.

마인크래프트의 경우, 베드락 버전과 자바버전으로 나누어져 있는데요, 모바일 앱은 베드락 버전으로 베드락 서버에서만 동작이 됩니다. 그래서 저는 AWS서버를 하나 구매해서, 거기에 우분투 올리고, 마인크래프트 베드락을 설치하여, 게임을 즐기고 있었는데요.

비용을 시간 단위로 내다 보니, 게임을 안할때는 서버를 내리고, 게임을 할때는 서버를 올리는 식으로 하고 있었는데, 너무 귀찮더군요.

그래서, 서버의 경우는 서비스로 등록을 해 놓으면, 서버가 켜질 때 자동으로 서비스가 올라올 것이고, 서버를 종료하면 자동으로 서비스가 내려가게 할 수 있으니, 서비스로 등록했습니다. 서버도 aws 명령어를 이용해서, AWS 콘솔에 들어가지 않고, 명령어로 서버를 내리고, 올리고 하는 작업을 하니, 훨씬 시간도 절약되고, 덜 귀찮게 되었습니다.

그 과정을 이 글에 담겠습니다.

개요

큰 그림은 아래와 같습니다.

AWS 계정 생성 – AWS EC2 서버 개설 – 우분투로 개설 – 마인크래프트 실행파일 다운로드 – 우분투 리눅스 서비스로 등록

AWS에 서버를 개설하는 것도 올려야 되는지 고민이 됩니다. 그런데, 마인크래프트를 서비스로 등록하는 것을 찾아볼 정도면 서버 개설은 생략해도 되지 않을까 라는 생각이 듭니다.

간단히 말씀드리면, https://aws.amazon.com/ec2 에 들어가셔서 ‘시작하기’를 선택하시고, 화면에 나오는 대로 잘 따라 가시면 서버 개설은 어렵지 않습니다. 처음에 free tier로 할 경우, 무료로 사용할 수 있으니, 테스트 용도로 좋습니다.

물론, 마인크래프트를 제대로 즐기려면, free tier로만 하기에는 무리가 있습니다. 서버가 메모리 부족으로 다운되는 현상을 겪을 수 있습니다.

서버 스펙을 조금 씩 늘려가면서 최적화된 서버를 찾는 것이 좋을 것 같습니다. 저는 t2.small 로 시작했는데, 가족들 초대하면서, 서버 용량을 서서히 늘리게 되더군요..

AWS에 서버 만들기는 이미 많은 블로그 글이 있으니, 참고하시기 바랍니다. 아래는 구글링에서 나온 AWS 서버 만들기 글 입니다.

https://velog.io/@nefertiri/AWS-EC2%EB%A1%9C-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0

Bedrock 서버 다운로드

기본적으로 ubuntu 라는 계정이 있습니다. 기본 계정을 사용하여 서비스를 구축하겠습니다.

서버를 설치할 디렉토리를 생성합니다. 본 글에서는 /home/ubuntu/mbedrock으로 하겠습니다.

mkdir mbedrock
cd mbedrock
pwd
/home/ubuntu/mbedrock

아래 URL에서 다운로드 받아서, sftp 로 전송 합니다.

https://www.minecraft.net/ko-kr/download/server/bedrock

unzip bedrock-server-1.20.40.01.zip

unzip이 없다면, apt-get 으로 설치후, unzip합니다.

sudo apt-get install unzip

마인크래프트 실행 파일 생성하기

주요 환경설정 값이 거의 다 보이네요. 아래 글에서 더 말씀드리겠습니다.

서버 환경 설정

파일을 unzip하면, 서버 파일들이 디렉토리에 생성이 됩니다. 그중에서 server.properties 파일을 편집하면 됩니다.

편집은 nano 나 vim 혹은 vi 를 사용하시면 됩니다. 이미 리눅스에 익숙하다고 판단하여 이 부분은 스킵하겠습니다.

more로 열어보면 아래와 같습니다. 아래는 일부만 보여준 것입니다.

마인크래프트 베드락 서버를 실행하기 전에 몇가지 세팅을 하고 실행하는 것이 좋습니다.

레벨 이름

먼저는 이름 세팅입니다. 해당 이름으로 하위 디렉토리가 생성됩니다.

level-name=Bedrock level

서버이름은 server-name=Dedicated Server 이곳에서 지정합니다. level-name 과 동일하게 작성하면 혼선방지에 도움이 됩니다.

서버 난이도

서버 레벨은 마인크래프트를 하시는 분은 아시는 그 난이도입니다.

difficulty=easy

난이도는 4종류 입니다. “peaceful”, “easy”, “normal”, “hard”, 아시는 것처럼 평화로움(peaceful)에서는 공격적인 몹이 소환이 안됩니다.

게임 모드

크레에이티브로 할지, 서바이벌로 할지 정하는 부분입니다.

gamemode=survival

3가지 옵션이 가능합니다. “survival”, “creative”, “adventure”, 참고로, 베드락에는 관전자모드가 없습니다.

시작할 월드 Seed

level-seed=

월드를 생성할때, seed 를 지정할 수 있습니다. level-seed에 해당하는 값을 넣으면 됩니다.

씨드를 찾고 있다면, 구글링을 통해 찾아볼 수 있습니다.

실행 명령어

서버 변수값을 server.properties 에 모두 입력하셨다면, 이제 아래 명령어로 단순히 실행할 수 있습니다.

실행

sudo LD_LIBRARY_PATH=. ./bedrock_server

정상적으로 실행하면, 아래와 같이 로그가 출력됩니다. 로그 내용에 Level Name, Game mode, Difficulty 등이 보이네요.

[2023-11-05 03:11:22:360 INFO] Starting Server
[2023-11-05 03:11:22:360 INFO] Version: 1.20.50-beta22
[2023-11-05 03:11:22:361 INFO] Session ID: 6d72399c-8598-487a-997f-08e3f36b67b2
[2023-11-05 03:11:22:361 INFO] Build ID: 19160188
[2023-11-05 03:11:22:361 INFO] Branch: main
[2023-11-05 03:11:22:361 INFO] Commit ID: 24aaed05377c79a2dc309a40d7767a35897608fe
[2023-11-05 03:11:22:361 INFO] Configuration: Publish
[2023-11-05 03:11:22:361 INFO] Level Name: Bedrock level
[2023-11-05 03:11:22:392 INFO] No CDN config file found for dedicated server
[2023-11-05 03:11:22:392 INFO] Game mode: 0 Survival
[2023-11-05 03:11:22:392 INFO] Difficulty: 1 EASY
[2023-11-05 03:11:22:395 INFO] Content logging to console is enabled.
[2023-11-05 03:11:23:006 INFO] Opening level 'worlds/Bedrock level/db'
[2023-11-05 03:11:24:901 INFO] IPv4 supported, port: 19132: Used for gameplay and LAN discovery
[2023-11-05 03:11:24:901 INFO] IPv6 supported, port: 19133: Used for gameplay
[2023-11-05 03:11:24:911 INFO] Server started.

위에 있는 명령어로 매번 실행해도 되지만, 불편합니다. 스크립트로 만들어서 실행하면 더 편할 것 같습니다.

스크립트

startmc.sh 와 stopmc.sh 를 만들어서, 명령어로 시작하거나 중지하도록 하겠습니다.

명령어는 모두 unzip된 마인크래프트 폴더에서 진행합니다.

시작 스크립트
nano startmc.sh

파일을 생성하고 아래와 같이 입력합니다.

#!/usr/bin/env bash

SERVER_PATH=/home/ubuntu/mbedrock/

/usr/bin/screen -dmS mcserver /bin/bash -c "LD_LIBRARY_PATH=$SERVER_PATH$ {SERVER_PATH}bedrock_server"

위와 같이 입력하는 이유는 screen 이라는 명령어를 통해, 서버가 실행된 이후에도 백그라운드로 수행하고, 언제든 서버 콘솔로 접근할 수 있도록 하기 위함입니다. 또한 백그라운드로 실행하기 때문에, ssh 에서 나오더라도 서버(서비스)가 종료되지 않습니다.

마인크래프트 서버를 실행할때, mcserver 라는 이름으로 접근할 수 있도록 screen 명령으로 실행을 합니다.

아래는 screen 에서 사용할 수 있는 옵션중 몇가지 입니다.

-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-r [session]  Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-X            Execute <cmd> as a screen command in the specified session.

screen에 대한 자세한 사항은 이곳에서 확인하실 수 있습니다.

chmod +x startmc.sh

실행권한을 부여합니다.

실행한 후에는 screen 명령어로 서버 콘솔에 접속할 수 있습니다.

screen -r mcserver

종료할때는, ctrl + a 이후 d 로 detach하여 스크린에서 나옵니다. ctrl+c는 서버 자체를 종료시키니 주의하세요.

현재 screen 으로 실행된 세션은 screen -list 로 확인 가능합니다.

종료 스크립트

이제 종료 스크립트를 만들어 보겠습니다.

nano stopmc.sh

해당 스크립트에 아래와 같이 입력합니다. stop 명령어를 보내서, 마인크래프트 서비스를 내리는 명령어 입니다.

마인크래프트 서버는 stop 이라고 입력하면, 종료가 됩니다. 그 명령을 screen 명령을 통해 해당 세션이 보내주는 스크립트입니다.

#!/usr/bin/env bash

screen -rd mcserver -X stuff "stop\r"

여기까지 해도, 서버에 로그인해서, startmc.sh 를 한후 로그아웃하고 마인크래프트를 즐겨도 문제는 없습니다.

그런데, AWS의 시간제 요금을 사용하고 있다면, 잠자는 시간에 서버가 켜져 있으면 돈이 줄줄… 그래서, 콘솔에 다시 들어가서, stopmc.sh 를 한후, AWS Console 에서 서버를 중지하는 귀찮음이 존재합니다.

또, 마인크래프트 베드락 서버를 켜려면, AWS 콘솔에 들어가서, 서버를 시작하고, 터미널로 접속해서 startmc.sh 를 수행해야 되는 귀찮음이 있습니다.

베드락서버를 서버가 켜질때, 시작하고, 서버가 꺼질 때 자동으로 종료하도록 하면 더 좋겠죠. 바로 아래와 같이 하면 됩니다.

실행 환경을 서비스로 등록하기

서비스로 등록

서비스 생성하는 법은 이전 글에서도 잠시 다루었습니다. 절차는 비슷합니다.

서비스 명칭을 스크린 세션 명칭과 동일하게 mcserver 라고 하겠습니다.

아래 명령어로 서비스 설정을 합니다.

nano /etc/systemd/system/mcserver.service

입력할 내용은 아래와 같습니다.

[Unit]
Description=Bedrock Server Service
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
User=ubuntu
ExecStart=/usr/bin/bash /home/ubuntu/mbedrock/startmc.sh
ExecStop=/usr/bin/bash /home/ubuntu/mbedrock/stopmc.sh
WorkingDirectory=/home/ubuntu/mbedrock/
Restart=always
TimeoutStartSec=600

[Install]
WantedBy=multi-user.target

저장하고 나면, 서비스가 생성이 되었습니다. 이제 아래 명령어로 서비스를 활성화 하면 됩니다.

sudo systemctl enable mcserver

이제 서버를 재시작하면 자동을 시작됩니다. 만약 리부팅 없이 서비스를 켜고 싶다면, start 명령어를 사용하면 됩니다. 시작된 서비스를 중지하고 싶을 때는 stop 명령어를 사용하면 됩니다.

sudo systemctl start mcserver
sudo systemctl stop mcserver

결론

지금까지 베드락 서버를 서비스로 등록하는 과정을 살펴봤습니다. 좀 더 편리하게 마인크래프트를 이용할 수 있게 되었습니다.

스크립트 생성후, 서비스로 등록하고, 서비스를 활성화 하는 것까지 살펴봤습니다.

한걸음 더 나간다면, AWS CLI를 이용해서 웹 콘솔에 접속하지 않고, PC의 터미널에서 AWS 서버를 켜면, 마인크래프트 서비스가 올라오게 됩니다. 해당 하는 주제를 더 알고 싶으시면, 여기를 참고하세요.

문제 해결

만약 모바일에서 접속이 안된다면 포트를 확인해 보세요. 19132-19133 : TCP & UDP ports 가 열려 있는지 방화벽을 확인해보세요.

서비스가 실행이 제대로 안된다면 디렉토리와 사용자명을 확인해보세요.

AWS 의 경우, 서버를 중지후 다시 시작하면 ip가 변경될 수 있으니, Elastic IP 기능을 이용해서, 서버 ip를 고정하면 편리합니다.

Leave a Comment