В этом посте будет показано, как настроить свой собственный игровой сервер minecraft в docker с помощью docker-compose на виртуальный VPS/VDS сервер.
Требования
Поскольку мы будем запускать minecraft как контейнер docker, нам потребуются docker и docker-compose. Вы можете перейти по ссылкам на их веб-сайт, чтобы получить инструкции по его установке.
Вкратце, для установки docker потребуется следующее:
1 2 |
curl https://get.docker.com | bash sudo usermod -aG docker $USER |
И следующие действия для установки docker-compose:
1 2 3 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose |
Обратите внимание, что я установил версию 1.28.5, в будущем она может устареть, поэтому я рекомендую получать последнюю версию с их веб-сайта.
Вы можете проверить, были ли установлены docker и docker-compose, выполнив:
1 2 |
docker --version docker-compose --version |
Конфигурация
Создайте каталог проекта:
1 |
mkdir -p ~/mincraft |
Перейдите в каталог:
1 |
cd ~/minecraft |
Создайте docker-compose.yml
файл и откройте его с помощью выбранного вами редактора, затем предоставьте это содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
version: "3.8" services: minecraft-server: image: itzg/minecraft-server:latest container_name: minecraft-server ports: - 25565:25565 environment: SERVER_NAME: "Dockerized-Minecraft-Server" MOTD: "Forge Minecraft Server" EULA: "TRUE" TYPE: "FORGE" VERSION: "1.17.1" MODE: "survival" MEMORY: "1G" LEVEL_TYPE: "DEFAULT" ENABLE_RCON: "true" RCON_PASSWORD: password RCON_PORT: 28016 SERVER_PORT: 25565 ENABLE_WHITELIST: "true" WHITELIST: "${WHITELISTED_PLAYERS}" OPS: "${OPS_PLAYERS}" MAX_PLAYERS: 20 ANNOUNCE_PLAYER_ACHIEVEMENTS: "true" SPAWN_ANIMALS: "true" SPAWN_MONSTERS: "true" PVP: "true" LEVEL: "cold" TZ: "Africa/Johannesburg" GUI: "FALSE" MODS_FILE: /extras/mods.txt REMOVE_OLD_MODS: "true" restart: unless-stopped user: "${UID}:${GID}" volumes: - ./data:/data - ./mods.txt:/extras/mods.txt:ro logging: driver: "json-file" options: max-size: "1m" |
Мы хотим, чтобы пользователь, создающий каталог данных, был тем же пользователем, которого используем мы, чтобы избежать проблем с разрешениями, поэтому нам нужно создать .env
файл и установить для UID
и GID
значений userid и groupid нашего пользователя:
1 2 |
echo UID=$(id -u) > .env echo GID=$(id -g) >> .env |
Ваш, скорее всего, будет отличаться, но мой выглядит так:
1 2 3 |
cat .env UID=501 GID=20 |
Далее нам нужно настроить белый список и игроков ops в WHITELISTED_PLAYERS
и OPS_PLAYERS
, чтобы конечный результат выглядел примерно так:
1 2 3 4 |
UID=501 GID=20 WHITELISTED_PLAYERS=mygamertag,player2,player3 OPS_PLAYERS=mygamertag |
Если вам не нужны моды, вы можете удалить запись MODS_FILE
и REMOVE_OLD_MODS
, но в этом случае я буду устанавливать мод Fast Leaf Decay из curseforge.com.
Создайте файл ~/minecraft/mods.txt
и добавьте jar, который вы хотите добавить в файл, в качестве примера:
1 |
https://media.forgecdn.net/files/3399/353/FastLeafDecay-26.jar |
Запустите сервер Minecraft
Как только это будет установлено, запустите сервер minecraft:
1 |
docker-compose up -d |
Пока сервер загружается, вы можете следить за логами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
docker-compose logs -f minecraft-server ... minecraft-server | [20:18:55] [modloading-worker-1/INFO]: Forge mod loading, version 37.0.103, for MC 1.17.1 with MCP 20210706.113038 minecraft-server | [20:18:55] [modloading-worker-1/INFO]: MinecraftForge v37.0.103 Initialized minecraft-server | [20:19:00] [main/INFO]: Reloading ResourceManager: Default, forge-1.17.1-37.0.103-universal.jar, FastLeafDecay-26.jar minecraft-server | [20:19:06] [Server thread/INFO]: Starting Minecraft server on *:25565 minecraft-server | [20:19:10] [Server thread/INFO]: Preparing level "cold" minecraft-server | [20:19:12] [Worker-Main-2/INFO]: Preparing spawn area: 0% minecraft-server | [20:19:18] [Worker-Main-2/INFO]: Preparing spawn area: 9% minecraft-server | [20:19:19] [Worker-Main-2/INFO]: Preparing spawn area: 23% minecraft-server | [20:19:20] [Server thread/INFO]: Time elapsed: 9527 ms minecraft-server | [20:19:20] [Server thread/INFO]: Done (9.928s)! For help, type "help" minecraft-server | [20:19:20] [Server thread/INFO]: Starting remote control listener minecraft-server | [20:19:20] [Server thread/INFO]: Thread RCON Listener started minecraft-server | [20:19:20] [Server thread/INFO]: RCON running on 0.0.0.0:28016 minecraft-server | [20:19:20] [RCON Listener #1/INFO]: Thread RCON Client /172.19.0.3 started |
Как только сервер загрузится, мы можем проверить это с помощью команды healthcheck:
1 2 3 4 |
docker exec -it minecraft-server mc-monitor status localhost:25565 : version=1.17.1 online=0 max=20 motd='Forge Minecraft Server' |
Командная строка Minecraft
Мы можем получить доступ к командной строке minecraft с помощью следующего:
1 |
docker-compose exec minecraft-server rcon-cli> |
Чтобы внести наших игроков в белый список:
1 2 |
> /whitelist list There are 3 whitelisted players: x, x, x |
Чтобы перезапустить сервер:
1 |
> /stop |
Установить Minecraft
Установите minecraft java edition на свой ПК с:
После установки установите клиент forge:
Откройте minecraft, и вы должны увидеть forge в разделе наших установок:
Когда мы запустим нашу установку forge, вы должны увидеть что-то вроде этого:
Затем в разделе многопользовательской игры вы должны увидеть серверы ниже:
Скорее всего, по умолчанию у вас не будет серверов, поэтому добавьте свой сервер, вам понадобится IP-адрес того места, где запущен minecraft:
Сохраните его и присоединяйтесь к своему серверу, и вы должны быть подключены к своему серверу.
Примечание о модах Forge
Для правильной работы модов
Создайте скрипт резервного копирования в /opt/scripts/backup_minecraft.sh
со следующим содержимым:
1 2 3 |
#!/usr/bin/env bash tar -zcvf /opt/backups/minecraft/backup-$(date +%F).tar.gz ~/minecraft find /opt/backups/minecraft/ -type f -name "backup-*.tar.gz" -mtime +7 -exec rm {} \; |
Этот скрипт сожмет каталог проекта minecraft в архив и удалит все резервные копии старше 7 дней, которые мы запустим в cronjob.
Измените разрешения нашего скрипта резервного копирования, чтобы сделать его исполняемым:
1 |
chmod +x /opt/scripts/backup_minecraft.sh |
Откройте crontab с помощью crontab -e
и добавляйте выражение cron в резервную копию ежедневно в 00:00:
1 |
00 00 * * * /opt/scripts/backup_minecraft.sh |
Руководство по началу работы
Это хороший туториал, на который я наткнулся для начала работы: