# 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 | > Режим `screen` доступен в текущей версии и настраивается через слой сервисов. ## Быстрый старт ```bash sudo bash install.sh --easy --core paper ``` Скрипт в этом режиме: 1. Предложит короткий план установки; 2. Подставит безопасные значения по умолчанию (`/opt/minecraft/`, дефолтный порт, `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 [--report-token ] ``` Скрипт шлёт статусы `started`, `step`, `success`, `failed`. Ошибки сети не прерывают установку. ## Логи Вывод зеркалится в `/var/log/astra-deploy`: ```bash /var/log/astra-deploy/install-YYYY-MM-DD-HH-MM-SS.log ``` ## Флаги и режимы ### Ядро и версии - `--core ` - `--mc-version ` - `--build ` (для `nethergamesmc`, версия PHP) - legacy алиасы: `--version`, `--core-version` ### Каталог и рантайм - `--dir ` - `--port ` - `--ram <2G>` - `--user ` - `--service ` - `--firewall ` ### Безопасность существующей папки - `--allow-existing` — продолжить, если папка не пуста; - `--backup-existing` — создать backup `*.backup-`; - `--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 ``` ## Contributing См. [`CONTRIBUTING.md`](CONTRIBUTING.md) для правил участия. ## Changelog См. [`CHANGELOG.md`](CHANGELOG.md).