이제 데비안 서버의 기본 설정을 다 마쳤다. 이제 마인크래프트 서버 구동을 위한 설정을 하면 된다.
마인크래프트 서버 다운로드 및 설정
서버 컴퓨터의 사양이 그리 좋지 않은 관계로, 모드를 잔뜩 설치한 모드팩 서버는 열기가 힘들다.
정확히 말하면 열 수는 있는데, 조금만 부하가 심해져도 서버가 터질 것 같다.
Paper 서버 다운로드
그래서 최적화가 잘 된 Paper 서버에 플러그인을 추가해서 열기로 했다. 추가적인 몬스터나 블록, 아이템은 없겠지만 대신 속도와 안정성을 얻었다.
다운로드한 Paper 서버 파일 이름은 paper-26.1.2.jar로 변경했다. 그래야 나중에 Paper 서버 빌드를 업데이트할 때 서버 시작 스크립트를 수정하지 않을 수 있으니까.
여기에 개인적으로 선호하는 플러그인을 잔뜩 추가했다.
마인크래프트 서버 설정
server.properties
1.21.2 버전에 추가된 pause-when-empty-seconds 덕분에 '서버에 사람이 없는데 월드 시간만 하릴없이 지나가는 상황'을 막을 수 있다.
# ...
pause-when-empty-seconds=60
# ...접속 중인 플레이어가 0명인 상황이 60초 이상 지속될 경우, 서버의 시간이 멈춘다.

