Как создать Minecraft сервер с нуля

Как создать Minecraft сервер с нуля

У вас есть компьютер, интернет и желание поиграть с друзьями. Или может быть амбиции побольше - хотите запустить публичный сервер. Неважно, с чего вы начинаете. Эта инструкция проведёт вас от нуля до работающего сервера, на который можно зайти и играть.

Никакой воды. Конкретные команды, конкретные файлы, конкретные настройки.

Что нужно перед началом

Минимальные требования для сервера на 5-10 игроков:

  • CPU: 2 ядра, 3+ GHz (Minecraft однопоточный, ему важна частота)
  • RAM: 4 ГБ свободной оперативной памяти (2 ГБ под сервер + система)
  • Диск: 2-5 ГБ свободного места (SSD крайне желателен)
  • Сеть: стабильное соединение, желательно проводное

Если планируете больше игроков - читайте сколько оперативной памяти нужно Minecraft серверу. Если думаете арендовать хостинг вместо своего железа - есть отдельный разбор как выбрать хостинг.

Сервер можно поднять на Windows, Linux или macOS. Команды в этой статье даны для Linux, но для Windows всё аналогично - просто замените терминальные команды на их эквиваленты.

Домашний компьютер или VPS?

Для начала сойдёт домашний компьютер. Он бесплатный, вы имеете физический доступ, и для 3-5 друзей этого хватит. Но у него есть минусы: сервер выключается, когда вы выключаете компьютер. У большинства домашних провайдеров серый IP - подключиться извне не получится без дополнительных манипуляций. И скорость загрузки (upload) обычно невелика.

VPS за 5-10 долларов в месяц решает все эти проблемы. Сервер работает 24/7, у него белый IP, стабильный канал. Для сервера на 10-20 игроков VPS с 4 ГБ RAM и 2 vCPU - минимум. Если интересуют подробности - статья про выбор хостинга.

Шаг 1. Установка Java

Minecraft сервер работает на Java. Какая версия нужна - зависит от версии Minecraft:

MinecraftJava
1.17 и нижеJava 8 или 16
1.18 - 1.20.4Java 17
1.20.5+Java 21

Для актуальных версий (1.21.x) ставьте Java 21. Рекомендую использовать Adoptium (Eclipse Temurin) - это бесплатная, проверенная сборка OpenJDK. Не используйте Oracle JDK - он требует коммерческую лицензию для серверов.

Linux (Ubuntu/Debian):

sudo apt update
sudo apt install temurin-21-jdk

Если пакета нет в репозиториях, добавьте репозиторий Adoptium:

sudo apt install wget apt-transport-https
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo apt-key add -
echo "deb https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install temurin-21-jdk

Windows:

Скачайте установщик с adoptium.net, запустите, нажмите Next несколько раз. Убедитесь, что отмечена галка "Set JAVA_HOME variable".

Проверка установки:

java -version

Должно вывести что-то вроде:

openjdk version "21.0.2" 2024-01-16 LTS
OpenJDK Runtime Environment Temurin-21.0.2+13 (build 21.0.2+13-LTS)

Если видите ошибку "java: command not found" - Java не установлена или не добавлена в PATH. На Windows перезагрузите терминал после установки. На Linux убедитесь, что пакет реально установился через dpkg -l | grep temurin.

Шаг 2. Выбор серверного ядра

Есть несколько вариантов, и разница между ними существенная:

Vanilla - официальный сервер от Mojang. Без плагинов, без модификаций. Подходит, если хотите чистый ванильный опыт и не планируете ставить плагины. Скачивается с minecraft.net.

Paper - форк Spigot с кучей оптимизаций и исправлений багов. Поддерживает плагины Bukkit/Spigot. Для 90% серверов это лучший выбор. Paper патчит десятки эксплойтов и дюпов, которые есть в ванилле, и работает ощутимо быстрее за счёт оптимизации загрузки чанков, тикинга сущностей и работы с редстоуном.

Purpur - форк Paper с дополнительными настройками. Больше конфигурации, больше контроля. Позволяет менять вещи, которые в Paper захардкожены - например, скорость полёта элитрами или дальность атаки мобов. Для продвинутых.

Fabric - для модов. Если хотите моды (не плагины), вам сюда. Fabric легковеснее Forge и быстрее обновляется до новых версий Minecraft.

Forge - тоже для модов, но более старая и тяжёлая экосистема. Больше модов доступно, но производительность хуже.

Я рекомендую Paper. Он быстрее ванильного сервера, исправляет дюпы и эксплойты, и поддерживает тысячи плагинов. Переход с Paper на Purpur потом делается за 5 минут - просто замените jar-файл.

Скачивание Paper

Идём на papermc.io/downloads, выбираем нужную версию Minecraft, качаем jar-файл.

Или через терминал:

mkdir ~/minecraft-server
cd ~/minecraft-server
wget https://api.papermc.io/v2/projects/paper/versions/1.21.4/builds/1/downloads/paper-1.21.4-1.jar -O server.jar

Номер билда может отличаться - проверьте актуальный на сайте Paper. Всегда берите последний билд для вашей версии.

Скачивание Vanilla

Если хотите ванильный сервер:

mkdir ~/minecraft-server
cd ~/minecraft-server
wget https://piston-data.mojang.com/v2/objects/HASH/server.jar

Актуальную ссылку берите с minecraft.net/download/server. На странице будет прямая ссылка на jar-файл последней версии.

Шаг 3. Первый запуск и EULA

Создайте отдельную папку для сервера (если ещё не создали). Важно: не кладите сервер в системную директорию и не запускайте от root. Создайте отдельного пользователя:

sudo useradd -m -s /bin/bash minecraft
sudo su - minecraft
mkdir ~/server
cd ~/server
# Скопируйте server.jar сюда

Запускаем:

java -Xmx2G -Xms2G -jar server.jar --nogui

Параметры:

  • -Xmx2G - максимум 2 ГБ оперативной памяти
  • -Xms2G - стартовый размер памяти (ставьте равным Xmx)
  • --nogui - без графического интерфейса (экономит ресурсы)

Сервер запустится и тут же остановится с сообщением:

You need to agree to the EULA in order to run the server.

Это нормально. Откройте файл eula.txt, который появился в папке:

nano eula.txt

Замените eula=false на:

eula=true

Сохраните и закройте (Ctrl+O, Enter, Ctrl+X в nano). Этим вы соглашаетесь с лицензионным соглашением Mojang. EULA запрещает продавать игровые преимущества за реальные деньги (pay-to-win), но разрешает косметические донаты.

Шаг 4. Настройка server.properties

После первого запуска в папке появится файл server.properties. Это главный конфигурационный файл сервера. Откройте его:

nano ~/server/server.properties

Ключевые параметры:

# Порт сервера. 25565 - стандартный, менять не нужно если нет причин
server-port=25565

# Максимальное количество игроков
max-players=20

# Дальность прорисовки (в чанках). Чем больше - тем больше нагрузка
view-distance=10

# Дальность симуляции. Мобы и механизмы работают только в этом радиусе
simulation-distance=8

# Сложность: peaceful, easy, normal, hard
difficulty=normal

# Режим игры: survival, creative, adventure, spectator
gamemode=survival

# MOTD - сообщение в списке серверов. Поддерживает цветовые коды через символ параграфа
motd=My Minecraft Server

# Белый список. Если true - зайти смогут только одобренные игроки
white-list=false

# Онлайн-мод. Если false - могут заходить пиратки
online-mode=true

# Радиус защиты спавна (в блоках). 0 = отключено
spawn-protection=0

# Включить командные блоки
enable-command-block=true

# Уровень сжатия пакетов. 256 - хороший баланс
network-compression-threshold=256

# Разрешить полёт (нужно для некоторых плагинов и элитр)
allow-flight=true

# Максимальный размер мира в блоках (радиус). -1 = без ограничений
max-world-size=29999984

# PvP включено/выключено
pvp=true

Несколько важных моментов:

  • online-mode=true рекомендуется для безопасности. При false кто угодно может зайти под любым ником, включая ников администраторов. Если вам нужна поддержка пираток - используйте прокси (Velocity) с AuthMe.
  • view-distance сильно влияет на производительность. Каждый прибавленный чанк - это квадратичный рост нагрузки. view-distance=10 генерирует 441 чанк на игрока, а view-distance=16 - уже 1089. Начните с 10 и снижайте до 8 или 6, если лагает.
  • simulation-distance можно поставить ниже view-distance. Игроки будут видеть далёкие чанки, но мобы там не будут спавниться. Это экономит много ресурсов.
  • allow-flight=true - Paper сам обрабатывает античит, а при false игроков с элитрами будет кикать.

Если сервер будет публичным, обязательно прочитайте про настройки безопасности Paper и Spigot.

Шаг 5. Полноценный запуск

Теперь запускаем сервер по-настоящему:

cd ~/server
java -Xmx2G -Xms2G -jar server.jar --nogui

Для продакшена создайте скрипт запуска start.sh:

#!/bin/bash
cd /home/minecraft/server
java -Xmx4G -Xms4G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -jar server.jar --nogui

Эти JVM-флаги (Aikar flags) - стандарт индустрии для Minecraft серверов. Они оптимизируют сборку мусора G1GC: уменьшают паузы, предотвращают фризы и эффективнее используют память. Подробнее про оптимизацию - в разделе ниже.

Сделайте скрипт исполняемым:

chmod +x start.sh
./start.sh

Дождитесь строки Done (X.XXXs)! For help, type "help". Сервер запущен. Проверьте TPS командой tps в консоли - должно быть 20.0.

Запуск в screen (чтобы работал после закрытия терминала)

Если вы подключены по SSH, сервер умрёт когда вы закроете терминал. Решение - screen или tmux:

sudo apt install screen
screen -S minecraft
./start.sh

Чтобы отключиться от сессии: Ctrl+A, затем D. Чтобы вернуться: screen -r minecraft.

Tmux - более современная альтернатива:

sudo apt install tmux
tmux new -s minecraft
./start.sh

Отключиться: Ctrl+B, затем D. Вернуться: tmux attach -t minecraft.

Для продакшена лучше создать systemd-сервис - об этом ниже.

Шаг 6. Проброс портов

Если сервер запущен дома и вы хотите, чтобы друзья могли подключиться из интернета - нужно пробросить порт 25565 на роутере.

  1. Узнайте локальный IP вашего компьютера: ip addr show (Linux) или ipconfig (Windows). Обычно это что-то вроде 192.168.1.XX.
  2. Зайдите в настройки роутера (обычно 192.168.1.1 или 192.168.0.1 в браузере). Логин/пароль часто admin/admin или написан на наклейке роутера.
  3. Найдите раздел "Port Forwarding" / "NAT" / "Виртуальные серверы". В разных роутерах называется по-разному.
  4. Создайте правило: внешний порт 25565 (TCP) -> внутренний IP вашего компьютера, порт 25565.
  5. Сохраните.

Узнайте ваш внешний IP (гуглите "my ip") и дайте друзьям адрес: ваш_внешний_ip:25565.

Важные нюансы:

  • Если у вас серый IP (начинается на 10.x.x.x или 100.64-127.x.x.x) - проброс портов не поможет. Вы находитесь за CGNAT провайдера. Варианты: попросить у провайдера белый IP (иногда бесплатно, иногда за доплату), арендовать VPS, или использовать туннели типа playit.gg.
  • Внешний IP может меняться при перезагрузке роутера (динамический IP). Решение - сервисы DDNS (no-ip.com, duckdns.org), которые привязывают доменное имя к вашему IP.
  • Открытый порт - это потенциальная дыра в безопасности. Не пробрасывайте больше портов, чем нужно.

Если сервер на VPS или dedicated - проброс не нужен, порт уже доступен извне. Но убедитесь, что файрвол не блокирует порт 25565:

sudo ufw allow 25565/tcp

Подробнее про файрвол и сетевую безопасность - в статье настройка iptables для Minecraft.

Шаг 7. Подключение к серверу

Запустите Minecraft, нажмите "Multiplayer" -> "Add Server".

  • Если вы на том же компьютере: адрес localhost
  • Если в локальной сети: 192.168.1.XX (IP компьютера с сервером)
  • Если из интернета: ваш внешний IP

Порт указывать не нужно, если он стандартный (25565). Если вы сменили порт - добавьте через двоеточие: ip:порт.

Версия клиента должна совпадать с версией сервера. Если сервер на 1.21.4 - клиент тоже должен быть 1.21.4. Для Paper существует плагин ViaVersion, который позволяет подключаться с разных версий, но это отдельная история.

Шаг 8. Установка плагинов (Paper)

Если вы выбрали Paper, у вас есть доступ к тысячам плагинов. Несколько must-have для любого сервера:

EssentialsX - базовые команды (/home, /spawn, /tpa, /warp), экономика, киты. Без него тяжело. Это основа, на которую опираются многие другие плагины.

LuckPerms - управление правами и группами. Кто может что делать. Необходимость для любого сервера, где больше одного игрока. Веб-интерфейс для настройки - отдельная красота.

WorldGuard + WorldEdit - защита регионов от гриферов и инструменты для строительства. WorldGuard позволяет запретить PvP, взрывы, поджоги в определённых зонах. WorldEdit - копирование, вставка, замена блоков в промышленных масштабах.

CoreProtect - логирование всех действий. Кто сломал блок, кто открыл сундук, кто убил моба. Незаменимо при расследовании гриферства. Команда /co inspect - ваш лучший друг.

Spark - профилирование производительности. Показывает, что именно тормозит ваш сервер. Генерирует отчёты, которые можно открыть в браузере и проанализировать.

Установка плагина:

  1. Скачайте .jar файл плагина (с hangar.papermc.io, modrinth.com или spigotmc.org)
  2. Положите в папку plugins/
  3. Перезапустите сервер
cp EssentialsX.jar ~/server/plugins/
cp LuckPerms.jar ~/server/plugins/

После перезапуска плагины создадут свои конфиги в plugins/ИмяПлагина/. Настраивайте под себя.

Важно: не ставьте 50 плагинов сразу. Начните с 3-5 базовых, убедитесь что всё работает, потом добавляйте по одному. Так проще найти проблемный плагин, если что-то сломается.

Скачивайте плагины только с официальных площадок. Левые сайты с "бесплатными премиум плагинами" - это почти гарантированно малварь, которая даст злоумышленнику доступ к вашему серверу.

Больше про плагины безопасности - в обзоре лучших плагинов безопасности.

Шаг 9. Базовая оптимизация

JVM-флаги

Стандартные флаги Aikar - лучшая отправная точка для Paper серверов. Они уже были в скрипте запуска выше. Ключевые моменты:

  • -Xmx и -Xms ставьте одинаковыми. Это предотвращает постоянное расширение/сжатие кучи, что вызывает фризы.
  • Не выделяйте ВСЮ оперативную память. Системе тоже нужна RAM для файловых кешей, сетевых буферов, самой ОС. Если у вас 8 ГБ - выделяйте 4-6, не больше.
  • G1GC - сборщик мусора по умолчанию для Minecraft. Не меняйте на ZGC или Shenandoah без понимания, зачем. G1GC с флагами Aikar оттестирован на тысячах серверов.
  • Больше RAM - не всегда лучше. 4 ГБ для сервера на 20 игроков хватит. 8 ГБ для 50+. 12 ГБ и более имеет смысл только для крупных серверов с кучей плагинов и несколькими мирами.

Конфиги Paper

Paper создаёт дополнительные конфиги в config/:

config/paper-global.yml:

chunk-system:
  gen-parallelism: default
  io-threads: default
packet-limiter:
  all-packets:
    max-packet-rate: 500.0

config/paper-world-defaults.yml:

chunks:
  auto-save-interval: 6000
  max-auto-save-chunks-per-tick: 8
spawn:
  keep-spawn-loaded: true
  keep-spawn-loaded-range: 8
environment:
  optimize-explosions: true

server.properties - настройки производительности

view-distance=8
simulation-distance=6
max-tick-time=60000

Снижение view-distance и simulation-distance - самый простой способ уменьшить нагрузку. Начните с 10/8 и снижайте, если TPS падает ниже 19.

Мониторинг TPS

TPS (Ticks Per Second) - главный показатель здоровья сервера. Норма - 20.0. Если TPS 19+ - всё хорошо. 15-18 - заметные лаги. Ниже 15 - сервер серьёзно тормозит.

Проверить TPS: /tps в консоли или в игре. Paper показывает TPS за последние 1, 5 и 15 минут.

Если TPS падает - используйте Spark (/spark profiler) чтобы найти причину. Часто это один плохо написанный плагин или слишком большое количество сущностей в одном месте.

Подробная статья по оптимизации: оптимизация и защита от DDoS. Про причины лагов и их решения - почему лагает Minecraft сервер.

Шаг 10. Запуск как systemd-сервис

Для продакшена сервер должен запускаться автоматически при загрузке системы и перезапускаться при крашах. Screen и tmux для этого не подходят - они не переживают перезагрузку машины.

Создайте файл /etc/systemd/system/minecraft.service:

