• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
후기

마인크래프트 서버 구축 현황 - 뼈대 만들기

빨간물약 빨간물약 413

2

5

image.png.jpg

요즘 마크 서버를 만들어 보고 있습니다

 

image.png.jpg

저번 글에서 한 서버에 여러 월드를 만드는 방식의 멀티버스 플러그인을 쓰느냐 

 

image.png.jpg

여러 서버를 프록시 서버 아래로 묶는 번지코드 방식을 쓰느냐

 

고민을 하다가 번지코드 방식을 선택 하기로 했다고 까지 이야기를 했었습니다

 

우선 생각하는 서버 구성은 

 

 

image.png.jpg

대충 이런 방식 입니다

 

시놀 도커에 올린 상태인데

프록시 포함 서버 컨테이너를 네 개 올리고

DB를 통한 동기화는 시놀로지 패키지의 마리아DB를 이용 합니다

 

도커에 MySQL을 올려서 돌리는 것도 방법 입니다만

기존에 세팅해둔 마리아DB가 있으니 활용을 해줍니다

 

우선 프록시 서버인 번지코드로 접속을 하면 

로비 서버로 이동이 되고 거기서 야생이나 마을 서버를 자유롭게 이동이 가능한 구조 입니다

 

그리고 플러그인에서 지원을 한다면 MySQL이나 Redis를 이용해서 동기화가 가능한 방식이고요

참고로 동기화 작업을 안 해주면 저 세 개의 서버는 각각 별개의 서버이기 때문에

로비에서는 곡괭이를 들고 있는데 마을 서버에 가면 빈 손이고 

야생 서버에서 아이템을 습득해도 다른 서버에서는 적용이 안되고 이런 식이겠죠

이 부분이 골치 아퍼지는 부분입니다

DB 동기화 작업을 해주기 위해서는 번지코드를 지원하는 플러그인이 필요한데

 

우선 서버를 올려줍니다

version: '3.5'

services:
  mc1:
    image: itzg/minecraft-server
    tty: true
    stdin_open: true
    environment:
      EULA: true
      TYPE: PAPER
      VERSION: 1.20.1 #latest
      ONLINE_MODE: "FALSE"
      UID: 1026
      GID: 100
      TZ: Asia/Seoul
      #ENABLE_JMX: true
      #JMX_HOST: 192.168.0.45
      CFG_MOTD: 환영합니다
      DIFFICULTY: normal
      ICON: /downloads/icon/icon.png
      OVERRIDE_ICON: TRUE
      MAX_PLAYERS: 10
      MAX_WORLD_SIZE: 200
      ALLOW_NETHER: false
      ENABLE_COMMAND_BLOCK: true
      GENERATE_STRUCTURES: false
      SPAWN_ANIMALS: false
      SPAWN_MONSTERS: false
      SPAWN_NPCS: false
      SERVER_NAME: Dream
      ENABLE_AUTOPAUSE: TRUE
      AUTOPAUSE_TIMEOUT_INIT: 600
      STOP_SERVER_ANNOUNCE_DELAY: 20
      STOP_DURATION: 60
      PROXY: true
      MEMORY: 512M
    volumes:
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_lobby/data:/data
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_lobby/downloads:/downloads
    depends_on:
      - bungeecord
      - redis
    ports:
      - "25565:25565/udp"
  mc2:
    image: itzg/minecraft-server
    tty: true
    stdin_open: true
    environment:
      EULA: true
      TYPE: PAPER
      VERSION: 1.20.1 #latest
      ONLINE_MODE: "FALSE"
      UID: 1026
      GID: 100
      TZ: Asia/Seoul
      #ENABLE_JMX: true
      #JMX_HOST: 192.168.0.45
      MOTD: 환영합니다
      DIFFICULTY: normal
      ICON: /downloads/icon/icon.png
      OVERRIDE_ICON: TRUE
      MAX_PLAYERS: 10
      SERVER_NAME: Dream
      ENABLE_AUTOPAUSE: TRUE
      AUTOPAUSE_TIMEOUT_INIT: 600
      STOP_SERVER_ANNOUNCE_DELAY: 20
      STOP_DURATION: 60
      PROXY: true
      MEMORY: 2G
    volumes:
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_wild/data:/data
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_wild/downloads:/downloads
    depends_on:
      - bungeecord
      - redis
      - mc1
    ports:
      - "25566:25566/udp"

  mc3:
    image: itzg/minecraft-server
    tty: true
    stdin_open: true
    environment:
      EULA: true
      TYPE: PAPER
      VERSION: 1.20.1 #latest
      ONLINE_MODE: "FALSE"
      UID: 1026
      GID: 100
      TZ: Asia/Seoul
      #ENABLE_JMX: true
      #JMX_HOST: 192.168.0.45
      MOTD: 환영합니다
      DIFFICULTY: normal
      ICON: /downloads/icon/icon.png
      OVERRIDE_ICON: TRUE
      MAX_PLAYERS: 10
      SERVER_NAME: Dream
      ENABLE_AUTOPAUSE: TRUE
      AUTOPAUSE_TIMEOUT_INIT: 600
      STOP_SERVER_ANNOUNCE_DELAY: 20
      STOP_DURATION: 60
      PROXY: true
      MEMORY: 1G
    volumes:
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_town/data:/data
      - /volume1/docker/minecraft_bungee_paper/minecraft_plugin_paper_town/downloads:/downloads
    depends_on:
      - bungeecord
      - redis
      - mc1
      - mc2
    ports:
      - "25567:25567/udp"

  redis:
   container_name: minecraft_paper_redis
   image: redis:latest
   restart: always
   depends_on:
      - bungeecord
      
  bungeecord:
    image: itzg/bungeecord
    environment:
      BUNGEE_JAR_REVISION: "1"
      CFG_MOTD: 환영합니다
      REPLACE_ENV_VARIABLES: "true"
      TZ: Asia/Seoul
    ports:
      - "25565:25577"
    volumes:
      - /volume1/docker/minecraft_bungee_paper/config/config.yml:/config/config.yml
      - /volume1/docker/minecraft_bungee_paper/server:/server

