Как установить Java-моды на сервер

1. Подготовка окружения и доступ к серверу

  1. Авторизуйтесь в панели proxify.cloud. Перейдите в раздел «Мои услуги» → выберите ваш выделенный сервер → вкладку «Консоль» или «VNC». Либо подключитесь по SSH с локальной машины:

    ssh root@<IP-адрес_сервера>
    

    IP-адрес указан в деталях услуги в панели proxify.cloud.

  2. Обновите систему и установите необходимые утилиты:

    apt update && apt upgrade -y
    apt install -y openjdk-21-jre-headless screen wget curl unzip
    

    Примечание: для Minecraft 1.20.4+ требуется Java 21. Для версий 1.18–1.20.1 — Java 17. Проверьте версию командой java -version.

  3. Создайте отдельного пользователя для безопасности (не запускайте сервер от root):

    adduser mcuser --disabled-password --gecos ""
    usermod -aG sudo mcuser
    su - mcuser
    

2. Выбор и установка модлоадера (Forge / Fabric / NeoForge)

Моды требуют модлоадер. Vanilla-сервер их не запустит.

Вариант А: Forge (классический стандарт)

  1. Создайте директорию сервера и перейдите в неё:

    mkdir -p ~/server && cd ~/server
    
  2. Скачайте установщик Forge. Замените версию на актуальную (пример для 1.20.1):

    wget https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.1-47.2.0/forge-1.20.1-47.2.0-installer.jar
    
  3. Запустите установку серверной части:

    java -jar forge-1.20.1-47.2.0-installer.jar --installServer
    

    После завершения появятся файлы: forge-1.20.1-47.2.0.jar, libraries/, run.sh, run.bat, user_jvm_args.txt.

  4. Переименуйте основной jar для удобства:

    mv forge-1.20.1-47.2.0.jar server.jar
    

Вариант Б: Fabric (легковесный, современный)

  1. В директории ~/server скачайте установщик Fabric:

    wget https://maven.fabricmc.net/net/fabricmc/fabric-installer/1.0.1/fabric-installer-1.0.1.jar
    
  2. Установите сервер (указывайте версию Minecraft и загрузчик):

    java -jar fabric-installer-1.0.1.jar server -dir . -mcversion 1.20.1 -loader 0.16.9 -downloadMinecraft
    

    Появится fabric-server-mc.1.20.1-loader.0.16.9-launcher.1.0.1.jar. Переименуйте:

    mv fabric-server-mc.1.20.1-loader.0.16.9-launcher.1.0.1.jar server.jar
    

Вариант В: NeoForge (форк Forge для 1.20.4+)

Процесс идентичен Forge, но URL берется с maven.neoforged.net. Для 1.20.4+ рекомендуется именно NeoForge.

3. Принятие EULA и базовая настройка

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

    java -Xms2G -Xmx4G -jar server.jar nogui
    

    Сервер упадет с ошибкой EULA.

  2. Примите лицензию:

    sed -i 's/eula=false/eula=true/' eula.txt
    
  3. Настройте server.properties под свои нужды (порт, motd, сложность). Пример изменения порта на 25565:

    sed -i 's/server-port=25565/server-port=25565/' server.properties
    

4. Установка модов

  1. Создайте папку mods (если её нет):

    mkdir -p ~/server/mods
    
  2. Скачайте моды только с надежных источников: CurseForge, Modrinth, официальные GitHub Releases авторов. Важно: версии модов должны строго соответствовать версии Minecraft и модлоадера (Forge/Fabric/NeoForge).

  3. Загрузите .jar файлы модов на сервер. Через SFTP (FileZilla, WinSCP) под пользователем mcuser в папку /home/mcuser/server/mods/. Или через wget прямо в консоли (пример для мода JourneyMap на Forge 1.20.1):

    cd ~/server/mods
    wget "https://edge.forgecdn.net/files/5607/59/JourneyMap-1.20.1-5.9.18-forge.jar" -O JourneyMap-1.20.1-5.9.18-forge.jar
    
  4. Клиентская часть: Игроки должны установить те же моды тех же версий на свой клиент (через Prism Launcher, CurseForge App, Modrinth App или вручную в %appdata%/.minecraft/mods). Серверные моды (например, Lithium, FerriteCore) на клиент не обязательны, но не помешают.

