Как обновить сервер Minecraft без потери мира

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

  1. Авторизуйтесь в панели proxify.cloud
    Откройте https://proxify.cloud, войдите в личный кабинет и перейдите в раздел «Мои услуги» → выберите ваш выделенный сервер с Ubuntu.

  2. Подключитесь к серверу по SSH
    Используйте данные доступа из панели proxify.cloud (IP-адрес, порт 22, логин root или созданный пользователь, пароль/ключ):

    ssh root@ВАШ_IP_АДРЕС
    

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

    ssh -i ~/.ssh/id_rsa root@ВАШ_IP_АДРЕС
    
  3. Определите путь к серверу Minecraft
    Стандартные пути на Ubuntu:

    • /home/minecraft/server — если создавали пользователя minecraft
    • /opt/minecraft/server — при ручной установке
    • /root/minecraft/server — если запускали от root (не рекомендуется)

    Проверьте текущую директорию:

    ls -la /home/minecraft/server
    # или
    find / -name "server.jar" -type f 2>/dev/null | head -5
    
  4. Остановите сервер корректно
    Если сервер запущен через systemd:

    systemctl stop minecraft
    

    Если запущен в screen/tmux:

    screen -S minecraft -X stuff "stop\n"
    # ждите 10-15 секунд
    screen -ls  # убедитесь, что сессия закрылась
    

    Важно: Никогда не убивайте процесс kill -9 — это гарантированно повредит мир.

  5. Создайте полный бэкап мира и конфигов
    Выполните на сервере (замените путь на ваш):

    BACKUP_DIR="/home/minecraft/backups"
    SERVER_DIR="/home/minecraft/server"
    DATE=$(date +%Y%m%d_%H%M%S)
    
    mkdir -p "$BACKUP_DIR"
    tar -czf "$BACKUP_DIR/minecraft_full_$DATE.tar.gz" -C "$SERVER_DIR" .
    
    # Проверка размера бэкапа
    ls -lh "$BACKUP_DIR/minecraft_full_$DATE.tar.gz"
    

    Дополнительно скачайте бэкап локально через SFTP (FileZilla, WinSCP) или scp:

    scp root@ВАШ_IP:/home/minecraft/backups/minecraft_full_$DATE.tar.gz ./local_backups/
    
  6. Сохраните версию Java и параметры запуска

    java -version 2>&1 | head -3
    cat /home/minecraft/server/start.sh 2>/dev/null || echo "start.sh не найден"
    cat /etc/systemd/system/minecraft.service 2>/dev/null || echo "systemd unit не найден"
    

Обновление ядра сервера (Paper/Spigot/Purpur/Folia)

  1. Определите текущий тип и версию ядра

    cd /home/minecraft/server
    java -jar server.jar --version 2>&1 | head -5
    # или проверьте имя файла
    ls -la server.jar
    
  2. Скачайте новую версию ядра
    Примеры для актуальных версий (замените URL на актуальные с официальных сайтов):

    PaperMC (рекомендуется):

    cd /home/minecraft/server
    # Получите последний билд для вашей версии (пример для 1.21.1)
    VERSION="1.21.1"
    BUILD=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds" | jq -r '.builds[-1].build')
    wget -O server_new.jar "https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds/$BUILD/downloads/paper-$VERSION-$BUILD.jar"
    

    Purpur:

    VERSION="1.21.1"
    BUILD=$(curl -s "https://api.purpurmc.org/v2/purpur/$VERSION" | jq -r '.builds.latest')
    wget -O server_new.jar "https://api.purpurmc.org/v2/purpur/$VERSION/$BUILD/download"
    

    Folia (для больших серверов):

    VERSION="1.21.1"
    BUILD=$(curl -s "https://api.papermc.io/v2/projects/folia/versions/$VERSION/builds" | jq -r '.builds[-1].build')
    wget -O server_new.jar "https://api.papermc.io/v2/projects/folia/versions/$VERSION/builds/$BUILD/downloads/folia-$VERSION-$BUILD.jar"
    

    Если jq не установлен:

    apt update && apt install -y jq
    
  3. Проверьте совместимость плагинов
    Перед заменой ядра проверьте плагины на сайте автора или через команду:

    cd /home/minecraft/server/plugins
    for f in *.jar; do
      echo "=== $f ==="
      unzip -p "$f" plugin.yml 2>/dev/null | grep -E "name|version|api-version|load:" | head -5
    done
    

    Обновите критичные плагины (WorldEdit, Essentials, LuckPerms, CoreProtect) до версий, поддерживающих новую версию Minecraft.

  4. Замените файл ядра

    cd /home/minecraft/server
    mv server.jar server.jar.backup_$(date +%Y%m%d)
    mv server_new.jar server.jar
    chown minecraft:minecraft server.jar  # если пользователь minecraft
    