시작 스크립트
Paper 서버를 Windows에서 테스트한 후 Debian에 복사해 서비스할 생각이기 때문에, Windows용 시작 스크립트와 Linux용 시작 스크립트를 서버 디렉터리 최상단에 작성했다.
Aikar의 JVM 인수를 사용하고, RAM을 6GB 할당했다.
-Djava.net.preferIPv4Stack=true: Java가 IPv6를 사용해 마인크래프트 인증 서버에 접속하는 것을 방지
Windows용
@echo off
cd /d "%~dp0"
java -Xms6144M -Xmx6144M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -Djava.net.preferIPv4Stack=true -jar paper-26.1.2.jar --nogui
pauseLinux용
#!/bin/bash
cd "$(dirname "$0")"
/usr/bin/java -Xms6144M -Xmx6144M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -Djava.net.preferIPv4Stack=true -jar paper-26.1.2.jar --nogui나중에 Debian 서버에 복사한 후, 실행 가능하도록 권한을 변경해야 한다.
$ chmod +x /path/to/_run.sh필요 패키지 설치
Java JRE
마인크래프트 서버 구동에는 Java JRE가 필요하다.
- 1.18 ~ 1.20.4: Java 17
- 1.20.5 ~ 1.21.11: Java 21
- 26.1 ~ 현재: Java 25
Debian이 제공하는 OpenJDK JRE를 설치해도 좋다.
$ # 필요한 Java JRE 버전 설치
$ sudo apt install openjdk-17-jre
$ sudo apt install openjdk-21-jre
$ sudo apt install openjdk-25-jre하지만 난 Eclipse Temurin JRE를 설치하고 싶었다. Windows에서 쓰는 JDK가 Eclipse Temurin이었기 때문이다.
먼저 Eclipse Temurin 설치에 필요한 패키지를 설치한다.
$ sudo su -
# apt install wget apt-transport-https gpgEclipse Temurin GPG 키를 apt keyring에 등록한다.
# wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/keyrings/adoptium.gpg > /dev/nullEclipse Temurin DEB 저장소를 추가한다.
# echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list현재 Debian 13을 쓰고 있기 때문에 adoptium.list의 내용을 출력하면 다음과 같은 결과가 나온다.
# cat /etc/apt/sources.list.d/adoptium.list
deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb trixie main이제 Eclipse Temurin을 설치할 수 있다.
# apt update
# # 필요한 Java JRE 버전 설치
# sudo apt install temurin-17-jre
# sudo apt install temurin-21-jre
# sudo apt install temurin-25-jretmux
곧 설명하겠지만, 마인크래프트 서버를 tmux 세션에서 실행할 생각이다.
$ sudo apt install tmuxsystemd 서비스 작성
마인크래프트 서버 관리를 위한 도구는 정말 많다. Pterodactyl이라던가, AMP라던가…
하지만 내 서버의 사양은 그리 좋지 않고, 이런 패널에 드는 리소스조차 아깝다. 따라서 마인크래프트 서버는 systemd 서비스로 구현 및 관리하기로 했다.
# /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Paper Server (tmux)
After=network.target
[Service]
Type=forking
User=minecraft
Group=minecraft
WorkingDirectory=/home/minecraft/minecraft/paper
Environment="TMUX_TMPDIR=/home/minecraft"
ExecStart=/usr/bin/tmux new -d -s minecraft './_run.sh'
ExecStop=/usr/bin/tmux send-keys -t minecraft "stop" Enter
ExecStop=/usr/bin/bash -c 'while /usr/bin/tmux has-session -t minecraft 2>/dev/null; do sleep 1; done'
KillMode=control-group
TimeoutStopSec=120
Restart=on-failure
[Install]
WantedBy=multi-user.target마인크래프트 서버를 tmux 세션에서 구동하여 필요할 시 서버 콘솔에 직접 접근이 가능하도록 설계했다.
User=minecraft/Group=minecraft: 마인크래프트 서버를 root가 아닌 minecraft 사용자가 실행하도록 한다.Environment="TMUX_TMPDIR=/home/minecraft": systemd 서비스는 tmux 소켓 기본 생성 경로인/tmp/*에 접근할 수 없으므로, minecraft 사용자의 홈 디렉터리에 생성하도록 설정한다.TimeoutStopSec=120: 서버가 2분 동안 종료되지 않았다면 강제 종료한다.
systemd 데몬을 다시 불러온 후, minecraft 서비스를 테스트해본다.
$ sudo systemctl daemon-reload
$ sudo systemctl enable minecraft
$ sudo systemctl start minecraft
$ sudo systemctl status minecraft이후 서버를 종료할 때에는 sudo systemctl stop minecraft를 입력하면 된다.
.bashrc 수정
minecraft 계정으로 tmux 세션을 확인하기 위해서는 서비스에서 정의한 환경 변수를 minecraft 계정에 동일하게 적용해야 한다.
$ # minecraft 계정으로 접속
$ nano ~/.bashrc이후 다음 내용을 맨 아래에 추가한다.
export TMUX_TMPDIR=/home/minecraft![[Debian] 마인크래프트 서버 설치기 (1) - 데비안 설치](/d/server/debian-minecraft-server-1/logo.86ca6ab6e86a276b4ae79d7fa1bea66f.webp)
![[Go] 바이너리 파일 크기 줄이기](/d/development/go-reduce-binary-size/go.bf1d3c89973bfed4966f685e124cfdfa.webp)
![[Windows] UAC 확인창 없이 관리자 권한으로 프로그램 실행하기](/d/desktop/skip-uac-prompt/logo.b3b0aec18985fff34c5295de475fdff7.webp)
![[Prism Launcher] 설정](/d/game/prism-launcher-configuration/logo.f3d9c39d1f7cfd4c479d6d90c4917eb2.webp)
![[Prism Launcher] 설치](/d/game/prism-launcher-install/logo.f3d9c39d1f7cfd4c479d6d90c4917eb2.webp)
![[Windows] 업그레이드 차단하기](/d/desktop/windows-block-upgrade/logo.1dc0ab65e12a8e9a0bb1ae2f179d7a83.webp)
![[macOS] Finder 도구 막대에 버튼 추가하기](/d/desktop/macos-add-button-to-finder-toolbar/003.0caaabd1cfdef47e683ebf823397f56e.webp)
![[Android] 삼성 스마트폰 카메라 촬영음 없애기](/d/mobile/android-disable-samsung-smartphone-camera-shutter-sound/logo.afa3141f6fef59f61f9ae0ff6a791fc8.webp)
![[Visual Studio] UI 요소 숨기기](/d/development/visual-studio-hide-ui-element/logo.64e4d119ae00189abe69768e00da86a8.webp)
![[Windows] Wi-Fi 프로필 내보내기/불러오기](/d/desktop/windows-wifi-profile-import-export/logo.0d08578a12ef60ebe6ede2982d77af4a.webp)