Подготовьте точку возврата до запуска новой сборки Paper. После изменения мира или данных плагинов новый JAR нельзя просто заменить прежним и считать откат законченным. Сохраните старую программу вместе с данными до обновления, затем проведите обновление за один запланированный перерыв.
Здесь используется установка Paper на Ubuntu: служба minecraft, пользователь minecraft, каталог /srv/minecraft. Нужны sudo, SSH и независимое место для копии. Это обновление Paper, а не переход с Fabric, Forge, Bedrock или сети с прокси.
Определите, меняется сборка или версия игры#
Новая сборка Paper для прежней версии Minecraft и переход на другой выпуск игры имеют разные риски совместимости. Запишите версию игры и сборку Paper, с которых переходите, и конкретную пару, которую собираетесь установить. Меняющаяся ссылка latest плохо подходит для учёта обновления.
До выбора новой версии проверьте актуальные требования Paper: на 12 октября 2026 года таблица рекомендует Java 21 для 1.20–1.21.11 и Java 25 для 26.1+. Старое руководство или Java из текущего SSH-терминала не определяют требования новой сборки.
Для каждого плагина проверьте у автора поддерживаемые версии игры и Paper, зависимости и инструкции миграции. Учтите генераторы миров, плагины инвентарей и прав, подключения к внешним БД. Если для важной функции нет совместимого выпуска, отложите смену версии игры либо выберите документированную замену и отдельно проверьте перенос данных. Удаление важного плагина ради чистого журнала меняет сервер, который получают игроки.
Зафиксируйте действующую установку#
На VPS проверьте службу и текущие файлы:
sudo systemctl cat minecraft
sudo systemctl show minecraft -p ExecStart -p WorkingDirectory -p User
sudo -u minecraft /bin/bash -c 'cd /srv/minecraft && sha256sum -c paper.jar.sha256'
sudo ls -la /srv/minecraft/plugins
sudo tail -n 100 /srv/minecraft/logs/latest.log
df -h /srv /var/backups
Запишите исполняемый файл Java из ExecStart и выполните -version именно для него. Сохраните закрытую копию unit-файла и переопределений, версии плагинов, имя мира и порядок восстановления внешних баз. Сборку работающего сервера определяйте по журналу: одно имя файла её не подтверждает.
Проверьте существующий каталог plugins/update: отложенные замены могут примениться при следующем запуске. Включите их в план до создания исходной копии. Руководство Paper по плагинам разбирает ошибки зависимостей и дублирующихся JAR. Планируйте конкретные замены, чтобы у каждого плагина осталась одна выбранная версия.
Места должно хватать на полный архив, каталог передачи, восстановленную копию и сохранённый каталог неудачного обновления. Если нужна внешняя БД, предусмотрите согласованную копию при остановленных процессах записи игры. Архив каталога автоматически её не создаёт.
Выберите проверенные файлы и проведите репетицию#
На своём компьютере скачайте конкретную сборку с официальной страницы Paper. Сохраните оригинальное имя и номер в заметке, а копию для загрузки назовите paper-next.jar. Плагины берите из доверенных выпусков их авторов, а не из переупакованной подборки на незнакомом сайте.
До обслуживания рабочего сервера проверьте обновление на отдельной копии с нужной Java. Отделите тестовых игроков и подключения плагинов от рабочей среды. Проверьте генератор, знакомые постройки, инвентари, права и команды, которыми пользуется ваша группа. Успешного открытия JAR недостаточно для проверки этих функций. Если преобразование данных необратимо, тестовую копию можно заменить; неизменённую исходную копию сохраните.
Подготовьте закрытый каталог передачи на VPS:
install -d -m 700 "$HOME/minecraft-transfer"
chmod 700 "$HOME/minecraft-transfer"
Загрузите файл со своего компьютера:
sha256sum paper-next.jar
scp paper-next.jar SSH_USER@VPS_IP:minecraft-transfer/paper-next.jar
Замените SSH-пользователя и адрес; для другого порта добавьте -P YOUR_SSH_PORT. На VPS сравните sha256sum "$HOME/minecraft-transfer/paper-next.jar" с результатом на компьютере. Это проверка передачи; происхождение подтверждается выбором доверенного источника скачивания.
Ограничьте вход до следующего запуска#
До остановки старой сборки запишите исходный список доступа и права операторов в закрытую заметку. От имени оператора в игре включите список доступа, добавьте своего настоящего тестового администратора и на время обслуживания удалите все обычные аккаунты. Замените имена ниже и повторите удаление для всего списка обычных игроков:
/whitelist list
/whitelist on
/whitelist add TestAdmin
/whitelist remove PlayerToExclude
Во время проверки права оператора должны оставаться только у допущенных тестовых администраторов; у остальных временно отзовите их командой /deop AccountName и запишите прежние права. Не рассчитывайте, что список доступа исключит привилегированных администраторов. Управляйте списками серверными командами по справочнику файлов Paper, а не придумывайте UUID аккаунтов.
После остановки ниже проверьте server.properties: сохраните online-mode=true, а до запуска обновлённой сборки установите white-list=true и enforce-whitelist=true. Заменяйте существующие ключи без дублирования. Эти настройки Paper сохраняют проверку аккаунтов и ограничивают допуск. В исходной копии будет временная политика обслуживания; отдельно записанную прежнюю политику сохраните для открытия после проверки. Если обеспечить вход только тестовых аккаунтов не получается, отложите первый запуск обновлённой сборки.
Начните обслуживание и оставьте Paper остановленным#
Предупредите игроков, приостановите другие задания, которые могут запустить сервер, затем на VPS:
sudo systemctl stop minecraft
sudo journalctl -u minecraft -n 80 --no-pager
sudo systemctl show minecraft -p ActiveState -p MainPID -p Result
Продолжайте после штатного сохранения, состояния inactive, PID 0 и успешного результата остановки. Таймаут или ошибку хранилища сначала нужно устранить. Руководство systemd описывает принудительное завершение после превышения времени остановки: отсутствующий процесс ещё не означает корректное сохранение.
Создайте исходную копию до обновления, пока Paper остановлен:
(
set -e
test "$(sudo systemctl show minecraft -p ActiveState --value)" = inactive
test "$(sudo systemctl show minecraft -p MainPID --value)" = 0
test "$(sudo systemctl show minecraft -p Result --value)" = success
sudo install -d -m 700 /var/backups/minecraft
MC_BASELINE="/var/backups/minecraft/pre-update-$(date +%F-%H%M%S).tar.gz"
sudo test ! -e "$MC_BASELINE"
sudo tar -C /srv -czf "$MC_BASELINE.partial" minecraft
sudo chmod 600 "$MC_BASELINE.partial"
sudo tar -tzf "$MC_BASELINE.partial" > /dev/null
sudo mv "$MC_BASELINE.partial" "$MC_BASELINE"
sudo install -o "$(id -un)" -m 600 "$MC_BASELINE" "$HOME/minecraft-transfer/backup.tar.gz"
cd "$HOME/minecraft-transfer"
umask 077
sha256sum backup.tar.gz > backup.tar.gz.sha256
)
При любой ошибке остановитесь; .partial не считается готовой копией. Сейчас же завершите согласованное резервирование внешних баз. На своём компьютере скачайте исходную копию в новый закрытый каталог с датой. Ошибка любой передачи прерывает блок, поэтому прежняя пара файлов не подменит эту попытку:
(
set -e
umask 077
MC_UPDATE_COPY="$(mktemp -d "$HOME/minecraft-pre-update-$(date +%F-%H%M%S).XXXXXX")"
chmod 700 "$MC_UPDATE_COPY"
cd "$MC_UPDATE_COPY"
scp SSH_USER@VPS_IP:minecraft-transfer/backup.tar.gz ./backup.tar.gz
scp SSH_USER@VPS_IP:minecraft-transfer/backup.tar.gz.sha256 ./backup.tar.gz.sha256
sha256sum -c backup.tar.gz.sha256
pwd
)
Запишите выведенный путь, версии и дату обслуживания. Оставьте имена backup.tar.gz и backup.tar.gz.sha256 неизменными в этом каталоге: в файле суммы указано имя архива. После успешной передачи обоих файлов и проверки суммы по руководству резервирования и восстановления проверьте выбранную пару и проведите репетицию возврата. Сохраните эту копию до изменений, даже если позже появятся новые архивы.
Между созданием исходной копии и обновлением Paper запускать не нужно. Иначе игроки успеют внести изменения, которых в ней нет, и точка возврата уже не будет состоянием непосредственно перед миграцией.
Замените выбранные файлы при остановленном сервере#
Если нужна другая Java, сначала установите её, закрепите проверенный абсолютный путь в unit-файле и сохраните сведения о старой службе и Java для отката. После редактирования службы выполните sudo systemctl daemon-reload. Не меняйте Java глобально для других приложений.
При остановленном сервере выполните запланированные совместимые замены плагинов по их инструкциям миграции. Прежние файлы должны остаться в исходной копии; внешние изменения схем БД требуют согласованного порядка. Затем установите выбранный JAR Paper на VPS:
(
set -e
test "$(sudo systemctl show minecraft -p ActiveState --value)" = inactive
test "$(sudo systemctl show minecraft -p MainPID --value)" = 0
test -s "$HOME/minecraft-transfer/paper-next.jar"
sudo install -o minecraft -g minecraft -m 640 "$HOME/minecraft-transfer/paper-next.jar" /srv/minecraft/paper.jar
sudo -u minecraft /bin/bash -c 'cd /srv/minecraft && sha256sum paper.jar > paper.jar.sha256'
sudo systemctl start minecraft
sudo journalctl -u minecraft -n 120 --no-pager
)
Это оригинальный пример команд для данной установки. Порядок обновления Paper требует замены при остановленном сервере и проверки запуска. test -s проверяет только наличие непустого файла; он не подтверждает корректность JAR или его источник.
Принимайте обновление по поведению игры#
Проследите запуск до Done, проверьте нужную сборку и разберите ошибки плагинов. Затем подключитесь допущенным тестовым аккаунтом и подходящим клиентом, выполните заранее выбранные проверки: мир и ориентиры, инвентари, права, переходы между измерениями, важные действия плагинов. Дайте серверу сохраниться, выполните штатный перезапуск и проверьте сохранность результата. Только после принятия обновления верните записанную исходную политику списков доступа и операторов средствами администрирования сервера и объявите открытие; проверка аккаунтов должна оставаться включённой.
| Наблюдение | Решение |
|---|---|
| Ошибка версии Java-классов | Сверьте конкретную Java из ExecStart с выбранной веткой |
| Нет зависимости плагина или дублируется имя | Исправьте набор при остановленном сервере либо восстановите исходную копию |
| Неожиданно появился новый мир | Остановите сервер; проверьте рабочий каталог, level-name и исходные файлы мира |
| Запуск успешен, но важная функция сломана | Не открывайте доступ игрокам; выберите исправление или полный откат |
| После новой версии появились лаги | Соберите данные по руководству диагностики со spark, не меняйте JVM-флаги наугад |
Для управления собственным VPS через браузер можно отдельно рассмотреть Nexardo. Подключение к панели не происходит автоматически для этой ручной службы и не делает несовместимую миграцию плагина обратимой.
Верните старую программу вместе с её данными#
Объяснение разработчика Paper связывает отсутствие поддержки понижения версии с преобразованием сохранённых данных. Откат — восстановление полного состояния до обновления, включая старый JAR и плагины. Не запускайте прежнюю программу на мире, который новая версия уже сохранила.
Остановите обновлённую службу, чтобы прекратить повторные попытки запуска. Сохраните её каталог и нужные журналы: там могут быть сведения об ошибке или прогресс игроков после обновления. Выполните восстановление через отдельный каталог из руководства резервирования, используя исходные backup.tar.gz и контрольную сумму. До запуска верните прежнюю конфигурацию службы, Java и согласованное состояние внешней базы. Если БД плагина нельзя вернуть на соответствующий момент, сначала решите эту проблему: откат пока неполон.
Изменения после исходной копии будут потеряны. Сообщите об этом перед открытием доступа. Исходная копия сохраняет допуск на время обслуживания: повторите проверки реального мира тестовыми аккаунтами перед возвратом прежней политики доступа. Сохраните исходный архив с неудачной новой копией до выяснения причины. Верная контрольная сумма архива — только один шаг, а не подтверждение работоспособного восстановления.




