8.8 KiB
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