207 lines
8.8 KiB
Markdown
207 lines
8.8 KiB
Markdown
# AstraDeploy
|
||
|
||
[](LICENSE)
|
||
[](https://www.gnu.org/software/bash/)
|
||
[](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`)
|
||
- доступ в интернет для загрузки артефактов
|
||
|
||
## Поддерживаемые ядра
|
||
|
||
| Ядро | Директория по умолчанию | Порт | 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 |
|
||
|
||
> Режим `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>`
|
||
- `--mc-version <latest|version>`
|
||
- `--build <latest|tag>` (для `nethergamesmc`, версия PHP)
|
||
- 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. сборка/подготовка запуска.
|
||
|
||
## Режим обновления
|
||
|
||
`--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).
|
||
|
||
## Проверка версии скрипта
|
||
|
||
```bash
|
||
sudo bash install.sh --version
|
||
```
|
||
|
||
## Changelog
|
||
|
||
См. [`CHANGELOG.md`](CHANGELOG.md).
|