Добавить docs/services/lxc207-games/minecraft.md

This commit is contained in:
zailon 2026-04-17 10:17:05 +05:00
parent 435b814a9d
commit 493520d7a6

View File

@ -0,0 +1,361 @@
# Minecraft Server (Forge 1.20.1) — LXC 207
> **Контейнер**: `games` (207)
> **Путь**: `/mnt/minecraft`
> **Порты**: `25565` (игра), `8080` (раздача модов через nginx)
> **Тип**: Forge 1.20.1 + AutoModpack + Offline Mode
---
## 📋 Описание
Сервер Minecraft на базе Forge 1.20.1 с автоматической раздачей модов клиентам. Конфигурация включает серверную часть и вспомогательный контейнер nginx для HTTP-раздачи файлов модов (AutoModpack).
**Особенности**:
- ✅ **Пиратский доступ**: `ONLINE_MODE: "false"` (вход без проверки лицензии).
- ✅ **Авто-установка модов**: Клиенту достаточно установить AutoModpack, моды скачаются сами.
- ✅ **Разделение задач**: Игровой сервер и веб-сервер (nginx) в одном `docker-compose`.
- ✅ **Оптимизация**: Выделено 8 ГБ оперативной памяти, Java 17.
---
## 🗂️ Структура файлов
```text
/mnt/minecraft/
├── docker-compose.yml # Основной конфиг запуска
├── data/ # Рабочая директория (синхронизируется с контейнером)
│ ├── world/ # Сохранение мира
│ ├── server.properties # Настройки сервера
│ └── ...
├── mods/ # Папка с модами (монтируется в контейнер)
│ └── *.jar # Файлы модов
├── config/ # Конфиги модов
│ └── automodpack.json # Настройки раздачи модов
└── automodpack/ # Дополнительные данные AutoModpack
└── automodpack.json
```
---
## ⚙️ Установка и настройка
### Шаг 1: Создание структуры папок
```bash
mkdir -p /mnt/minecraft/{data,mods,config,automodpack}
chown -R 1000:1000 /mnt/minecraft
```
### Шаг 2: Конфигурация Docker Compose
Создайте файл `/mnt/minecraft/docker-compose.yml`:
```yaml
services:
minecraft:
image: itzg/minecraft-server:java17
container_name: minecraft
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: FORGE
VERSION: "1.20.1"
MEMORY: "8G"
ONLINE_MODE: "false"
OVERRIDE_SERVER_PROPERTIES: "TRUE"
SERVER_PASSWORD: ""
RCON_PASSWORD: "rcon_secret_password"
ENABLE_RCON: "true"
DIFFICULTY: "easy"
MAX_PLAYERS: "20"
MOTD: "Welcome to Olimp Minecraft!"
PORT: "25565"
ALLOW_FLIGHT: "true"
ENABLE_COMMAND_BLOCK: "true"
TZ: "Asia/Yekaterinburg"
volumes:
- /mnt/minecraft//data
- /mnt/minecraft/mods:/mods:ro
- /mnt/minecraft/config:/config:ro
- /mnt/minecraft/automodpack:/automodpack
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
modpack-server:
image: nginx:alpine
container_name: minecraft-mods
ports:
- "8080:80"
volumes:
- /mnt/minecraft/mods:/usr/share/nginx/html:ro
restart: unless-stopped
```
### Шаг 3: Настройка AutoModpack
Создайте файл `/mnt/minecraft/config/automodpack.json`:
```json
{
"port": 8080,
"host": "0.0.0.0",
"modsDirectory": "/mods",
"allowDownload": true,
"requireAuth": false,
"logLevel": "info"
}
```
### Шаг 4: Запуск сервера
```bash
cd /mnt/minecraft
docker compose up -d
```
### Шаг 5: Проверка запуска
```bash
docker logs -f minecraft
```
```text
Ожидаемый вывод успешного запуска:
[Server thread/INFO]: Done (XX.XXXs)! For help, type "help"
[AutoModpack]: Hosting modpack on Minecraft port
```
---
## 🧩 Моды
> ⚠️ **Важно**: Все моды должны быть для **Forge 1.20.1**.
> Моды для Fabric/Quilt **не совместимы** и вызовут краш сервера.
### Принцип работы
1. Моды добавляются в папку `/mnt/minecraft/mods/`.
2. Сервер перезапускается: `docker restart minecraft`.
3. AutoModpack автоматически обновляет список доступных модов.
4. Клиенты при подключении скачивают новые моды через порт 8080.
### Шаблоны для описания (заполняется по мере добавления)
#### 🎨 Графика и визуал
> *Моды, улучшающие графику, оптимизирующие рендеринг.*
> ⚠️ Клиентские моды (Oculus, Rubidium, Sodium) **не ставить на сервер**!
```text
[Шаблон для заполнения]
- Название мода:
- Версия:
- Ссылка:
- Зависимости:
- Примечание:
```
#### 🧱 Новые блоки и предметы
> *Моды, добавляющие контент: блоки, предметы, механизмы.*
```text
[Шаблон для заполнения]
- Название мода:
- Версия:
- Ссылка:
- Зависимости:
- Примечание:
```
#### 👹 Мобы и существа
> *Моды, добавляющие новых мобов, боссов, животных.*
```text
[Шаблон для заполнения]
- Название мода:
- Версия:
- Ссылка:
- Зависимости:
- Примечание:
```
#### ⚡ Оптимизация сервера
> *Моды, снижающие нагрузку на сервер: память, ЦП, диск.*
```text
[Шаблон для заполнения]
- Название мода:
- Версия:
- Ссылка:
- Зависимости:
- Примечание:
```
### Как добавить мод
```bash
# 1. Скачать мод (проверить: Forge 1.20.1)
wget -O modname.jar "ссылкааайл"
# 2. Проверить целостность (обязательно!)
file modname.jar
# Должно быть: "Java archive data" или "Zip archive data"
# 3. Переместить в папку модов
mv modname.jar /mnt/minecraft/mods/
# 4. Перезапустить сервер
docker restart minecraft
```
---
## 🎮 Подключение клиента
### Требования к клиенту
1. **Minecraft 1.20.1**
2. **Forge 1.20.1** (установить в лаунчере)
3. **AutoModpack (client)** — [скачать с Modrinth](https://modrinth.com/mod/automodpack)
### Настройка
1. Установить Forge 1.20.1 и AutoModpack (client) в лаунчер.
2. Создать файл `config/automodpack.json` в папке профиля клиента:
```json
{
"serverUrl": "http://<IP_СЕРВЕРА>:8080"
}
```
*Замените `<IP_СЕРВЕРА>` на `192.168.1.207` (локально) или ваш внешний домен.*
### Подключение
1. Запустить Minecraft.
2. Multiplayer → Add Server.
3. Адрес: `192.168.1.207:25565`.
4. При входе моды скачаются автоматически.
---
## 🔧 Полезные команды
### Управление сервером
```bash
# Запуск / остановка
cd /mnt/minecraft
docker compose up -d
docker compose down
# Перезапуск (после добавления модов)
docker restart minecraft
# Просмотр логов
docker logs -f minecraft
```
### Администрирование (RCON)
```bash
# Выдать права оператора (выполнить внутри контейнера)
docker exec -it minecraft rcon-cli op <имя_игрока>
# Другие команды
docker exec -it minecraft rcon-cli gamemode creative <имя_игрока>
docker exec -it minecraft rcon-cli whitelist on
docker exec -it minecraft rcon-cli stop
```
### Работа с модами
```bash
# Список файлов в папке
ls -lh /mnt/minecraft/mods/
# Удаление мода
rm /mnt/minecraft/mods/<название>.jar
docker restart minecraft
```
---
## 🚨 Решение проблем
### Ошибка "Invalid Session" (Недействительная сессия)
**Причина**: Сервер требует лицензию, а клиент не прошел проверку (пиратка).
**Решение**:
1. Убедитесь, что в `docker-compose.yml` указано: `ONLINE_MODE: "false"`.
2. Перезапустите контейнеры:
```bash
cd /mnt/minecraft
docker compose down
docker compose up -d
```
### Краш при запуске: `java.util.zip.ZipException: zip END header not found`
**Причина**: Один из файлов `.jar` в папке `/mnt/minecraft/mods/` поврежден или скачан не полностью (например, скачалась HTML страница вместо мода).
**Решение**:
1. Найти битый файл командой проверки целостности.
2. Удалить его.
3. Очистить кэш внутри контейнера и перезапуститься.
```bash
# Проверка всех модов на целостность
for f in *.jar; do
if unzip -t "$f" &>/dev/null; then
echo "✅ $f"
else
echo "❌ ПОВРЕЖДЁН: $f"
ls -lh "$f"
fi
done
# Очистка и перезапуск
rm -rf /mnt/minecraft/data/mods/*
docker restart minecraft
```
### Клиент не скачивает моды
1. Проверьте доступность порта 8080 с клиента:
```bash
telnet 192.168.1.207 8080
```
2. Убедитесь, что `modpack-server` (nginx) запущен:
```bash
docker ps | grep minecraft-mods
```
3. Проверьте конфиг `automodpack.json` на клиенте (указан правильный IP).
---
## 🔐 Безопасность
### Настройки для пиратского сервера
Так как `ONLINE_MODE: "false"`, любой может зайти под любым ником. Рекомендуется:
1. **Пароль на сервер**: Укажите `SERVER_PASSWORD` в `docker-compose.yml`.
2. **Белый список (Whitelist)**:
- Включите в настройках или через RCON: `whitelist on`.
- Добавляйте игроков: `whitelist add <ник>`.
```bash
# Включить вайтлист через RCON
docker exec -it minecraft rcon-cli whitelist on
docker exec -it minecraft rcon-cli whitelist add zailon
```
### Резервное копирование
```bash
# Копирование мира
tar -czf /backup/minecraft_world_$(date +%F).tar.gz /mnt/minecraft/data/world/
```
---
## 🔄 Обновление
### Обновление модов
1. Скачать новую версию `.jar`.
2. Заменить старый файл в `/mnt/minecraft/mods/`.
3. Перезапустить сервер.
### Обновление ядра Forge
Обновляется автоматически при изменении переменной `VERSION` или `FORGEVERSION` в `docker-compose.yml` и перезапуске контейнера.