5. Оптимизация JVM и запуск в Screen

  1. Отредактируйте user_jvm_args.txt (создается Forge/NeoForge) или создайте свой скрипт запуска start.sh:

    cat > ~/server/start.sh << 'EOF'
    #!/bin/bash
    # Настройки памяти: -Xms (начальная) -Xmx (максимальная).
    # Резервируйте 1-2 ГБ под ОС. На 16 ГБ RAM: -Xms10G -Xmx12G.
    JAVA_ARGS="-Xms4G -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 \
    -Dusing.aikars.flags=https://mcflags.emc.gs \
    -Daikars.new.flags=true"
    
    java $JAVA_ARGS -jar server.jar nogui
    EOF
    chmod +x ~/server/start.sh
    
  2. Запустите сервер в сессии screen, чтобы он не останавливался при разрыве SSH:

    cd ~/server
    screen -S mcserver ./start.sh
    
    • Отсоединиться от сессии: Ctrl+A, затем D.
    • Вернуться: screen -r mcserver.
    • Список сессий: screen -ls.

6. Настройка автозапуска через systemd (рекомендуется для выделенных серверов proxify.cloud)

Создайте сервис, чтобы сервер запускался при включении питания и перезапускался при краше.

  1. Выйдите от mcuser к root (exit или Ctrl+D).

  2. Создайте unit-файл:

    cat > /etc/systemd/system/minecraft.service << 'EOF'
    [Unit]
    Description=Minecraft Modded Server (Forge/Fabric/NeoForge)
    After=network.target
    
    [Service]
    WorkingDirectory=/home/mcuser/server
    User=mcuser
    Group=mcuser
    Restart=on-failure
    RestartSec=10
    ExecStart=/home/mcuser/server/start.sh
    ExecStop=/bin/bash -c 'screen -S mcserver -X stuff "stop\n"'
    KillMode=none
    Type=forking
    GuessMainPID=no
    TimeoutStartSec=300
    TimeoutStopSec=60
    
    # Лимиты ресурсов
    LimitNOFILE=100000
    MemoryMax=14G
    CPUAccounting=yes
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

    Корректируйте MemoryMax под объем RAM вашего сервера в proxify.cloud (оставляйте 2-4 Гб под систему).

  3. Включите и запустите сервис:

    systemctl daemon-reload
    systemctl enable minecraft
    systemctl start minecraft
    
  4. Проверка статуса и логов:

    systemctl status minecraft
    journalctl -u minecraft -f --no-hostname
    

7. Настройка файрвола (UFW) и портов

На выделенных серверах proxify.cloud порты закрыты по умолчанию.

  1. Разрешите SSH (чтобы не потерять доступ) и порт Minecraft (по умолчанию 25565 TCP/UDP):

    ufw allow OpenSSH
    ufw allow 25565/tcp
    ufw allow 25565/udp
    ufw enable
    ufw status numbered
    
  2. Если используете другой порт в server.properties — откройте именно его.

  3. Проверьте доступность извне: в клиенте Minecraft → «Игра по сети» → «Добавить сервер» → IP:порт.

8. Резервное копирование (Backup)

Настройте ежедневные бэкапы папки world и mods.

  1. Скрипт бэкапа /home/mcuser/backup.sh:

    cat > /home/mcuser/backup.sh << 'EOF'
    #!/bin/bash
    SRC="/home/mcuser/server"
    DEST="/home/mcuser/backups"
    DATE=$(date +%F_%H-%M)
    mkdir -p "$DEST"
    # Останавливаем сохранение мира на время архивации (требует screen сессии)
    screen -S mcserver -X stuff "save-off\n"
    screen -S mcserver -X stuff "save-all flush\n"
    sleep 5
    tar -czf "$DEST/server_$DATE.tar.gz" -C "$SRC" world mods config server.properties
    screen -S mcserver -X stuff "save-on\n"
    # Удаляем бэкапы старше 7 дней
    find "$DEST" -name "server_*.tar.gz" -mtime +7 -delete
    EOF
    chmod +x /home/mcuser/backup.sh
    chown mcuser:mcuser /home/mcuser/backup.sh
    
  2. Добавьте в crontab пользователя mcuser:

    crontab -u mcuser -e
    # Добавьте строку для