Как настроить Dynmap

1. Подготовка сервера и подключение через SSH

  1. Зайдите в панель proxify.cloud (Proxmox VE).

  2. Выберите ваш выделенный сервер (Node) в левом дереве.

  3. Откройте вкладку Console (Консоль) или используйте любой SSH-клиент (Termius, PuTTY, встроенный терминал Linux/macOS).

  4. Подключитесь к Ubuntu под пользователем root или пользователем с sudo-правами:

    ssh root@<IP_АДРЕС_ВАШЕГО_СЕРВЕРА>
    

    IP-адрес виден в панели proxify.cloud на вкладке Summary (Сводка) выбранного узла.

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

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

    Dynmap требует Java 17+. На Ubuntu 22.04/24.04 по умолчанию ставится Java 11/17/21. Проверьте: java -version.

2. Настройка файрвола (UFW) для веб-интерфейса Dynmap

Dynmap по умолчанию вешает веб-сервер на порт 8123. Этот порт должен быть открыт во входящем трафике.

  1. Разрешите SSH (чтобы не потерять доступ) и порт Dynmap:
    ufw allow OpenSSH
    ufw allow 8123/tcp comment 'Dynmap Web Interface'
    
  2. Включите файрвол (если он выключен):
    ufw enable
    
  3. Проверьте статус:
    ufw status numbered
    
    В выводе должны быть строки 22/tcp ALLOW и 8123/tcp ALLOW.

Важно: Если у вашего выделенного сервера в панели proxify.cloud настроен внешний файрвол (Datacenter Firewall) или NAT, убедитесь, что порт 8123 проброшен/разрешен там. Обычно на выделенных серверах (Dedicated) порты открыты по умолчанию, но проверьте вкладку Firewall в панели Proxmox.

3. Установка ядра сервера (Paper/Spigot/Purpur)

Dynmap — плагин, ему нужен сервер на базе Bukkit/Spigot/Paper. Vanilla не подойдет.

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

    mkdir -p /opt/minecraft/server
    cd /opt/minecraft/server
    
  2. Скачайте актуальную сборку Paper (рекомендуется для производительности) для вашей версии (пример для 1.21.1):

    # Получить ссылку на последний билд можно на api.papermc.io
    wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/109/downloads/paper-1.21.1-109.jar"
    

    Замените версию и номер билда на актуальные с сайта papermc.io/downloads.

  3. Примите EULA:

    echo "eula=true" > eula.txt
    
  4. Создайте скрипт запуска start.sh:

    cat > start.sh << 'EOF'
    #!/bin/bash
    # Настройте -Xms и -Xmx под объем RAM вашего выделенного сервера (например, 8G, 16G, 32G)
    java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
    -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions \
    -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
    -jar paper.jar --nogui
    EOF
    chmod +x start.sh
    
  5. Запустите сервер первый раз в screen, чтобы сгенерировать папку plugins:

    screen -S mc
    ./start.sh
    

    Дождитесь сообщения Done (X.Ys)! For help, type "help". Остановите сервер командой stop. Выйдите из screen: Ctrl+A затем D.

4. Установка плагина Dynmap

  1. Перейдите в папку плагинов:
    cd /opt/minecraft/server/plugins
    
  2. Скачайте последнюю стабильную версию Dynmap (файл .jar) с официального ресурса (Modrinth или CurseForge/SpigotMC). Пример для Modrinth (версия 3.6+):
    wget -O Dynmap.jar "https://cdn.modrinth.com/data/PcBs3Q1l/versions/3.6-standalone/Dynmap-3.6-standalone.jar"
    
    Всегда проверяйте актуальную ссылку на https://modrinth.com/plugin/dynmap/versions.
  3. Вернитесь в корень сервера и запустите сервер снова для генерации конфигов:
    cd /opt/minecraft/server
    screen -S mc
    ./start.sh
    
    Дождитесь полной загрузки. В логах появится: [Dynmap] Web server started on port 8123. Остановите сервер командой stop. Выйдите из screen (Ctrl+A, D).

5. Конфигурация Dynmap (configuration.txt)

Основной конфиг находится по пути: /opt/minecraft/server/plugins/dynmap/configuration.txt.

  1. Откройте его для редактирования:
    nano /opt/minecraft/server/plugins/dynmap/configuration.txt
    

5.1. Смена порта и биндинга (Binding)