[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xmx4G -Xms4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -jar server.jar --nogui
Restart=on-failure
RestartSec=10
StandardInput=null
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Активируйте:

sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft

Проверить статус: sudo systemctl status minecraft

Посмотреть логи: sudo journalctl -u minecraft -f

Остановить сервер: sudo systemctl stop minecraft

Недостаток systemd - нет интерактивной консоли. Для отправки команд серверу можно использовать RCON (включается в server.properties через enable-rcon=true), или утилиту mcrcon.

Бэкапы

Не забывайте про бэкапы. Один гриферский плагин или битый мир - и вы теряете недели работы игроков. Минимальный вариант - cron-задача, которая копирует мир раз в час:

# Добавить в crontab -e
0 * * * * tar -czf /home/minecraft/backups/world-$(date +\%Y\%m\%d-\%H\%M).tar.gz /home/minecraft/server/world/

Не забудьте настроить ротацию - удаление старых бэкапов. Иначе диск заполнится за пару недель:

# Удалять бэкапы старше 7 дней
0 6 * * * find /home/minecraft/backups/ -name "*.tar.gz" -mtime +7 -delete

Подробнее про стратегию бэкапов - в отдельной статье про бэкапы Minecraft серверов.

Защита сервера

Как только ваш сервер становится публичным, он становится мишенью. DDoS-атаки на Minecraft серверы - обычное дело. Кто-то проиграл в PvP, кто-то обиделся на бан, кто-то просто развлекается. Стрессеры стоят копейки, и порог входа для атакующего околонулевой.

Базовые шаги:

  1. Не светите реальный IP сервера без необходимости. Если вы его засветили - его уже не спрячешь.
  2. Настройте файрвол - откройте только нужные порты. SSH (22), Minecraft (25565), и больше ничего.
  3. Отключите query в server.properties (enable-query=false) если не используете мониторинг.
  4. Поставьте fail2ban для защиты SSH от брутфорса.
  5. Если сервер публичный с 20+ игроками - подумайте о DDoS-защите. MineGuard фильтрует атаки на уровне сети, не добавляя задержки для нормальных игроков.

Если хотите разобраться, как вообще работает DDoS-защита для игровых серверов - есть подробное объяснение. Про типы атак и разницу между TCP и UDP флудом - сравнение TCP и UDP атак.

Про проксирование через Velocity/BungeeCord для дополнительной защиты и сокрытия IP бэкенда читайте в статье про прокси-архитектуру.

Частые проблемы

"Can't connect to server" - проверьте: 1) сервер запущен, 2) порт пробросан, 3) файрвол не блокирует, 4) IP правильный. Попробуйте подключиться с localhost - если работает, проблема в сети, а не в сервере.

"Outdated server" - версия клиента не совпадает с версией сервера. Обновите сервер или клиент до одинаковой версии.

"Connection timed out" - обычно проблема с проброской портов или файрволом. Проверьте через telnet ваш_ip 25565 или онлайн-чекеры портов.

Низкий TPS - используйте команду /tps (Paper). Если TPS ниже 18 - снижайте view-distance, отключайте тяжёлые плагины, проверяйте через Spark что именно тормозит.

"Not enough RAM" / OutOfMemoryError - увеличьте -Xmx в скрипте запуска. Или уменьшите view-distance и количество загруженных миров.

Сервер крашится при запуске - читайте лог ошибки. Чаще всего это несовместимый плагин или неправильная версия Java. Удалите последний установленный плагин и попробуйте снова.

Что дальше

Сервер работает, друзья подключились, плагины стоят. Что теперь?

  • Настройте права через LuckPerms - создайте группы (default, vip, moderator, admin) с чёткими правами
  • Добавьте плагины под ваш режим игры (мини-игры, экономику, квесты)
  • Настройте регулярные бэкапы и проверьте, что они реально восстанавливаются
  • Добавьте мониторинг - хотя бы Spark для отслеживания производительности
  • Если сервер растёт - задумайтесь о выборе нормального хостинга вместо домашнего компьютера
  • Для крупного проекта с несколькими серверами - изучите Velocity и прокси-архитектуру
  • Прочитайте чек-лист безопасности сервера чтобы ничего не упустить

Создать Minecraft сервер несложно. Сложнее - поддерживать его в хорошем состоянии, с нормальной производительностью и защитой от атак. Но это уже другая история, и начинается она с того, что сервер уже запущен.


Sunucunuzu DDoS Saldırılarından Koruyun

5 dakikada kurulumla ücretsiz koruma. 1 TB bant genişliği dahil.

Ücretsiz Deneyin


İlgili Makaleler