Как установить Dynmap

Подготовка окружения на proxify.cloud

  1. Войдите в панель proxify.cloud и откройте консоль вашего выделенного сервера (VNC или SSH).
  2. Авторизуйтесь под пользователем root или пользователем с sudo (обычно ubuntu или minecraft).
  3. Обновите списки пакетов и установите необходимые утилиты:
apt update && apt upgrade -y
apt install -y openjdk-21-jre-headless wget curl unzip screen htop

Примечание: Dynmap требует Java 17+. На Ubuntu 22.04/24.04 пакет openjdk-21-jre-headless подходит идеально.

Создание пользователя и структуры директорий

  1. Создайте отдельного пользователя для сервера (без пароля, только SSH-ключи или sudo):
adduser --disabled-password --gecos "" minecraft
usermod -aG sudo minecraft
  1. Переключитесь на пользователя и создайте рабочие папки:
su - minecraft
mkdir -p ~/server ~/backups ~/scripts
cd ~/server

Установка ядра сервера (PaperMC) для Dynmap

  1. Скачайте последнюю стабильную версию PaperMC (1.20.4 на момент написания) через API:
VERSION="1.20.4"
BUILD=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/${VERSION}/builds" | jq -r '.builds[-1].build')
JAR_NAME="paper-${VERSION}-${BUILD}.jar"
wget "https://api.papermc.io/v2/projects/paper/versions/${VERSION}/builds/${BUILD}/downloads/${JAR_NAME}" -O paper.jar
  1. Примите EULA и создайте базовый server.properties:
echo "eula=true" > eula.txt
cat > server.properties <<'EOF'
server-port=25565
server-ip=0.0.0.0
enable-query=true
query.port=25565
enable-rcon=false
rcon.port=25575
rcon.password=changeme
level-name=world
gamemode=survival
difficulty=normal
max-players=20
view-distance=10
simulation-distance=6
motd=Proxify Cloud Server | Dynmap Enabled
EOF
  1. Запустите сервер один раз для генерации папок plugins, world и конфигов:
java -Xms2G -Xmx4G -jar paper.jar --nogui
# Ждите сообщения "Done (X.Xs)! For help, type "help""
# Остановите сервер командой в консоли:
stop

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

  1. Перейдите в папку плагинов и скачайте последнюю версию Dynmap (Spigot/Paper совместимую):
cd plugins
wget "https://ci.dynmap.us/job/Dynmap/lastSuccessfulBuild/artifact/Dynmap-dev.jar" -O Dynmap.jar
cd ..

Альтернатива: Если ссылка CI недоступна, используйте прямую ссылку с GitHub Releases или Modrinth: wget "https://github.com/webbukkit/dynmap/releases/download/v3.6-beta-1/Dynmap-3.6-beta-1-spigot.jar" -O Dynmap.jar

  1. Запустите сервер снова для генерации конфигурации Dynmap:
java -Xms2G -Xmx4G -jar paper.jar --nogui
# Дождитесь загрузки плагина (в логах появится "[Dynmap] Loading Dynmap vX.X")
stop

Настройка Dynmap (configuration.txt)

  1. Основной конфиг находится по пути plugins/dynmap/configuration.txt. Откройте его для редактирования:
nano plugins/dynmap/configuration.txt
  1. Ключевые параметры для продакшена на proxify.cloud:
# Веб-сервер Dynmap (встроенный)
webserver:
  enabled: true
  port: 8123                    # Порт веб-интерфейса карты
  bindaddress: "0.0.0.0"        # Слушать на всех интерфейсах
  # Если за Nginx/Traefik — можно поставить 127.0.0.1 и проксировать

# Хранилище рендеров (файловая система — быстрее SQLite на SSD)
tiles:
  storage: "filetree"
  path: "tiles"                 # Относительно plugins/dynmap/
  # Для HDD лучше: storage: "sqlite"

# Рендеринг
render:
  # Качество: normal, high, low
  quality: "high"
  # Количество потоков рендеринга (оставьте 1-2 на выделенном ядре)
  renderthreads: 2
  # Интервал полного ререндера (минуты), 0 = отключено
  fullrenderinterval: 0

# Карты (worlds) — пример для основного мира и Незера
worlds:
  world:
    enabled: true
    maps:
      flat:
        enabled: true
        prefix: "flat"
      surface:
        enabled: true
        prefix: "surface"
      cave:
        enabled: true
        prefix: "cave"
      nether:
        enabled: true
        prefix: "nether"
  world_nether:
    enabled: true
    maps:
      nether:
        enabled: true
        prefix: "nether"
  world_the_end:
    enabled: true
    maps:
      end:
        enabled: true
        prefix: "end"
  1. Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X).

Настройка systemd-сервиса (автозапуск и рестарты)

  1. Вернитесь к root (или используйте sudo):
exit
# или Ctrl+D
  1. Создайте unit-файл:
cat > /etc/systemd/system/minecraft-dynmap.service <<'EOF'
[Unit]
Description=Minecraft Paper Server with Dynmap
After=network.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xms4G -Xmx8G -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 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-dynmap
# Лимиты
LimitNOFILE=65535
LimitNPROC=65535

[Install]
WantedBy=multi-user.target
EOF

Важно: Настройте -Xms и -Xmx под объём RAM вашего выделенного сервера на proxify.cloud (резервируйте 2-4 Гб под ОС и кэш диска).

  1. Перезагрузите systemd, включите автозапуск и стартуйте:
systemctl daemon-reload
systemctl enable minecraft-dynmap
systemctl start minecraft-dynmap
  1. Проверьте статус и логи:
systemctl status minecraft-dynmap
journalctl -u minecraft-dynmap -f

Настройка обратного прокси (Nginx + SSL) для доступа к карте

  1. Установите Nginx и Certbot:
apt install -y nginx certbot python3-certbot-nginx
  1. Создайте конфиг виртуального хоста (замените map.yourdomain.ru на ваш домен, направленный на IP сервера proxify.cloud):
cat > /etc/nginx/sites-available/dynmap <<'EOF'
server {
    listen 80;
    server_name map.yourdomain.ru;

    location / {
        proxy_pass http://127.0.0.1:8123;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_send_timeout 86400;
        # Кэширование статических тайлов
        location ~* \.(png|jpg|jpeg|gif|ico|css|js|json)$ {
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    }
}
EOF
  1. Активируйте сайт и получите сертификат Let's Encrypt:
ln -s /etc/nginx/sites-available/dynmap /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d map.yourdomain.ru --non-interactive --agree-tos -m admin@yourdomain.ru --redirect

Теперь карта доступна по https://map.yourdomain.ru.

Настройка файрвола (UFW) на proxify.cloud

  1. Разрешите только необходимые порты (SSH, Minecraft, Dynmap веб, Nginx):
ufw allow 22/tcp comment 'SSH'
ufw allow 25565/tcp comment 'Minecraft Game'
ufw allow 80,443/tcp comment 'Nginx HTTP/HTTPS'
# Порт 8123 НЕ открываем наружу — он за Nginx
ufw enable
ufw status verbose

В панели proxify.cloud (вкладка Firewall/Network) убедитесь, что соответствующие порты (22, 25565, 80, 443) открыты на уровне инфраструктуры, иначе UFW не поможет.

Первый рендер карты (fullrender)

  1. Подключитесь к консоли сервера через screen или используйте RCON. Проще — через journalctl и команды в stdin systemd (если настроен StandardInput=tty-force), но надежнее — screen внутри сервиса. Для разового запуска:
# Отправляем команду в запущенный сервер через systemd (работает если Type=simple и stdin подключен)
systemctl stop minecraft-dynmap
# Запускаем в фоне с screen для интерактивности
su - minecraft -c "cd ~/server && screen -dmS mc java -Xms4G -Xmx8G -jar paper.jar --nogui"
sleep 10
screen -S mc -X stuff "dynmap fullrender world^M"
# Ждите завершения (может занять часы). Прогресс в логах: journalctl -u minecraft-dynmap -f

Лучший способ — использовать RCON (включите enable-rcon=true в server.properties, задайте пароль) и клиент `m