Обновление системных компонентов

  1. Обновите Java при необходимости
    Требования версий Minecraft:

    • 1.17–1.20.4: Java 17 (рекомендуется Eclipse Temurin или Azul Zulu)
    • 1.20.5+: Java 21

    Установка Temurin JDK 21:

    apt update && apt install -y wget gpg
    wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor > /etc/apt/trusted.gpg.d/adoptium.gpg
    echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" > /etc/apt/sources.list.d/adoptium.list
    apt update && apt install -y temurin-21-jdk
    
    # Настройте альтернативы
    update-alternatives --config java
    java -version
    

    Обновите путь к Java в systemd unit или скрипте запуска:

    # В /etc/systemd/system/minecraft.service
    ExecStart=/usr/lib/jvm/temurin-21-jdk/bin/java -Xms4G -Xmx4G -jar server.jar nogui
    
  2. Обновите Ubuntu (security updates только)

    apt update && apt upgrade -y --security-only
    # Перезагрузка не обязательна, но рекомендуется если обновился kernel
    needs-restarting -r 2>/dev/null || echo "Перезагрузка не требуется"
    

Миграция мира и конфигурации

  1. Запустите сервер первый раз для генерации новых конфигов

    cd /home/minecraft/server
    sudo -u minecraft /usr/lib/jvm/temurin-21-jdk/bin/java -Xms2G -Xmx2G -jar server.jar --nogui
    

    Дождитесь сообщения Done! (10-30 секунд), затем введите stop в консоли.

  2. Сравните и объедините конфигурационные файлы
    Ключевые файлы для проверки (используйте diff или meld):

    cd /home/minecraft/server
    
    # Сравнение server.properties
    diff -u server.properties.backup_$(date +%Y%m%d) server.properties 2>/dev/null || diff -u server.properties.old server.properties
    
    # bukkit.yml, spigot.yml, paper-global.yml, purpur.yml
    for f in bukkit.yml spigot.yml paper-global.yml purpur.yml; do
      [ -f "$f" ] && echo "=== $f ===" && head -20 "$f"
    done
    

    Восстановите ваши настройки из бэкапа в новые файлы (view-distance, simulation-distance, entity-activation-range, настройки античита и т.д.).

  3. Проверьте папку мира
    Мир находится в папке world, world_nether, world_the_end (или кастомные названия из server.properties):

    ls -la /home/minecraft/server/world/
    # Должны быть: level.dat, region/, data/, playerdata/, poi/
    

    Если структура на месте — мир совместим. При мажорном обновлении (например, 1.20 → 1.21) чанки конвертируются автоматически при первом заходе игрока.

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

  1. Настройте systemd unit (если не настроен)
    Создайте/обновите /etc/systemd/system/minecraft.service:

    [Unit]
    Description=Minecraft Server (Paper)
    After=network.target
    Wants=network.target
    
    [Service]
    WorkingDirectory=/home/minecraft/server
    User=minecraft
    Group=minecraft
    ExecStart=/usr/lib/jvm/temurin-21-jdk/bin/java \
      -Xms6G -Xmx6G \
      -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 server.jar nogui
    Restart=on-failure
    RestartSec=10
    LimitNOFILE=100000
    MemoryLimit=8G
    
    [Install]
    WantedBy=multi-user.target
    

    Перезагрузите systemd и включите автозапуск:

    systemctl daemon-reload
    systemctl enable minecraft
    
  2. Запустите сервер и проверьте логи

    systemctl start minecraft
    journalctl -u minecraft -f