Skip to content
Перейти к содержимому
Вернуться в блог
Docker-MC-Proxy: Создание сети Minecraft серверов

Docker-MC-Proxy: Создание сети Minecraft серверов

Alexandru Maftei
Alexandru Maftei
@ice
Обновлено
12 просмотров
TL;DR:Docker-mc-proxy запускает Minecraft прокси как BungeeCord и Velocity в контейнере, позволяя распределять игроков по нескольким бэкенд-серверам. Идеально для растущих сообществ или высокопроизводительных сетей, требующих балансировки нагрузки и избыточности.
GitHub · Проект сообщества Minecraft

docker-mc-proxy (itzg/docker-mc-proxy)

Docker-образ, предоставляющий выбор Minecraft прокси, таких как BungeeCord и Velocity

Star на GitHub ↑
★ 320 stars👥 Shell📜 Apache-2.0

Управление несколькими Minecraft серверами кажется излишним, пока это не станет необходимым. Возможно, вы выросли за пределы одного сервера, или хотите разделить игроков между миром выживания и творческим режимом без принуждения всех выбирать. Прокси-сервер находится между игроками и вашими фактическими серверами, обрабатывая трафик и перемещая игроков туда, где им нужно быть. Docker-mc-proxy делает именно это, и его очень просто настроить, если вы знаете основы Docker.

Что делает этот проект

Docker-mc-proxy - это контейнеризированный образ, запускающий прокси-сервер Minecraft. Он поддерживает BungeeCord (наиболее распространный выбор), Velocity (новее, быстрее) и Waterfall (сообщественный форк BungeeCord с большим количеством функций). Он действует как посредник: игроки подключаются к адресу прокси, а прокси перенаправляет их на тот бэкенд-сервер, который вы настроили.

Образ поставляется с встроенными проверками работоспособности с использованием mc-monitor, поэтому Docker и ваши инструменты оркестрации сразу знают, если что-то не так. Вам не придется изучать логи, задумываясь, жив ли процесс.

Это одна из серии Docker-образов itzg (320 звёзд на GitHub), что говорит о том, что это не заброшенный одноразовый проект. Мейнтейнер поддерживает его актуальность с поддержкой Java 25 и регулярными исправлениями ошибок.


Почему вам это нужно

Наборы на одном сервере теряют свою эффективность, когда вы достигаете определённого порога игроков. Мир 1.20 с 50 игроками, ползущими вокруг, начинает задерживаться. Вы можете углубиться в оптимизацию серверной конфигурации, конечно. Или разделить: выживание на одном сервере, мини-игры на другом, и пусть прокси обрабатывает маршрутизацию. Игроки даже не заметят швов.

Ещё есть избыточность. Если ваш основной сервер выключится, вы можете запустить резервную копию, и прокси всё равно будет работать. Вам не придётся сообщать 100 игрокам «сервер мёртв, увидимся позже».

Провайдеры хостинга любят развертывания Docker, потому что они предсказуемы и ресурсоэффективны. Если вы запускаете это на общей инфраструктуре или VPS, контейнеризация означает, что вы не случайно захватываете RAM, что ломает приложение кого-то другого.


Установка и базовая настройка

Самый простой способ начать - с Docker Compose. Вот работающий пример:

yaml
services:
 mc:
 image: itzg/minecraft-server
 environment:
 EULA: "TRUE"
 ONLINE_MODE: "FALSE"
 volumes: - mc-data:/data
 proxy:
 image: itzg/mc-proxy
 environment:
 TYPE: BUNGEECORD
 CFG_MOTD: "Powered by Docker"
 ports: - "25565:25577"
 volumes: - ./config.yml:/config/config.yml - proxy-data:/server

volumes:
 mc-data:
 proxy-data:

Критичная часть: `ONLINE_MODE=FALSE` на бэкенд-сервере. Прокси нужны именно для этого, поскольку они обрабатывают аутентификацию, а не отдельные серверы. Без этого игроки получат ошибку «не аутентифицирован».

Прокси сопоставляет порт 25565 (стандартный порт Minecraft) со своим внутренним 25577. Игроки подключаются к IP вашего сервера на 25565, и прокси делает остальное.

Если вы хотите настроить MOTD (описание, которое игроки видят в списке серверов), используйте переменную окружения `CFG_MOTD`, или, лучше всего, воспользуйтесь нашим Создателем MOTD для Minecraft, чтобы визуально спроектировать его и вставить. Вы даже можете использовать коды цветов.

Теперь вам нужно настроить, куда идёт трафик. Создайте файл `config.yml`, который сообщит прокси, какие бэкенд-серверы существуют:

yaml
servers:
 survival:
 address: mc:25565
 restricted: false
 creative:
 address: creative-server:25565
 restricted: false
listeners: - query_port: 25577
 motd: "Моя сеть Minecraft"
 tab_list: GLOBAL_PING
 default_server: survival

Игроки по умолчанию попадают в режим выживания. Они могут переключаться между мирами, используя команды в игре.


Ключевые функции, которые важны

Встроенные проверки работоспособности действительно впечатляют. Docker может видеть, отзывчив ли прокси, без написания вами собственных скриптов. Запустите `docker ps`, и вы увидите статус `(healthy)`, а не просто `(up)`. Это важно, если вы используете Kubernetes или любую платформу оркестрации, где мёртвые контейнеры автоматически заменяются.

