⚠️ 들어가며
서버를 여는 방법은 초급편글에 있습니다.
초급편과는 달리, 약간의 컴퓨터 지식이 필요할 수 있습니다.
하지만 끈기와 의지가 있으신 분들이라면 충분히 따라할 수 있으실겁니다.
주제가 광범위하기 때문에 Q&A 형식으로 포스팅했습니다.
⛔️ docker: Error response from daemon: Conflict 오류가 떠요
이미 동일한 내용의 docker container가 올라가서 그렇습니다. 아래 명령어로 마크 서버 컨테이너를 삭제하고 다시 시도해보시면 될겁니다.
docker stop mc && docker rm mc
🧾 Server.properties를 바꾸고 싶어요 ex) 최대 플레이어 수 늘리기
최대 플레이어 수를 늘리려면 vim으로 server.properties를 직접 수정해도 되지만, vim 사용이 어려우신 분들도 있겠죠? 서버를 열때 명령어상에서 server.properties 설정을 해줄 수 있습니다.
마인크래프트 서버 띄우는 명령어를 보시면 -e <무슨값>=<무슨값> 같은 패턴이 보이실겁니다.
이렇게 옵션을 더해주면되는데요, 아래는 최대 플레이어(MAX_PLAYERS)를 256명으로 설정한 예시입니다.
docker run -d -it
-e EULA=TRUE
-e MAX_PLAYERS=256
-v ~/be_minecraft_data:/data
-p 19132:19132/udp --name mcbe
itzg/minecraft-bedrock-server
더 많은 옵션들이 있습니다. 필요한 만큼 추가하면됩니다.
- SERVER_NAME
- SERVER_PORT
- SERVER_PORT_V6
- GAMEMODE
- DIFFICULTY
- LEVEL_TYPE
- ALLOW_CHEATS
- MAX_PLAYERS
- ONLINE_MODE
- WHITE_LIST
- VIEW_DISTANCE
- TICK_DISTANCE
- PLAYER_IDLE_TIMEOUT
- MAX_THREADS
- LEVEL_NAME
- LEVEL_SEED
- DEFAULT_PLAYER_PERMISSION_LEVEL
- TEXTUREPACK_REQUIRED
- SERVER_AUTHORITATIVE_MOVEMENT
- PLAYER_MOVEMENT_SCORE_THRESHOLD
- PLAYER_MOVEMENT_DISTANCE_THRESHOLD
- PLAYER_MOVEMENT_DURATION_THRESHOLD_IN_MS
- CORRECT_PLAYER_MOVEMENT
- ALLOW_NETHER
- ANNOUNCE_PLAYER_ACHIEVEMENTS
- MAX_WORLD_SIZE
- ENABLE_COMMAND_BLOCK
- HARDCORE
- SNOOPER_ENABLED
- GENERATE_STRUCTURES
- FORCE_GAMEMODE
- MAX_TICK_TIME
- MAX_BUILD_HEIGHT
- SPAWN_ANIMALS
- SPAWN_MONSTERS
- SPAWN_NPCS
- SPAWN_PROTECTION
- PVP
- ALLOW_FLIGHT 등등등...
참고로, 화이트리스트 여러명 적는방법은 다음과 같습니다.
-e WHITE_LIST_USERS="player1,player2,player3"
📌 특정 버전의 서버를 열고 싶어요 or Spigot / Forge / Fabric 서버를 열고 싶어요
마찬가지로 서버 구동 명령어에 아래처럼 그저 옵션만 달리주면됩니다.
정말 다양한 종류의 서버들을 지원합니다.
# Forge
-e TYPE=FORGE
-e VERSION=1.12.2
-e FORGE_VERSION=14.23.5.2854
# Spigot
-e TYPE=SPIGOT
# Quilt
-e TYPE=QUILT
-e QUILT_LOADER_VERSION=0.16.0
-e QUILT_INSTALLER_VERSION=0.4.1
# Fabric
-e TYPE=FABRIC
-e FABRIC_LAUNCHER_VERSION=0.10.2
-e FABRIC_LOADER_VERSION=0.13.1
# 그 밖에 지원하는 Type들...
PAPER | MAGMA | MOHIST | CATSERVER | LOLISERVER | CANYON | PURPUR | PUFFERFISH
CRUCIBLE | LIMBO | SPONGEVANILLA
# Minecraft 다른 버전
-e VERSION=1.12.2
📥 SpigotMC/Bukkit/PaperMC 플러그인 자동 다운로드하기
Resource ID를 통해서 서버 구동시 관련 플러그인이나 리소스를 자동으로 다운로드 할 수 있습니다.
예를들어 내가 spigotmc에서 EssentialsX를 구동시 서버에 설치한다고해보겠습니다.
URL에서 마지막의 숫자부분 (9089)가 Resource ID가 됩니다.
https://www.spigotmc.org/resources/essentialsx.9089/
서버 구동시 명령어 옵션으로 추가해줄 수 있습니다. (34315는 Vault 플러그인입니다.)
"SPIGET"은 오타가 아닙니다!
-e SPIGET_RESOURCES=9089,34315
🔨 JVM option을 주고싶어요
추가적인 JVM 옵션을 주고싶다면 JVM_OPTS를 이용하면됩니다.
-e JVM_OPTS="-someJVMOption someJVMOptionValue"
제가 마크 서버 최적화 하기 포스팅에서도 설명했던 aikar Flag를 적용시킬수도 있습니다.
-e JVM_OPTS="-XX:+IgnoreUnrecognizedVMOptions -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true"
📏 최대, 최소 메모리 설정을 하고싶어요
이젠 옵션이라 말하기도 입아픈걸~
# -Xms2G -Xmx2G
-e MEMORY=2G
# -Xms2G -Xms4G
-e INIT_MEMORY=2G -e MAX_MEMORY=4G
💸 클라우드 서버를 이용하는데, 비용 때문에 밤중에는 서버를 닫고 싶어요
물론 클라우드 서버 인스턴스를 켜두는 것 만으로도 돈이 들이지만... 조금이라도 비용절감을 하고싶으시다면 crontab에 docker container 중지하고 시작하는걸 등록 해두시면 되겠습니다.
아래는 매일 새벽 2시~9시까진 서버를 내렸다가 9시에 여는 예시입니다.
서버시간은 UTC 기준일 수 있으니 Timezone 세팅 코드도 추가해두었습니다.
$ sudo timedatectl set-timezone Asia/Seoul
$ crontab -e
0 2 * * * docker container stop mc
0 9 * * * docker container start mc
⏰ 특정시간마다 월드를 자동으로 백업하고 싶어요
https://github.com/itzg/docker-mc-backup 를 이용해서 백업하시면 됩니다. 여러가지 옵션에 당황스러우시겠지만 필요한 예시만 추려서 보여드리겠습니다.
아래 명령어는 /backups 폴더에 tar파일로 매일(1d)마다 백업합니다.
docker run \
-e SRC_DIR=/backups \
-e BACKUP_INTERVAL=1d \
--name=mcbackup itzg/mc-backup
저런식으로 2시간(2h)마다도 가능하고 2시간 30분(2h 30m)마다도 가능합니다.
캬~ 서버 열기 좋은 세상이다 그죠
# 압축은 이렇게 푸시면됩니다.
tar -xvf <파일명.tar>
🖥️ 제 컴퓨터로 월드 파일을 옮기고 싶어요
scp로 옮기실 수 있는 분들은 이 질문을 하지 않았을거같아서 FTP로 옮기는 방법을 추천드립니다. GCP로 서버를 여신분들이라면 아래 블로그 강의를 따라가시는게 좋을 것 같군요!
- 짧지만 영어 - https://onepagezen.com/google-cloud-ftp-filezilla-quick-start/
- 길지만 한국어 - https://copycoding.tistory.com/408
🤔 옵션 넣는거 불편해요, 여러 서버를 만들어야하는데 효율적인 방법 없을까요?
고급편 글을 보면 대부분 모든것이 옵션으로 이루어져있습니다. docker run 말고 docker compose를 이용하시면 매번 긴 명령어를 적어서 컨테이너를 run하는 번거로움으로부터 해방됩니다.
# Docker compose plugin 설치
$ sudo apt-get update
$ sudo apt-get install docker-compose-plugin
# 설정파일 생성
$ touch docker-compose.yml
docker-compose.yml은 설정파일입니다.
Java Edition 서버 + 백업 기능까지 붙인 설정파일을 예시로 들어드릴테니 변형해서 사용하시면됩니다.
environment쪽에 우리가 앞에서 -e 옵션으로 설정해줬던 모든 것들이 들어갈 수 있습니다.
version: "3.4"
services:
mc:
image: itzg/minecraft-server
ports:
- 25565:25565
environment:
EULA: "TRUE"
tty: true
stdin_open: true
restart: unless-stopped
volumes:
- ./minecraft-data:/data
backups:
image: itzg/mc-backup
environment:
BACKUP_INTERVAL: "2h"
volumes:
- mc:/data:ro
- ./mc-backups:/backups
docker compose up 명령어로 서버, 백업 프로그램을 한번에 구동시킬 수 있습니다.
아주 편리하죠?
docker compose up # 실행(올리기)
docker compose down # 내리기
😱 실수로 볼륨 설정을 안했어요...서버가 꺼지면 월드가 초기화될 위기에 처했어요
docker로 마크서버 띄우는 명령어에서 -v 해서 볼륨 설정하는 부분이있는데, 이를 누락하신채로 서버를 운영하실 경우 서버 재시작시 모든 파일이 날아가게 됩니다. 하지만 아직 서버가 구동중이라면 희망이 있는데요, docker 볼륨이 mount된 위치를 알아내어 파일을 복사하는 방법입니다.
# 컨테이너 이름을 mc라고 하면...
$ docker inspect -f "{{.Mounts}}" mc
# 이런 결과가 나올겁니다.
[{volume e565906355b0bc4516706b2db5269fc962f97967f7ac01d03d2e8fb9bf34f194 /var/lib/docker/volumes/e565906355b0bc4516706b2db5269fc962f97967f7ac01d03d2e8fb9bf34f194/_data /data local true }]
반환된 문자열에서 이렇게 파일 경로와 같은 부분이 있는데요, 이 부분이 지금 서버 파일이 저장된 장소입니다. 이 경로를 복사해주세요.
/var/lib/docker/volumes/e565906355b0bc4516706b2db5269fc962f97967f7ac01d03d2e8fb9bf34f194/_data
cp 명령어로 해당 경로에 있는 파일을 복사해준 후, 향후 서버 구동시 ~/my_data 폴더를 볼륨으로 마운트해주면 됩니다.
$ cp -r <복사한 경로> <저장할 경로>
$ cp -r /var/lib/docker/volumes/e565906355b0bc4516706b2db5269fc962f97967f7ac01d03d2e8fb9bf34f194/_data ~/my_data
🤓 아직 부족해요 더 알고싶어요
모든걸 설명하기엔 너무 기네요... 더 알고싶으신 분들은 https://github.com/itzg/docker-minecraft-server/blob/master/README.md 를 참고하시기 바랍니다. 감사합니다!
'프로그래밍 > 마인크래프트 서버, 플러그인' 카테고리의 다른 글
[무료] 마인크래프트 서버 쉽게 열고 관리하기 - 초급편 (자바, 베드락) (14) | 2022.11.12 |
---|---|
마인크래프트 서버 최적화 방법 (Can't keep up! Is the server overloaded) (7) | 2021.12.26 |
[마인크래프트] server.properties 속성 총 정리 (0) | 2021.10.10 |
[무료] GCP (Google Cloud Platform)으로 마인크래프트 서버 여는 법 (48) | 2021.09.22 |
마인크래프트(Minecraft) 인원별 서버 사양 추천 (0) | 2021.09.22 |