volumes:
  bungeecord: {}            

제가 사용 중인 코드입니다만

 

계속 수정 중이고 이것저것 적용해보는 중이니까 그냥 참고만 하시길 바랍니다

 

프록시 번지코드와 세 개의 서버 그리고 Redis 서버까지 올려 줬습니다

대충 이런 방식이구나 라고 보시면 됩니다

 

우선 세개의 서버를 만드는데 있어서 중요한 점은

 

ONLINE_MODE: false 라는 부분입니다

이 부분은 쉽게 이야기 하자면 정품 인증 옵션입니다

사용자의 UUID를 마인크래프트 서버에서 가져오느냐 마느냐 하는 부분인데요

UUID는 사용자 식별 코드라고 보시면 됩니다

마인크래프트 정품 사용자는 고유 코드가 있고

이 부분이 온라인 서버에 저장이 돼있습니다

본섭에서 내 캐릭터 스킨 설정을 하고

일종의 프리서버인 사설 서버에 접속을 해도

본섭의 캐릭터로 게임을 플레이 할 수 있는 건 이 고유한 UUID 때문이죠

그럼 이 부분은 false로 하면 안되지 않나? 라고 생각하실 수 있는데

우리는 프록시 서버 번지코드를 이용하기 위해서 따로 설정을 해줘야 합니다

image.png.jpg

번지코드 설정에서 온라인 모드와 ip_fowad 옵션을 켜주고 각 서버 이름을 지정 해주고

각 스피갓 서버(페이퍼 서버) 설정에서 온라인모드를 끄고 번지코드 옵션을 켜줍니다

그러면 이제 프록시에서 온라인 모드를 관리하게 되는 거죠

  

 

image.png.jpg

접속을 해보면 본섭의 캐릭터 스킨으로 접속이 잘 됩니다

 

각 서버를 이동을 해봅니다

번지코드 기본 커맨드인 /server 를 입력 해보면

위에서 지정 해줬던 lobby town wild 라는 서버 이름이 보일 겁니다

그 중에 하나를 적어주면 그 서버로 이동이 되는 거죠

 

이제 대충 다 됐으니 각 서버에 거점을 만들어 주...ㄹ 필요가 없습니다...

 

몇 번 갈아 엎을 생각을 해야 하니까요

 

그리고 지금은 뼈대를 세우기 위한 단계라 기능 구현이 우선입니다

 

저도 괜히 이 서버 저 서버에 움막 만들어서 거점 만들어 뒀었는데 결국 서버 통째로 다 엎었습니다

월드 재생성도 몇 번 하고 컨테이너도 다 지우고 다시 만들기 몇 번....

 

그러니 뭐 꾸미고 건설하고 이런 건 나중에 생각 합니다

 

물론 아 이정도도 충분하다 라는 분들은 그냥 쓰셔도 상관 없습니다

동기화 작업은 생각 보다 위험도가 그리 크지는 않거든요 

그냥 간단히 즐기실 분들은 로비 없이 마을과 야생 서버 두 개 정도 만들어서 즐기셔도 좋을 거 같네요

로비+마을, 야생 이런 느낌으로요 굳이 서버 세개를 만들 필요는 없습니다

 

나스도 서버 하나 늘어날 때 마다 힘들어 하고요....

어쨌든 이제 서버는 준비가 됐으니 기능을 추가할 차례 입니다

 

지금 만드는 서버는 페이퍼 서버 입니다

버킷, 스피갓 서버의 한 종류인데요

이 서버는 기능 구현을 플러그인으로 합니다

 

앞에서도 몇 번 이야기 드렸지만 플러그인의 장점은 서버에만 적용을 하면

클라에서는 별 다른 작업 없이 이용이 가능하다는 점

단점은 수정 가능한 부분이 모드 보다 제한 적이다라는 점 입니다

 

플러그인을 설치하는 건 쉽습니다

 

프록시 번지코드 또는 각 페이퍼 서버가 설치 된 위치에 가보시면 

번지코드는 sever 폴더 안에 페이퍼 서버는 data 폴더 안에

plugins 폴더가 있습니다

저 곳에 플러그인.jar 파일을 넣으시고

서버를 올리면 설치한 플러그인 폴더가 생기고

서버를 종료 후에 설치한 플러그인 폴더 안 config 파일을 수정 후

다시 서버 시작

 우선 jar 파일을 넣고 서버를 한 번 켜줘야 폴더 설치가 됩니다

 

자 플러그인 설치하는 방법도 알았으니 이제 플러그인 쇼핑을 하러 가면 됩니다

 

플러그인을 구하는 곳은 여러 사이트가 있지만 

SpigotMC - High Performance Minecraft

저는 이곳을 주로 사용 합니다

 

뭐 구글에서 검색하면 대부분 여기 더라고요....

 

이런저런 기능을 구현해야 겠지만 우선 중요한 건 동기화 문제겠죠

 

  • 첫 번째는 유저 데이터 동기화 - 캐릭터가 이 서버 저 서버 이동을 해도
  • 각 아이템이나 체력이나 레벨 스킬 등등이 유지가 되느냐 하는 부분 입니다
  • 두 번째는 서버 간의 이동이 문제겠죠
  • /server 명령어는 관리자 명령어라 나중에 다 숨겨 줄 겁니다 
  • 물론 혼자 쓰시거나 전부 지인이나 가족들이라
  • 굳이 숨길 필요 없다 하시는 분들은 저 방식으로 쓰셔도 됩니다
  • 그 외에도 서버간의 채팅이나 건설한 마을의 보호
  • 화폐 거래등의 경제 시스템이나 RPG 시스템 등등

많지만 우선은 동기화 부분 부터 해결을 봐야겠습니다

 

우선 동기화 플러그인을 찾다가 좋은 플러그인을 찾았습니다

이 분 영상인데요 HuskSync 라는 플러그인 입니다

설명 아주 쉽고 자세하게 돼있으니 참고하시면 무리 없이 설치 하실 수 있을 겁니다

 

직접 컴파일 하면 무료 플러그인인데 성능 좋더라고요

현재는 체력이 동기화 안되는 이슈가 있어서 개발자분이 테스트 중이긴 합니다만

다른 부분은 잘 됩니다

 

그럼 유저 데이터 동기화는 됐고

 

두 번째 서버 간의 이동

저는 찾다가 BungeeTeleportManager | SpigotMC - High Performance Minecraft

이 플러그인을 설치를 했었습니다만 뭔가 뭔가여서 좀 불편하더라고요

 

그런데 딱히 다른 대안이 없더라고요 그러다가 

 

William278.net - Open source Minecraft server software & game projects. - William278.net

HuskSync 개발자가 다른 플러그인들도 만들었다는 걸 알았습니다

 

당연히 전부 번지코드 호환 잘 되고요 통일성도 있으니 이 걸로 다 바꿔줍니다

 

간단하게 플러그인 소개를 좀 하자면 

 

HuskSync는 아실 거고

 

 

image.png.jpg

HuskHomes 는 말 그대로 홈을 지정 하고 워프를 지정하고 각 서버를 뚫고 워프를 할 수 있는 기능을 지원 합니다

 

그러니까 마을 서버에 홈을 지정 하거나 워프를 지정 해 두면 야생에서 사냥 하다가

/warp [워프이름] 치면 그 곳으로 이동이 가능 한 거죠

 

어? 그럼 /server 랑 비슷한 거 아닌가? 라고 생각하실 수 있겠지만

/server 는 각 서버로 이동만 시켜주고 캐릭터 좌표는 마지막에 있던 곳으로 접속이 됩니다

위의 플러그인은 야생 - 사냥터, 야생 - 광산, 마을 - 집, 마을 - 농장 뭐 이런 식으로 설정을 하고

다른 서버의 특정 좌표로 이동이 가능하게 해주죠

 

아무튼 이것도 잘 됩니다

 

 

image.png.jpg

이건 claim을 편하게 도와주는 플러그인 입니다

일반 적으로 마을이 있는 서버에서는 각각의 유저에게 청크(16X16 블럭 크기 단위) 를 할당 해주고

그곳에 건물을 짓던 농사를 짓던 해라 라고 많이들 합니다

그 점유 된 구역은 내 구역이 되는 거죠

설정에 따라 권한이 없는 유저는 블럭을 부수지 못한 다거나 상자나 문을 열지 못한 다거나

그런 식의 보호 장치를 설정을 통해 걸 수 있는 영역 입니다

그 점유를 하는 과정을 좀 더 편하고 자유롭게 해주는 방식입니다

16X16 크기의 청크는 정사각형인데 이 플러그인에서는 블럭 갯수로 정할 수 있게 돼있더라고요

좀 더 자유롭게 설정이 가능 합니다만 아래의 플러그인과 겹치니까 선택을 해서 쓰시면 될 거 같네요

운영자클레임 관리용으로 나쁘지 않습니다

 

 

image.png.jpg

이건 마을 시스템 입니다

 

마인크래프트의 마을이라는 것은 위에서 이야기한 claim을 기반으로

정해진 구역에서 유저에게 각각 일정 청크를 할당하고 그 곳에 집을 짓는 방식이죠

 

그러니까 따로 시스템이 있는 건 아니고 

각각의 유저가 본인의 claim 청크 안에 만든 건물이나 설치물을 보호해 주는 방식 입니다

 

하지만 이 플러그인은 말 그대로 마을을 건설 할 수 있는 플러그인 입니다

 

 

image.png.jpg

마을을 만들고 주민(유저)을 받아들이고 마을 금고에 돈을 넣어서 마을 렙업을 시켜서 점유할 수 있는 땅을 늘리고

점유한 땅에 권한을 설정하고 다른 마을과 전쟁할 수 있는 시스템도 있습니다

 

여기도 claim 기능이 있죠 여기는 청크 단위로 점유할 수 있습니다

개발자가 같으니 이런 저런 호환 옵션도 있습니다

 

 

image.png.jpg

마지막은 HuskChat 라는 플러그인 입니다

서버 간 채팅을 위한 플러그인이죠 귓말이나 답장 스태프 챗 같은 것도 가능하고

디스코드 연동도 됩니다

 

각 플러그인에 위키도 있고 설정도 그렇게 어렵지 않으니까 별 문제 없이 설치 가능 할 겁니다

디코 지원도 해주기는 하는데 유료 구매자에 한해서만 해주더라고요