Управление памятью более гибкое, чем можно было бы ожидать. По умолчанию - 512м, но вы можете настроить его или позволить JVM автоматически масштабировать на основе ограничения памяти контейнера. Если вы сжимаете это на маленький VPS, есть много ручек, которые можно повернуть.

Поддержка пользовательских файлов JAR прокси означает, что вы не ограничены тремя встроенными вариантами. Установите `TYPE=CUSTOM`, укажите `BUNGEE_JAR_URL` на то, где живёт ваш JAR, и всё готово. Некоторые сообщества запускают форки с пользовательскими функциями; это учитывает это.

Образ синхронизирует конфигурацию из `/config` при запуске. Если вы обновляете конфиг прокси через Docker объёмы (как это должно быть), он подхватывает изменения без необходимости перестраивать образ. Учитывает вашу конфигурацию над чем-либо встроенным.


Подводные камни и распространённые ошибки

Самый большой из них: забыть `ONLINE_MODE=FALSE` на бэкенд-сервере. Вы увидите ошибки «не аутентифицирован», думая, что что-то сломано, хотя на самом деле вы просто пропустили флаг.

Также возникает путаница с перенаправлением портов. Контейнер использует внутренний 25577, но вы можете сопоставить его с любым внешним портом, который вам нужен. Если вы делаете `ports: "25565:25577"`, игроки подключаются к 25565, а не 25577. Не случайно открывайте 25577 на вашем файрволе и не задумывайтесь, почему никто не может присоединиться.

Некоторые люди запускают несколько бэкенд-серверов, но не понимают, что прокси нужно подключаться к ним по сети. Если ваши серверы в отдельных контейнерах, используйте имена служб (как `mc:25565` в compose) вместо localhost. Внутренний DNS Docker обрабатывает маршрутизацию.

На самом деле, есть ещё одна вещь, которую я постоянно забываю: если вы обновляете версию JAR прокси, установите `BUNGEE_JAR_REVISION` на новое число, чтобы принудительно переизвлечь. В противном случае он закэширует старую версию, и вы будете задумываться, почему ваши исправления не сработали.


Когда прокси не являются решением

Если у вас менее 30 одновременных игроков и нет проблем с производительностью, прокси - это излишняя сложность, которой вам не нужно. Paper и Purpur могут справиться с приличным количеством игроков при солидной оптимизации.

Прокси также добавляют задержку. Как правило, это незаметно в локальной сети или на современном интернете, но в крайних случаях (очень старое оборудование, проблемная сетевая настройка) вы можете заметить задержки тиков. Velocity справляется с этим лучше, чем BungeeCord, но стоит провести бенчмарк для вашей настройки.

Если вы управляете конкурсным PvP-сервером, где каждая миллисекунда важна, вам захочется протестировать, допустима ли задержка прокси. Большинство игроков не заметят. Хардкоровые PvP-игроки - будут.


Альтернативы, о которых стоит подумать

Geyser (также поддерживается itzg) - совершенно другая история - он переводит подключения Bedrock в Java Edition, а не балансирует нагрузку. Не заменитель, но иногда люди путают их.

Traefik или Nginx технически могут обратно проксировать Minecraft, если вы запускаете всё в Kubernetes и хотите единый ingress, но они излишни. Velocity проще и быстрее для этого конкретного случая.

Если вы хотите что-то ещё более лёгкое, на GitHub есть проекты однопurpose-прокси, но они обычно менее поддерживаются и лишены операционных изысканностей (проверки работоспособности, простая перезагрузка конфига), которые делают docker-mc-proxy надёжным для продакшена.


Запуск в продакшене

Docker делает эту часть гладкой. Установите ограничения ресурсов, используйте политики перезапуска, и пусть Docker обрабатывает неудачи. Типичная настройка резервирует 512м-1г для прокси самого, если только вы не направляете сотни одновременных игроков.

Агрегация логов - ваш друг. Прокси выводит много полезных диагностик. Если вы запускаете на хосте с несколькими сервисами, направляйте эти логи куда-то центральное (syslog, ELK, CloudWatch, что угодно), чтобы вы могли действительно отлаживать проблемы, когда они возникают.

Для MOTD, если вы вращаете сезонные сообщения или хотите что-то динамическое, вы можете использовать замену переменных окружения. Установите `REPLACE_ENV_VARIABLES=true` и ссылайтесь на `${SOME_VAR}` в вашем файле конфигурации.

Также стоит отметить: если вам нужна пользовательская иконка сервера, образ может автоматически скачать и преобразовать её. Установите переменную окружения `ICON` по URL, и он обработает конвертацию 64x64 PNG для вас. Если у вас уже есть иконка в `/server`, используйте `OVERRIDE_ICON=true`, чтобы заменить её. Вы можете использовать наш Поиск блоков Minecraft, чтобы найти конкретные ID блоков, если вы строите блок-артефакты иконок сервера в творческом режиме сначала (да, люди это делают).

itzg/docker-mc-proxy - Apache-2.0, ★ 320
Об авторе
Alexandru Maftei
Alexandru MafteiВедущий автор

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Поделитесь с друзьями!

Комментарии

Пока нет комментариев. Станьте первым, кто поделится своим мнением!

We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies. Read our Privacy Policy