Files
AstraDeploy/README.ru.md

253 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AstraDeploy
[![License](https://img.shields.io/badge/Лицензия-MIT-green)](LICENSE)
[![Bash](https://img.shields.io/badge/Bash-4%2B-brightgreen)](https://www.gnu.org/software/bash/)
[![Version](https://img.shields.io/badge/Version-v0.1.0-blue)](README.ru.md)
`AstraDeploy` — это bash-инсталлятор для Minecraft ядер (Java и Bedrock) с акцентом на простую установку и автоматизацию:
- режим для нубов (`--easy`);
- non-interactive/бот-режим (`--yes`, `--non-interactive`);
- отчёты в callback и локальный лог;
- сервисные режимы `systemd`, `tmux-systemd`, `screen`, `none`;
- пошаговый прогресс (удобно для отправки статусов пользователю из бота);
- отдельные соглашения по лицензии/ EULA;
- rollback и dry-run.
Текущая версия: `v0.1.0`.
## Требования
- Bash 4+
- права `root` (или `sudo`)
- доступ в интернет для загрузки артефактов
## Матрица совместимости
| Окружение | Статус | Комментарий |
|---|---|---|
| Ubuntu / Debian | ✅ Поддерживается | Основная целевая платформа для текущего MVP (`apt`) |
| Alma / Rocky / RHEL-семейство | ⚠️ Частично | Роуты поддержки запланированы, финальная валидация в работе |
| Arch Linux | ⚠️ Частично | Архитектурно предусмотрена поддержка, но пока не полностью провалидирована |
| Fedora | ⚠️ Частично | Архитектурно предусмотрена поддержка, но пока не полностью провалидирована |
| `yum` / `dnf` | ⚠️ Частично | Нужна доработка до полной валидации сервисов/зависимостей |
| `pacman` | ⚠️ Частично | Есть детект и абстракция, полная валидация в следующих релизах |
| `tmux` | ✅ Поддерживается | Требуется для режима `tmux-systemd` |
| `screen` | ✅ Поддерживается | Опциональный тип запуска сервиса |
| `systemd` | ✅ Поддерживается | Нужен для автозапуска в service-режимах |
## Поддерживаемые ядра
| Ядро | Директория по умолчанию | Порт | Runtime | Протокол | Примечание |
|---|---|---:|---|---|---|
| `pmmp` | `/opt/minecraft/pmmp` | `19132` | PHP | UDP | PocketMine Bedrock |
| `paper` | `/opt/minecraft/paper` | `25565` | Java 21 | TCP | Нужна явная обработка/подтверждение EULA Java |
| `purpur` | `/opt/minecraft/purpur` | `25565` | Java 21 | TCP | Нужна явная обработка/подтверждение EULA Java |
| `velocity` | `/opt/minecraft/velocity` | `25577` | Java 21 | TCP | Нужна явная обработка/подтверждение EULA Java |
| `powernukkitx` | `/opt/minecraft/powernukkitx` | `19132` | Java 21 | UDP | Нужна явная обработка/подтверждение EULA Java |
| `nethergamesmc` | `/opt/minecraft/nethergamesmc` | `19132` | PHP | UDP | Доп. вопросы по PHP build и версии PocketMine-MCPE |
| `bds` | `/opt/minecraft/bds` | `19132` | native | UDP | Официальный бинарник Bedrock Dedicated Server |
> Режим `screen` доступен в текущей версии и настраивается через слой сервисов.
## Быстрый старт
```bash
sudo bash install.sh --easy --core paper
```
Скрипт в этом режиме:
1. Предложит короткий план установки;
2. Подставит безопасные значения по умолчанию (`/opt/minecraft/<core>`, дефолтный порт, `tmux-systemd`, пользователь `minecraft`);
3. Установит зависимости, скачает выбранное ядро и создаст service.
## Non-interactive / бот / CI
```bash
sudo bash install.sh \
--yes \
--core paper \
--dir /opt/minecraft/paper \
--port 25565 \
--service tmux-systemd \
--ram 4G \
--firewall yes \
--accept-eula yes \
--accept-license yes \
--locale ru
```
## Пошаговая выдача (для «бота для нубов»)
Скрипт пишет этапы:
- разбор аргументов и проверка окружения;
- определение ОС/пакетного менеджера;
- проверка лицензии и EULA;
- проверка доступности порта;
- подготовка папки и пользователя;
- установка зависимостей / Java (для Java ядер);
- деплой ядра;
- настройка сервиса и прав.
На этот вывод удобно мапить сообщения для отправки пользователю по шагам.
### Callback-отчёты
```bash
--report-url <url> [--report-token <token>]
```
Скрипт шлёт статусы `started`, `step`, `success`, `failed`. Ошибки сети не прерывают установку.
## Логи
Вывод зеркалится в `/var/log/astra-deploy`:
```bash
/var/log/astra-deploy/install-YYYY-MM-DD-HH-MM-SS.log
```
## Флаги и режимы
### Ядро и версии
- `--core <pmmp|paper|purpur|velocity|powernukkitx|nethergamesmc|bds>`
- `--mc-version <latest|version>`
- `--build <latest|tag>` (для `nethergamesmc`, версия PHP)
- `--mc-version` для `bds` и `nethergamesmc`:
- `nethergamesmc`: версия/тег PocketMine-MCPE
- `bds`: версия Bedrock Dedicated Server (`latest` определяется автоматически)
- legacy алиасы: `--version`, `--core-version`
### Каталог и рантайм
- `--dir <path>`
- `--port <port>`
- `--ram <2G>`
- `--user <username>`
- `--service <systemd|tmux-systemd|screen|none>`
- `--firewall <yes|no>`
### Безопасность существующей папки
- `--allow-existing` — продолжить, если папка не пуста;
- `--backup-existing` — создать backup `*.backup-<timestamp>`;
- `--force-clean` — удалить содержимое и начать с чистого листа;
- без этих флагов в non-interactive, если папка не пустая, установка останавливается.
### Режимы запуска инсталлера
- `--easy` / `-E` — быстрый guided режим с предпросмотром плана;
- `--yes` / `-y` — автоматические подтверждения;
- `--non-interactive` — полностью без вопросов;
- `--dry-run` — безопасный прогон;
- `--debug` — подробный лог.
### Соглашения
- `--accept-license yes|no` / `--license`
- `--accept-eula yes|no` / `--eula` для Java ядер
В автоматическом режиме (`--yes`) соглашения должны быть явно подтверждены.
## Пример для NetherGamesMC
```bash
sudo bash install.sh \
--easy \
--core nethergamesmc \
--dir /opt/minecraft/nethergamesmc \
--build latest \
--mc-version latest \
--service tmux-systemd
```
Путь для `nethergamesmc`:
1. разрешение PHP build;
2. загрузка/подготовка PHP + Composer;
3. клонирование `PocketMine-MP`;
4. сборка/подготовка запуска.
## Пример для BDS
```bash
sudo bash install.sh \
--easy \
--core bds \
--dir /opt/minecraft/bds \
--mc-version latest \
--service tmux-systemd
```
Путь для `bds`:
1. разрешение версии Bedrock;
2. скачивание `bedrock-server-<версия>.zip`;
3. разархивация и обновление файлов сервера;
4. генерация `start.sh` и настройка сервиса.
## Режим обновления
`--update` переводит в режим обновления. Сначала проверяется существование и непустота директории, затем выполняется core-специфичный апдейт.
## Локализация
- `--locale en|ru` или `--lang en|ru`
- автоматический fallback из `LANGUAGE` / `LANG`
## Устранение типовых проблем
- **Порт уже занят**
- Проверьте кто держит порт через `lsof -i:<порт>` и остановите процесс, или укажите другой `--port`.
- Убедитесь, что выбранный порт доступен по нужному протоколу (`tcp`/`udp`) для ядра.
- **Ошибка установки зависимостей / пакетов**
- Повторите запуск с `--debug`, это покажет обнаруженный пакетный менеджер и упавшую команду.
- Проверьте интернет и доступность репозиториев пакетов.
- **Permission denied при создании/изменении файлов**
- Запускайте как `root` (через `sudo`) для полномасштабной установки.
- Проверьте, что пользователь из `--user` существует и имеет права на директорию `--dir`.
- **Firewall не открылся автоматически**
- Если `ufw`/`firewalld` отсутствуют, скрипт сообщит про ручную настройку.
- Откройте порт вручную в вашей системе безопасности.
- **Коллбэк репортов не отправляется**
- Ошибки callback не останавливают установку.
- Проверьте URL/token и повторите с корректными `--report-url` и `--report-token`.
## Важные замечания
- Скрипт работает с повышенными правами и может менять сервисы, firewall, пакеты, файлы.
- На проде обязательно иметь актуальный backup перед запуском.
- Если API callback недоступен, установка продолжится с локальными логами.
## Лицензия
Репозиторий распространяется под **MIT License**.
Полный текст — в файле [`LICENSE`](LICENSE).
## Подробное использование
Примеры по каждому ядру:
- [`docs/USAGE.md`](docs/USAGE.md) (на английском)
- [`docs/USAGE.ru.md`](docs/USAGE.ru.md) (на русском)
## Проверка версии скрипта
```bash
sudo bash install.sh --version
```
## Contributing
См. [`CONTRIBUTING.md`](CONTRIBUTING.md) для правил участия.
## Changelog
См. [`CHANGELOG.md`](CHANGELOG.md).