В этом посте будет показано, как настроить свой собственный игровой сервер minecraft в docker с помощью docker-compose на виртуальный VPS/VDS сервер.
Требования
Поскольку мы будем запускать minecraft как контейнер docker, нам потребуются docker и docker-compose. Вы можете перейти по ссылкам на их веб-сайт, чтобы получить инструкции по его установке.
Вкратце, для установки docker потребуется следующее:
curl https://get.docker.com | bash
sudo usermod -aG docker $USER
И следующие действия для установки docker-compose:
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, выполнив:
docker --version
docker-compose --version
Конфигурация
Создайте каталог проекта:
mkdir -p ~/mincraft
Перейдите в каталог:
cd ~/minecraft
Создайте docker-compose.yml
файл и откройте его с помощью выбранного вами редактора, затем предоставьте это содержимое:
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 нашего пользователя:
echo UID=$(id -u) > .env
echo GID=$(id -g) >> .env
Ваш, скорее всего, будет отличаться, но мой выглядит так:
cat .env
UID=501
GID=20
Далее нам нужно настроить белый список и игроков ops в WHITELISTED_PLAYERS
и OPS_PLAYERS
, чтобы конечный результат выглядел примерно так:
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, который вы хотите добавить в файл, в качестве примера:
https://media.forgecdn.net/files/3399/353/FastLeafDecay-26.jar
Запустите сервер Minecraft
Как только это будет установлено, запустите сервер minecraft:
docker-compose up -d
Пока сервер загружается, вы можете следить за логами:
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:
docker exec -it minecraft-server mc-monitor status
localhost:25565 : version=1.17.1 online=0 max=20 motd='Forge Minecraft Server'
Командная строка Minecraft
Мы можем получить доступ к командной строке minecraft с помощью следующего:
docker-compose exec minecraft-server rcon-cli>
Чтобы внести наших игроков в белый список:
> /whitelist list
There are 3 whitelisted players: x, x, x
Чтобы перезапустить сервер:
> /stop
Установить Minecraft
Установите minecraft java edition на свой ПК с:
После установки установите клиент forge:
Откройте minecraft, и вы должны увидеть forge в разделе наших установок:
Когда мы запустим нашу установку forge, вы должны увидеть что-то вроде этого:
Затем в разделе многопользовательской игры вы должны увидеть серверы ниже:
Скорее всего, по умолчанию у вас не будет серверов, поэтому добавьте свой сервер, вам понадобится IP-адрес того места, где запущен minecraft:
Сохраните его и присоединяйтесь к своему серверу, и вы должны быть подключены к своему серверу.
Примечание о модах Forge
Для правильной работы модов
Создайте скрипт резервного копирования в /opt/scripts/backup_minecraft.sh
со следующим содержимым:
#!/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.
Измените разрешения нашего скрипта резервного копирования, чтобы сделать его исполняемым:
chmod +x /opt/scripts/backup_minecraft.sh
Откройте crontab с помощью crontab -e
и добавляйте выражение cron в резервную копию ежедневно в 00:00:
00 00 * * * /opt/scripts/backup_minecraft.sh
Руководство по началу работы
Это хороший туториал, на который я наткнулся для начала работы: