Files
PupaMLupa/Server
..
2026-05-08 01:03:14 +03:00
2026-05-08 01:03:14 +03:00
2026-05-08 01:03:14 +03:00
2026-05-08 01:03:14 +03:00
2026-05-08 01:03:14 +03:00

PupaMLupa — серверная часть

Каталог содержит всё необходимое для запуска Minecraft-сервера (NeoForge 21.1.228, Minecraft 1.21.1) под Linux + systemd.

Инструкция ниже — для чистой установки на Linux-сервер (Ubuntu 22.04+ / Debian 12+). Для других ОС логика та же, отличаться будут только команды установки пакетов.


1. Требования

  • Linux с systemd (Ubuntu / Debian / Rocky / Arch — любой современный).
  • Обычный пользователь с правом sudo (например, mrleo1nid).
  • Java 21 в PATH (см. ниже).
  • Открытый порт 25565 (или тот, что в server.properties).
  • ~10 ГБ свободного места под Java + NeoForge + моды + мир.

2. Получить репозиторий

Каталог /opt обычно принадлежит root, поэтому первый клон делается через sudo, а затем владельца передаём своему пользователю:

sudo git clone https://github.com/<...>/PupaMLupa.git /opt/PupaMLupa
sudo chown -R "$USER:$USER" /opt/PupaMLupa
cd /opt/PupaMLupa/Server
chmod +x start.sh run.sh install-service.sh install_java.sh

Дальше все команды — без sudo, кроме явно указанных.


3. Установить Java 21

Используйте системный пакет — он виден и в shell, и в systemd, и не требует Jabba:

sudo apt update
sudo apt install -y openjdk-21-jre-headless
java -version       # должно показать "21.x.x"

Альтернатива: Eclipse Temurin от Adoptium (temurin-21-jre через Adoptium APT-репозиторий) — поведение идентично openjdk.

Скрипт install_java.sh (Jabba) тоже работает, но ставит Java в ~/.jabba и требует интерактивного I agree. Для systemd-сервиса это неудобно — лучше системный пакет.


4. Первый запуск (вручную, один раз)

run.sh — это лёгкий лаунчер java @user_jvm_args.txt @libraries/.../unix_args.txt, он не умеет ничего скачивать. Поэтому первый запуск надо сделать через start.sh, чтобы он:

  • скачал и развернул NeoForge в libraries/;
  • сгенерировал user_jvm_args.txt;
  • скачал server.jar;
  • спросил про EULA.
cd /opt/PupaMLupa/Server
echo 'eula=true' > eula.txt          # принимаем EULA заранее
./start.sh

Дождитесь, когда в логе появится:

[Server thread/INFO]: Done (Xs)! For help, type "help"

После этого остановите сервер:

stop

(или нажмите Ctrl+C). Сервер сохранит мир и завершится.


5. Установить systemd-сервис

sudo ./install-service.sh

Что произойдёт:

  • скрипт проверит, что вы — root (через sudo);
  • определит пользователя сервиса по $SUDO_USER (= ваш юзер);
  • проверит наличие run.sh, NeoForge, user_jvm_args.txt, server.jar, принятый EULA, наличие java в PATH;
  • создаст /etc/systemd/system/minecraft.service;
  • сделает daemon-reload, enable, start;
  • покажет статус сервиса.

Теперь сервер будет автоматически:

  • запускаться при загрузке системы;
  • перезапускаться при падении (через 10 секунд);
  • писать логи в journald.

Флаги install-service.sh

Флаг Описание
--name <имя> Имя сервиса (по умолчанию minecraft)
--user <user> Переопределить пользователя сервиса
--dir <путь> Каталог сервера (по умолчанию — каталог скрипта)
--uninstall Остановить и удалить сервис
-h, --help Справка

6. Управление сервером

sudo systemctl status   minecraft     # текущее состояние
sudo systemctl stop     minecraft     # остановить
sudo systemctl start    minecraft     # запустить
sudo systemctl restart  minecraft     # перезапустить
sudo systemctl disable  minecraft     # убрать из автозапуска
sudo systemctl enable   minecraft     # вернуть в автозапуск

sudo journalctl -u minecraft -f                  # живые логи
sudo journalctl -u minecraft -n 200 --no-pager   # последние 200 строк
sudo journalctl -u minecraft --since "1 hour ago"

Внимание: при Type=simple ввод команд в консоль сервера (/op, /say) напрямую не работает — у systemd нет stdin. Если нужна интерактивная консоль, используйте RCON (включается в server.properties: enable-rcon=true, rcon.password=...) и подключайтесь утилитой mcrcon.


7. Обновление сервера

Поскольку сервис работает от вашего пользователя, обновление — обычные git-команды без sudo:

cd /opt/PupaMLupa
git pull

# если изменились моды/конфиги — перезапустить
sudo systemctl restart minecraft
sudo journalctl -u minecraft -f

Если при git pull приехали новые версии модов, и сервер падает с ошибками вроде Module xxx not found, проверьте что список модов синхронизирован с клиентом (см. sync-mods-from-client.ps1).


8. Удалить сервис

cd /opt/PupaMLupa/Server
sudo ./install-service.sh --uninstall

Скрипт остановит сервис, отключит автозапуск, удалит unit-файл и сделает daemon-reload. Файлы сервера (мир, конфиги, моды) НЕ трогаются — их можно удалить вручную, если нужно.


9. Полезные пути

Путь Что внутри
/opt/PupaMLupa/Server/ корень сервера
/opt/PupaMLupa/Server/world/ мир
/opt/PupaMLupa/Server/logs/ свежие логи Minecraft
/opt/PupaMLupa/Server/server.properties настройки сервера
/opt/PupaMLupa/Server/variables.txt настройки start.sh (RAM, версия)
/opt/PupaMLupa/Server/user_jvm_args.txt финальные JVM-аргументы
/etc/systemd/system/minecraft.service unit-файл systemd

10. Решение типовых проблем

status=200/CHDIR

Каталог сервера лежит в /home/<user>/. systemd по умолчанию блокирует /home. Скрипт сам ослабляет ProtectHome, если видит такой путь, но рекомендуется хранить сервер в /opt.

User did not agree to Jabba installation

В PATH нет java, и start.sh пытается поставить её через интерактивный Jabba. Решение — поставить системную Java (см. раздел 3) и перезапустить сервис.

Error: could not open user_jvm_args.txt / Permission denied

Файлы сервера принадлежат не вашему пользователю (например, после sudo git clone остался владелец root). Вернуть себе:

sudo chown -R "$USER:$USER" /opt/PupaMLupa

Module io.netty.buffer not found, required by netty_endec (и подобные)

Не хватает мода или библиотеки на сервере, которая есть на клиенте. Сравните mods/ на клиенте и в Server/mods/. Скрипт sync-mods-from-client.ps1 помогает копировать недостающие jar.

EULA не принят

Сервер в systemd не сможет интерактивно спросить согласие. Создайте файл вручную:

echo 'eula=true' > /opt/PupaMLupa/Server/eula.txt