1. Установка Java 21
Версия Java критически важна — Minecraft 1.20.4 и новее требуют Java 21. Запуск на более старой версии даст ошибку при старте.
| Minecraft | Java | Пакет |
|---|---|---|
| 1.20.4 – 1.21+ | Java 21 | openjdk-21-jre-headless |
| 1.20.0 – 1.20.3 | Java 17+ | openjdk-17-jre-headless |
| 1.17 – 1.19 | Java 17 | openjdk-17-jre-headless |
| 1.12 – 1.16 | Java 11 | openjdk-11-jre-headless |
apt update && apt install -y openjdk-21-jre-headless
# Проверяем версию
java -version
# openjdk version "21.0.x" 2024-...2. Выбор ядра и загрузка Paper
Vanilla
Официальное ядро Mojang. Медленнее всех, нет плагинов. Только если нужна точная механика.
Paper ✓
Оптимизированный форк Spigot. Быстрее, поддерживает плагины Bukkit/Spigot. Рекомендуется для большинства серверов.
Spigot
Предшественник Paper. Поддерживает Bukkit-плагины, но Paper быстрее и лучше поддерживается.
Fabric / Forge
Для модов. Fabric — лёгкий и быстрый, Forge — больше модов. Несовместимы с Bukkit-плагинами.
Создаём пользователя и директорию, скачиваем Paper:
useradd -r -m -s /bin/bash minecraft
mkdir -p /opt/minecraft
chown minecraft:minecraft /opt/minecraftsu - minecraft
cd /opt/minecraft
# Актуальную ссылку смотрите на papermc.io/downloads
# Пример для MC 1.21.4, билд 100:
wget -O server.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.4/builds/100/downloads/paper-1.21.4-100.jar"
# Проверяем что файл скачался нормально
ls -lh server.jar3. Первый запуск и принятие EULA
При первом запуске сервер создаёт файлы конфигурации и остановится, требуя принять лицензионное соглашение Mojang:
cd /opt/minecraft
java -Xmx1G -jar server.jar nogui
# Сервер завершится с ошибкой: "You need to agree to the EULA"sed -i 's/eula=false/eula=true/' eula.txt
cat eula.txt
# eula=true — готовоПосле принятия EULA сервер сгенерирует server.properties, папки world/, logs/ и конфиги Paper.
4. Настройка server.properties
Ключевые параметры — два из них напрямую влияют на TPS и нагрузку CPU:
nano /opt/minecraft/server.propertiesmax-players=20Максимум игроков. Ставьте реалистично — по таблице выше.
view-distance=10Радиус отрисовки чанков вокруг игрока. Каждый +2 значительно нагружает CPU. Для 10+ игроков ставьте 8–10.
simulation-distance=8⚡ Главный параметр нагрузки. Радиус активной симуляции мира (мобы, редстоун). Чем меньше — тем выше TPS. Рекомендуется 6–8.
online-mode=truetrue = только лицензионные аккаунты. false = открыт для пиратских клиентов (небезопасно для публичных серверов).
motd=Мой серверОписание сервера в списке мультиплеера.
difficulty=normalpeaceful / easy / normal / hard.
white-list=falsetrue = только игроки из whitelist.json могут зайти. Рекомендуется для приватных серверов.
5. Aikar's JVM-флаги — главный секрет
Большинство гайдов используют только -Xmx и -Xms. Это минимум. Aikar's flags — набор JVM-параметров, разработанный администраторами крупных Minecraft-серверов, который снижает паузы garbage collector в 3–5 раз. Стандарт в production с 2018 года.
#!/bin/bash
# /opt/minecraft/start.sh
java \
-Xmx4G \
-Xms4G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-jar server.jar noguiЧто делают ключевые флаги
-XX:+UseG1GC— сборщик мусора G1, оптимален для heap > 2 ГБ-Xmx4G -Xms4G— одинаковые значения, чтобы JVM не тратила время на рост heap-XX:MaxGCPauseMillis=200— целевая пауза GC, снижает фризы-XX:+AlwaysPreTouch— выделяет всю память при старте, убирает задержки в игре-XX:+DisableExplicitGC— запрещает плагинам принудительно вызывать GC
chmod +x /opt/minecraft/start.sh6. Автозапуск через systemd
Screen — не решение для продакшна: при перезагрузке VPS сервер не стартует. Systemd автоматически запустит сервер при загрузке и перезапустит его при крашах.
[Unit]
Description=Minecraft Server (Paper)
After=network.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/opt/minecraft/start.sh
ExecStop=/bin/kill -SIGTERM $MAINPID
# Автоперезапуск при краше (не при штатной остановке)
Restart=on-failure
RestartSec=10s
# Логи
StandardOutput=append:/opt/minecraft/logs/server.log
StandardError=append:/opt/minecraft/logs/server.log
# Ограничения безопасности
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable minecraft
systemctl start minecraft
# Проверяем статус
systemctl status minecraft
# Смотрим логи в реальном времени
journalctl -u minecraft -fУправление сервером
systemctl start minecraft — запуск
systemctl stop minecraft — корректная остановка
systemctl restart minecraft — перезапуск
journalctl -u minecraft -n 50 — последние 50 строк лога
7. Файрволл и порты
# Стандартный порт Java Edition
ufw allow 25565/tcp
# Если используете Bedrock Edition (кроссплатформа)
ufw allow 19132/udp
ufw status
# 25565/tcp ALLOW AnywhereЕсли вы изменили server-port в server.properties — откройте именно тот порт. Порт RCON (25575) открывать наружу не нужно — он используется только локально.
8. Whitelist и безопасность
Для приватного сервера с друзьями whitelist обязателен — иначе любой знающий IP сможет подключиться.
# Установите в server.properties:
white-list=true# Способ 1: команда в консоли Paper
/whitelist add ИмяИгрока
# Способ 2: редактируем whitelist.json вручную
nano /opt/minecraft/whitelist.json[
{
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "ИмяИгрока"
}
]UUID игрока можно найти на namemc.com. После изменения файла применяем без перезапуска:
/whitelist reload9. Автоматические бэкапы
Мир Minecraft — ценные данные. Скрипт делает ежедневный архив с ротацией 7 дней:
#!/bin/bash
WORLD_DIR="/opt/minecraft/world"
BACKUP_DIR="/opt/minecraft/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
KEEP_DAYS=7
mkdir -p "$BACKUP_DIR"
# Архивируем мир
tar -czf "$BACKUP_DIR/world_$DATE.tar.gz" -C /opt/minecraft world
# Удаляем бэкапы старше 7 дней
find "$BACKUP_DIR" -name "world_*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "Backup completed: world_$DATE.tar.gz"chmod +x /opt/minecraft/backup.sh
# Добавляем в cron пользователя minecraft
crontab -u minecraft -e
# Добавьте строку — бэкап каждый день в 4:00
0 4 * * * /opt/minecraft/backup.sh >> /opt/minecraft/logs/backup.log 2>&1ls -lh /opt/minecraft/backups/
# world_2026-02-25_04-00.tar.gz 85M10. Мониторинг TPS и ресурсов
TPS — главный показатель здоровья сервера
Нормальный TPS — 20. Проверяйте через RCON или напрямую в консоли Paper:
apt install -y mcrcon
# Подключаемся к консоли сервера
mcrcon -H 127.0.0.1 -P 25575 -p ВАШ_RCON_ПАРОЛЬ
# В консоли Paper: проверка TPS
tps
# TPS from last 1m, 5m, 15m: 19.98, 19.95, 19.91 ← отлично| TPS | Статус | Что делать |
|---|---|---|
| 18–20 | ✅ Отлично | Всё хорошо |
| 15–18 | ⚠️ Норм | Снизить simulation-distance |
| 10–15 | ⚠️ Плохо | Уменьшить view-distance, проверить плагины |
| < 10 | ❌ Критично | Нехватка RAM/CPU, нужен апгрейд VPS |
Ресурсы сервера
# Интерактивный мониторинг
htop
# Сколько RAM использует Java-процесс
ps aux | grep java | awk '{print $6/1024 " MB"}'
# Свободное место на диске (мир растёт постоянно)
df -h /opt/minecraft
du -sh /opt/minecraft/world