Как перенести сервер на новую версию Minecraft

Подготовка и резервное копирование

  1. Авторизуйтесь в панели proxify.cloud
    Зайдите в личный кабинет, перейдите в раздел «Мои услуги» → «Выделенные серверы» и откройте консоль управления (Proxmox VE). Выберите нужную ноду (VM/CT) с Ubuntu.

  2. Подключитесь по SSH к серверу
    Используйте терминал (Linux/macOS) или PowerShell/WSL (Windows):

    ssh root@<IP_АДРЕС_СЕРВЕРА>
    

    Если используется ключ:

    ssh -i ~/.ssh/id_rsa root@<IP_АДРЕС_СЕРВЕРА>
    
  3. Остановите игровой сервер
    Предполагаем, что сервер запущен через systemd (юнит minecraft.service) или внутри screen/tmux.
    Вариант А (systemd):

    systemctl stop minecraft
    

    Вариант Б (screen):

    screen -S mc -X stuff "stop\n"
    sleep 10
    

    Убедитесь, что процесс java завершён:

    pgrep -f "paper|spigot|purpur|fabric|forge" || echo "Процессов нет"
    
  4. Создайте полный бэкап директории сервера
    Стандартный путь: /opt/minecraft или /home/minecraft/server. Подставьте свой.

    BACKUP_DIR="/root/backups/mc_$(date +%F_%H-%M)"
    mkdir -p "$BACKUP_DIR"
    rsync -aHAX --info=progress2 /opt/minecraft/ "$BACKUP_DIR/"
    

    Проверьте размер и целостность:

    du -sh "$BACKUP_DIR"
    ls -la "$BACKUP_DIR/"
    
  5. Сделайте дамп базы данных (если используется MySQL/MariaDB/PostgreSQL)
    Пример для MariaDB:

    mysqldump -u root -p minecraft_db > "$BACKUP_DIR/minecraft_db.sql"
    

    Для PostgreSQL:

    pg_dump -U postgres minecraft_db > "$BACKUP_DIR/minecraft_db.sql"
    

Обновление системного окружения

  1. Обновите пакеты Ubuntu и Java
    Новые версии Minecraft (1.18+) требуют Java 17, 1.20.5+ — Java 21.

    apt update && apt upgrade -y
    apt install -y openjdk-21-jre-headless
    

    Проверьте версию:

    java -version
    # Ожидаемый вывод: openjdk version "21.x.x"
    
  2. Настройте альтернативы Java (если несколько версий)

    update-alternatives --config java
    

    Выберите строку с java-21-openjdk.

Получение новой версии серверного ядра

  1. Определите тип ядра и скачайте актуальную сборку
    Перейдите в рабочую директорию:

    cd /opt/minecraft
    

    Paper (рекомендуется для Spigot/Paper плагинов):

    VERSION="1.21.1"
    BUILD=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$VERSION" | jq -r '.builds[-1]')
    JAR_NAME="paper-${VERSION}-${BUILD}.jar"
    curl -o "$JAR_NAME" "https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds/$BUILD/downloads/$JAR_NAME"
    

    Purpur (оптимизированный форк Paper):

    VERSION="1.21.1"
    BUILD=$(curl -s "https://api.purpurmc.org/v2/purpur/$VERSION" | jq -r '.[-1]')
    JAR_NAME="purpur-${VERSION}-${BUILD}.jar"
    curl -o "$JAR_NAME" "https://api.purpurmc.org/v2/purpur/$VERSION/$BUILD/download"
    

    Fabric (для модов):

    MC_VERSION="1.21.1"
    LOADER_VERSION=$(curl -s "https://meta.fabricmc.net/v2/versions/loader/$MC_VERSION" | jq -r '.[0].loader.version')
    INSTALLER_VERSION=$(curl -s "https://meta.fabricmc.net/v2/versions/installer" | jq -r '.[0].version')
    curl -o fabric-installer.jar "https://maven.fabricmc.net/net/fabricmc/fabric-installer/$INSTALLER_VERSION/fabric-installer-$INSTALLER_VERSION.jar"
    java -jar fabric-installer.jar server -mcversion "$MC_VERSION" -loader "$LOADER_VERSION" -downloadMinecraft
    # Получится fabric-server-mc.{version}-loader.{version}-launcher.{version}.jar
    

    Forge (для модов):

    # Скачайте установщик с files.minecraftforge.net для нужной версии
    # Пример для 1.20.1:
    curl -o forge-installer.jar "https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.1-47.2.0/forge-1.20.1-47.2.0-installer.jar"
    java -jar forge-installer.jar --installServer
    # Запустите один раз для генерации библиотек, затем удалите installer
    
  2. Обновите симлинк/скрипт запуска на новый JAR
    Если используете systemd, отредактируйте юнит:

    nano /etc/systemd/system/minecraft.service
    

    Найдите строку ExecStart и замените имя jar-файла:

    ExecStart=/usr/bin/java -Xms4G -Xmx4G -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper-1.21.1-123.jar nogui
    

    Перезагрузите конфигурацию systemd:

    systemctl daemon-reload
    

    Если запуск через скрипт start.sh:

    sed -i 's/paper-.*\.jar/paper-1.21.1-123.jar/' start.sh
    chmod +x start.sh
    

Миграция конфигураций и данных

  1. Обновите server.properties под новую версию
    Сравните свой файл с дефолтным для новой версии (можно сгенерировать временно новый jar'ом в пустой папке). Ключевые параметры, которые часто меняются:

    # Пример для 1.21+
    network-compression-threshold=256
    use-native-transport=true
    region-file-compression=zstd
    enforce-secure-profile=true
    

    Сохраните свои уникальные настройки (motd, max-players, level-name, pvp, difficulty и т.д.).

  2. Проверьте и обновите spigot.yml, paper-global.yml, bukkit.yml, purpur.yml
    Paper/Purpur часто добавляют новые секции. Лучшая стратегия: переименовать старые конфиги в .bak, запустить сервер на 10 секунд для генерации новых, затем перенести свои настройки в свежие файлы (используя diff или meld/vimdiff).

    mv paper-global.yml paper-global.yml.bak
    mv spigot.yml spigot.yml.bak
    # Запуск на генерацию
    timeout 15 java -jar paper-1.21.1-123.jar nogui
    # Теперь ручно перенесите значения из .bak в новые файлы
    
  3. Обновите плагины/моды
    Критически важно: Плагины для 1.20 не заработают на 1.21 без обновления.

    • Зайдите на SpigotMC, Modrinth, CurseForge, Hangar.
    • Скачайте версии, совместимые с целевой версией Minecraft и версией API ядра (Paper/Spigot/Purpur).
    • Удалите несовместимые/заброшенные плагины.
    • Пример структуры:
      /opt/minecraft/plugins/
      ├── ViaVersion-5.2.0.jar
      ├── LuckPerms-5.4.x.jar
      └── WorldEdit-7.3.x.jar
      
  4. Конвертация миров (Data Fixer Upper)
    При переходе через мажорные версии (1.17→1.18, 1.20→1.21) происходит автоматическая конвертация чанков при загрузке. Это может вызвать лаги при первом запуске.

    • Рекомендация: Запустите сервер в тестовом режиме (на другом порту или локально) и дайте ему сконвертировать мир полностью.
    • Для предварительной конвертации используйте Minecraft Region Fixer или Chunky (плагин для прегенерации):
      # Установите Chunky плагином, затем в консоли:
      chunky world world
      chunky radius 5000
      chunky start
      
    • Следите за логами: [Server thread/INFO]: Converted 1234 chunks....
  5. Проверка прав доступа и владельца файлов
    Если сервер запускается от пользователя minecraft:

    chown -R minecraft:minecraft /opt/minecraft
    find /opt/minecraft -type f -name "*.jar" -exec chmod 644 {} \;
    find /opt/minecraft -type f -name "*.sh" -exec chmod 755 {} \;
    

Запуск и верификация

  1. Запустите сервер в режиме отладки (foreground)
    Не используйте systemd сразу. Запустите в screen или tmux, чтобы видеть консоль:

    su - minecraft -s /bin/bash
    cd /opt/minecraft
    screen -S mc_update
    java -Xms2G -Xmx2G -jar paper-1.21.1-123.jar nogui
    

    Дождитесь строки Done (xx.xxxs)! For help, type "help".

  2. Проверьте логи на ошибки (ERROR/WARN)
    Типичные проблемы:

    • ClassNotFoundException / NoSuchMethodError — несовместимый плагин.
    • Missing registry entry — мод/дата