Найдите секцию webserver:.

webserver:
    # Порт веб-интерфейса. Убедитесь, что он совпадает с UFW (8123).
    port: 8123
    
    # Критично для выделенных серверов: слушаем на всех интерфейсах (0.0.0.0),
    # а не только на localhost (127.0.0.1), иначе карта не откроется по IP.
    address: "0.0.0.0"

Если оставите address: "127.0.0.1", карта будет доступна только внутри консоли сервера.

5.2. Настройка рендеринга (Качество и Производительность)

Найдите renderparams: и tiles:.

renderparams:
    # Формат тайлов. PNG быстрее рендерится, WebP меньше весит на диске.
    # Для HDD/SSD на выделенке PNG предпочтительнее по CPU.
    format: "png"
    
    # Качество JPEG/WebP (если выбрали их). 75-85 баланс.
    quality: 80

tiles:
    # Хранилище тайлов. "filesystem" — стандарт, пишет файлы на диск.
    # "sqlite" — одна база данных, быстрее на HDD, медленнее на NVMe при огромных мирах.
    tilespath: "tiles"
    storage: "filesystem"

5.3. Ограничение нагрузки (Важно для выделенных серверов)

Чтобы рендеринг не "убил" тики сервера (TPS), ограничьте потоки и частоту. Найдите renderthreads: и добавьте/измените:

# Количество потоков рендеринга. Ставьте на 1-2 меньше ядер CPU.
# На 8-ядерном Xeon/EPYC ставьте 4-6.
renderthreads: 4

# Максимальное количество тайлов, обрабатываемых за тик (20 тиков = 1 сек).
# Ниже = меньше лагов, дольше рендер.
tiles-per-tick: 50

# Приоритет потоков рендера (low/normal/high). Ставьте low.
render-priority: "low"

5.4. Настройка миров (worlds)

Если у вас несколько миров (world, world_nether, world_the_end), проверьте секцию worlds:. По умолчанию Dynmap подхватывает все. Чтобы отключить рендер Незера/Энда (экономия ресурсов):

worlds:
    world:
        enabled: true
    world_nether:
        enabled: false  # Отключить Незер
    world_the_end:
        enabled: false  # Отключить Энд

5.5. Защита паролем (Опционально)

Чтобы закрыть карту от посторонних, раскомментируйте и настройте:

# В секции webserver:
# authentication: true
# users:
#     admin: "password_hash" # Хеш генерируется командой /dynmap webregister в игре

Для генерации хеша запустите сервер, зайдите за оппера и введите /dynmap webregister admin ваш_пароль. Хеш запишется в конфиг автоматически при перезагрузке плагина (/dynmap reload).

Сохраните файл: Ctrl+O, Enter, Ctrl+X.

6. Настройка Systemd-сервиса (Автозапуск и управление)

Не держите сервер в screen вручную. Настройте systemd.

  1. Создайте юнит-файл:

    nano /etc/systemd/system/minecraft.service
    
  2. Вставьте конфигурацию (подставьте свой пользователя, если не root, и пути):

    [Unit]
    Description=Minecraft Paper Server with Dynmap
    After=network.target
    Wants=network.target
    
    [Service]
    WorkingDirectory=/opt/minecraft/server
    User=root
    Group=root
    # Restart=on-failure перезапустит сервер при краше
    Restart=on-failure
    RestartSec=10
    # Лимиты памяти и файлов
    LimitNOFILE=65535
    LimitNPROC=65535
    # Команда запуска
    ExecStart=/usr/bin/java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -jar paper.jar --nogui
    # Корректная остановка по SIGTERM (команда stop в консоль)
    ExecStop=/bin/bash -c 'echo "stop" | /usr/bin/nc -U /tmp/minecraft.sock 2>/dev/null || pkill -f paper.jar'
    StandardInput=tty-force
    TTYPath=/dev/tty
    TTYReset=yes
    TTYVHangup=yes
    KillMode=control-group
    
    [Install]
    WantedBy=multi-user.target
    

    Примечание: ExecStop выше упрощен. Для production лучше использовать mcrcon или скрипт, пишущий в stdin процесса. Простейший вариант — ExecStop=/bin/kill -TERM $MAINPID, но Paper лучше гасится по команде stop.

    Рекомендуемый простой вариант ExecStop:

    ExecStop=/bin/bash -c 'sleep 2 && pkill -f "paper