그래도 디코 가입해서 다른 사용자들이 했던 질문들은 볼 수 있으니 참고하세요

 

아직 설치할 게 많이 남기는 했지만 그래도 이래저래 대충 구색을 갖춰가고 있습니다

 

위에 타운 설명을 보다보면 economy 관련 이야기가 나옵니다

경제 플러그인이 필요한 거죠

 

이런저런 플러그인이 많지만 독자적인 플러그인은 호환성이 안 좋습니다

 

나중에 상점 플러그인을 도입해도 경제 플러그인 지원이 안된다면 가지고 있는 돈으로 구매가 안되겠죠

 

워프에 금액을 지정 하고 싶어도 할 수가 없습니다

 

그래서 호환성 좋으면서 번지코드에서 동기화도 되는 플러그인을 찾아야 했는데

 

 

또 이분이 올리신 영상에서 답을 찾았습니다

 

xconomy라는 경제 플러그인인데 괜찮더라고요

vault api 지원을 해서 husk시리즈랑 연동도 잘 되고요

다른 호환되는 것들이 많습니다

 

가장 유명한? economy 플러그인이나 에센셜 플러그인은 멀티 서버 지원이 안되서 뺐습니다

그래도 똑같은 vault 지원 플러그인이라 문제 없으니 xconomy를 설치 해주면 될 거 같네요

 

이제 나중에 GUI 상점도 만들면 템 사고 팔고 하고

HuskTown 에서 마을 업그레이드 할 때 도 쓰고 

수표 스크립트를 만들어서 돈을 인출해서 유저간 거래도 가능해집니다

 

이것저것 플러그인이 꽤 설치가 되긴 했지만 아직 모자라죠

 

권한 설정이나 음챗이나 npc 관련, 각종 스크립트등등....은 나중에 적어야겠네요

 

그리고 플러그인을 통해 기능 구현이 끝나면 이제 서버를 꾸며야겠죠

할 게 많습니다...만 오늘은 여기까지 적어야 겠습니다

 

긴 글 읽으시느라 고생 하셨습니다

신고공유스크랩
5
2등
뚕뚕 2024.02.28. 16:49

과정들을 이렇게 올려주시니 초보자 분들도 따라하기도 좋고 직접 만드는건 아니지만 읽기도 재밌네요 ㅎㅎ

3등
젊머니 5일 전
따라해서 그대로 만들어보고있습니다. 저한테 정말 필요한 정보였는데 도움 감사합니다!

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
가이드 Ubuntu 24.04 LTS Desktop 원격 접속 설정하기(SSH,RDP) 3 달소 1일 전18:33 82 +1
가이드 Ubuntu 24.04 LTS Server 설치해보기 달소 1일 전17:40 158 +2
잡담 Ubuntu 24 가 정식출시되었습니다~~ 8 달소 1일 전10:37 267 +2
3870 잡담
normal
kmw_ 21시간 전21:52 316 0
3869 후기
normal
ljr10 22시간 전21:18 93 0
3868 가이드
image
달소 1일 전18:09 84 0
3867 가이드
image
달소 1일 전19:06 58 0
3866 가이드
image
달소 1일 전18:33 82 +1
3865 잡담
image
달소 1일 전10:37 267 +2
3864 가이드
image
달소 1일 전17:40 158 +2
3863 질문
image
게르노 2일 전16:08 75 0
3862 질문
normal
까칠한나그네 1일 전15:44 80 0
3861
image
달소 23.07.09.16:17 761 0
3860 질문
normal
서버구축하자 3일 전13:09 425 0
3859 가이드
image
달소 2일 전07:24 281 0
3858 질문
normal
감자칩 2일 전18:56 203 0
3857 가이드
image
달소 1일 전22:54 86 0
3856 가이드
image
달소 1일 전23:10 83 +1
3855 질문
normal
웹서버구축관심 5일 전02:22 336 0
3854 잡담
image
달소 2일 전07:46 297 +1
3853
image
한군77 23.03.16.11:23 462 0
3852
image
달소 22.07.22.14:46 1511 +2
3851 정보
image
달소 2일 전08:21 173 +1