- Home »

Как создать сервер Minecraft на Ubuntu 24
Подъём собственного сервера Minecraft — это то, что хочется сделать каждому разработчику или энтузиасту хотя бы раз в жизни. Особенно если есть команда друзей или коллег, которые готовы окунуться в виртуальный мир кубиков и креатива. Ubuntu 24 стал отличной базой для таких экспериментов: стабильная LTS-версия, актуальные пакеты Java, простая настройка и минимальные системные требования. В этой статье разберём весь процесс от выбора железа до автоматизации запуска и обслуживания сервера. Никаких лишних телодвижений — только практика и рабочие решения.
Как это работает: архитектура и принципы
Сервер Minecraft — это Java-приложение, которое обрабатывает подключения игроков, управляет игровым миром, обрабатывает события и синхронизирует данные между клиентами. Всё довольно просто: клиенты подключаются по TCP (порт 25565 по умолчанию), отправляют пакеты с действиями, а сервер их обрабатывает и рассылает обновления всем подключённым игрокам.
Основные компоненты:
- Server.jar — основной исполняемый файл сервера
- world/ — папка с игровым миром (сохранения, структуры, игроки)
- server.properties — конфигурационный файл с настройками
- whitelist.json — список разрешённых игроков
- logs/ — папка с логами сервера
Сервер работает в однопоточном режиме для основной логики игры, но использует дополнительные потоки для сетевых операций и обработки чанков. Это важно понимать при выборе железа — частота процессора важнее количества ядер.
Системные требования и выбор железа
Minecraft сервер довольно требователен к ресурсам, особенно к RAM и CPU. Вот практичная табличка с рекомендациями:
Количество игроков | RAM (минимум/рекомендуется) | CPU | Диск |
---|---|---|---|
1-5 | 1GB / 2GB | 2+ ГГц одноядерный | 2GB SSD |
5-10 | 2GB / 4GB | 2+ ГГц двухъядерный | 5GB SSD |
10-20 | 4GB / 8GB | 3+ ГГц четырёхъядерный | 10GB SSD |
20+ | 8GB+ | Выделенный сервер | 20GB+ NVMe |
Для тестирования и небольшого сервера подойдёт VPS, а для серьёзных проектов лучше брать выделенный сервер.
Пошаговая настройка сервера
Шаг 1: Подготовка системы
Первым делом обновляем систему и устанавливаем необходимые пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-21-jdk-headless wget screen htop nano -y
Проверяем версию Java:
java -version
Шаг 2: Создание пользователя для сервера
Не запускаем сервер от root — создаём отдельного пользователя:
sudo adduser minecraft
sudo usermod -aG sudo minecraft
sudo su - minecraft
Шаг 3: Скачивание и первый запуск
Создаём директорию для сервера и скачиваем последнюю версию:
mkdir ~/minecraft-server
cd ~/minecraft-server
wget https://piston-data.mojang.com/v1/objects/59353fb40c36d304f2035d51e7d6e6baa98dc05c/server.jar
Первый запуск для генерации конфигурационных файлов:
java -Xmx2G -Xms1G -jar server.jar nogui
Сервер завершится с ошибкой — это нормально. Нужно принять лицензионное соглашение:
nano eula.txt
Меняем eula=false
на eula=true
.
Шаг 4: Настройка server.properties
Основные параметры, которые стоит настроить:
nano server.properties
Ключевые настройки:
server-port=25565
max-players=20
motd=Мой крутой сервер
difficulty=normal
gamemode=survival
pvp=true
enable-command-block=true
spawn-protection=16
max-world-size=29999984
view-distance=10
simulation-distance=10
Шаг 5: Создание стартового скрипта
Создаём скрипт для запуска сервера:
nano start.sh
Содержимое скрипта:
#!/bin/bash
java -Xmx2G -Xms1G -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
Делаем скрипт исполняемым:
chmod +x start.sh
Автоматизация и управление сервером
Создание systemd сервиса
Для автоматического запуска при загрузке системы создаём systemd unit:
sudo nano /etc/systemd/system/minecraft.service
Содержимое файла:
[Unit]
Description=Minecraft Server
After=network.target
[Service]
Type=forking
User=minecraft
WorkingDirectory=/home/minecraft/minecraft-server
ExecStart=/usr/bin/screen -dmS minecraft /home/minecraft/minecraft-server/start.sh
ExecStop=/usr/bin/screen -S minecraft -X stuff "stop\n"
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Активируем сервис:
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft
Скрипт для управления сервером
Создаём удобный скрипт для управления:
nano ~/minecraft-control.sh
#!/bin/bash
SERVER_DIR="/home/minecraft/minecraft-server"
SCREEN_NAME="minecraft"
case "$1" in
start)
echo "Запуск сервера..."
cd $SERVER_DIR
screen -dmS $SCREEN_NAME ./start.sh
;;
stop)
echo "Остановка сервера..."
screen -S $SCREEN_NAME -X stuff "stop\n"
;;
restart)
echo "Перезапуск сервера..."
screen -S $SCREEN_NAME -X stuff "stop\n"
sleep 10
cd $SERVER_DIR
screen -dmS $SCREEN_NAME ./start.sh
;;
console)
screen -r $SCREEN_NAME
;;
backup)
echo "Создание бэкапа..."
tar -czf "backup-$(date +%Y%m%d-%H%M%S).tar.gz" world/
;;
*)
echo "Использование: $0 {start|stop|restart|console|backup}"
exit 1
;;
esac
Делаем исполняемым:
chmod +x ~/minecraft-control.sh
Безопасность и сетевые настройки
Настройка файрвола
Открываем необходимые порты:
sudo ufw allow 25565/tcp
sudo ufw allow ssh
sudo ufw enable
Настройка whitelist и op-права
Включаем whitelist в server.properties:
white-list=true
Добавляем игроков в whitelist:
screen -S minecraft -X stuff "whitelist add PlayerName\n"
screen -S minecraft -X stuff "op PlayerName\n"
Мониторинг и оптимизация
Мониторинг ресурсов
Простой скрипт для мониторинга:
nano ~/monitor.sh
#!/bin/bash
echo "=== Minecraft Server Monitor ==="
echo "CPU Usage:"
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
echo "Memory Usage:"
free -h | grep "Mem:"
echo "Disk Usage:"
df -h /home/minecraft/minecraft-server
echo "Active Players:"
if screen -list | grep -q "minecraft"; then
screen -S minecraft -X stuff "list\n"
sleep 1
tail -n 2 /home/minecraft/minecraft-server/logs/latest.log | grep "players online"
else
echo "Server is not running"
fi
Автоматические бэкапы
Создаём скрипт для автоматического бэкапа:
nano ~/backup.sh
#!/bin/bash
BACKUP_DIR="/home/minecraft/backups"
WORLD_DIR="/home/minecraft/minecraft-server/world"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Отключаем автосохранение
screen -S minecraft -X stuff "save-off\n"
screen -S minecraft -X stuff "save-all\n"
sleep 5
# Создаём бэкап
tar -czf "$BACKUP_DIR/world_backup_$TIMESTAMP.tar.gz" -C "/home/minecraft/minecraft-server" world/
# Включаем автосохранение
screen -S minecraft -X stuff "save-on\n"
# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -name "world_backup_*.tar.gz" -mtime +7 -delete
echo "Backup created: world_backup_$TIMESTAMP.tar.gz"
Добавляем в crontab:
crontab -e
0 */6 * * * /home/minecraft/backup.sh
Альтернативные серверы и дистрибутивы
Ванильный сервер — не единственный вариант. Вот сравнение популярных решений:
Сервер | Особенности | Производительность | Плагины |
---|---|---|---|
Vanilla | Официальный, стабильный | Базовая | Нет |
Paper | Оптимизированный, много настроек | Высокая | Bukkit/Spigot |
Fabric | Модульный, быстрые обновления | Высокая | Fabric моды |
Forge | Много модов, сложная настройка | Средняя | Forge моды |
Установка Paper сервера
Paper — отличная альтернатива для продакшена:
cd ~/minecraft-server
wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/497/downloads/paper-1.20.4-497.jar
mv paper-1.20.4-497.jar paper.jar
Меняем в start.sh:
java -Xmx2G -Xms1G -jar paper.jar nogui
Интеграция с другими инструментами
Интеграция с Discord
Можно настроить бота для уведомлений о статусе сервера:
pip3 install discord.py mcstatus
Веб-панель управления
Pterodactyl Panel — удобное решение для управления игровыми серверами через веб-интерфейс. Позволяет создавать пользователей, управлять файлами, смотреть логи и контролировать ресурсы.
Интеграция с Prometheus
Для мониторинга можно использовать minecraft-exporter:
docker run -d -p 9150:9150 --name minecraft-exporter \
-e MINECRAFT_SERVER_HOST=localhost \
-e MINECRAFT_SERVER_PORT=25565 \
itzg/minecraft-exporter
Производительность и оптимизация
JVM флаги для оптимизации
Для серверов с большим количеством игроков рекомендую эти флаги:
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
Настройки server.properties для производительности
view-distance=8
simulation-distance=6
entity-activation-range=32
max-tick-time=60000
network-compression-threshold=256
Troubleshooting: частые проблемы и решения
Проблемы с памятью
Проблема: OutOfMemoryError
Решение: Увеличить выделенную память или оптимизировать настройки сервера.
Проблемы с подключением
Проблема: Can’t connect to server
Решение: Проверить файрвол, порты, и настройки server.properties.
sudo netstat -tlnp | grep :25565
sudo ufw status
Проблемы с производительностью
Проблема: Лаги и фризы
Решение: Оптимизировать JVM флаги, уменьшить view-distance, использовать Paper.
Автоматизация через скрипты
Скрипт для автоматического обновления
#!/bin/bash
SERVER_DIR="/home/minecraft/minecraft-server"
BACKUP_DIR="/home/minecraft/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Создаём бэкап
echo "Creating backup..."
cd $SERVER_DIR
tar -czf "$BACKUP_DIR/pre_update_backup_$TIMESTAMP.tar.gz" .
# Останавливаем сервер
echo "Stopping server..."
screen -S minecraft -X stuff "stop\n"
sleep 10
# Скачиваем новую версию
echo "Downloading new version..."
wget -O server.jar.new https://piston-data.mojang.com/v1/objects/59353fb40c36d304f2035d51e7d6e6baa98dc05c/server.jar
# Заменяем старую версию
mv server.jar server.jar.old
mv server.jar.new server.jar
# Запускаем сервер
echo "Starting server..."
screen -dmS minecraft ./start.sh
echo "Update completed!"
Интересные факты и нестандартные применения
Minecraft сервер можно использовать не только для игры:
- Образование: Создание интерактивных уроков истории, математики, программирования
- Архитектура: Проектирование зданий и городов в масштабе
- Тестирование: Создание стресс-тестов для серверной инфраструктуры
- Визуализация данных: Представление сложных данных в 3D-формате
Например, можно создать скрипт, который читает данные из базы данных и строит графики прямо в игровом мире:
#!/bin/bash
# Скрипт для создания статистики игроков
echo "tellraw @a [{\"text\":\"Онлайн игроков: \",\"color\":\"green\"},{\"text\":\"$(screen -S minecraft -X stuff 'list\n' && sleep 1 && tail -n 1 logs/latest.log | grep -o '[0-9]\+' | head -1)\",\"color\":\"yellow\"}]" | screen -S minecraft -X stuff
Статистика и мониторинг
Для серьёзного мониторинга можно использовать ELK Stack или Grafana. Minecraft генерирует достаточно логов для анализа:
- Время входа/выхода игроков
- Использование ресурсов сервера
- Частота событий в игре
- Производительность различных регионов мира
Простой скрипт для сбора базовой статистики:
#!/bin/bash
LOG_FILE="/home/minecraft/minecraft-server/logs/latest.log"
STATS_FILE="/home/minecraft/server_stats.json"
JOINS=$(grep -c "joined the game" $LOG_FILE)
LEAVES=$(grep -c "left the game" $LOG_FILE)
CURRENT_PLAYERS=$(screen -S minecraft -X stuff "list\n" && sleep 1 && tail -n 1 $LOG_FILE | grep -o '[0-9]\+' | head -1)
echo "{\"timestamp\":\"$(date -Iseconds)\",\"joins\":$JOINS,\"leaves\":$LEAVES,\"current_players\":$CURRENT_PLAYERS}" >> $STATS_FILE
Выводы и рекомендации
Создание собственного Minecraft сервера на Ubuntu 24 — отличный способ получить полный контроль над игровым процессом и изучить принципы работы серверных приложений. Основные рекомендации:
- Для экспериментов: Начинайте с VPS с 2-4 ГБ RAM
- Для продакшена: Используйте выделенный сервер с быстрым SSD
- Безопасность: Всегда используйте whitelist и файрвол
- Мониторинг: Настройте автоматические бэкапы и мониторинг ресурсов
- Производительность: Рассмотрите Paper вместо ванильного сервера
Автоматизация управления сервером через скрипты и systemd сервисы существенно упрощает администрирование и позволяет сосредоточиться на игровом процессе, а не на технических проблемах. Грамотно настроенный сервер может работать месяцами без вмешательства администратора.
Помните: Minecraft сервер — это не только развлечение, но и отличная платформа для изучения системного администрирования, сетевых технологий и автоматизации. Экспериментируйте, изучайте логи, оптимизируйте производительность — и получайте удовольствие от процесса!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.